第 3 章 自定义 GitLab 管道并重建容器镜像
在 GitLab 中自定义管道时,重建容器镜像是一个关键步骤,可确保您的更改包含在更新的工作流中。
GitLab 中的管道依赖于特定的容器镜像,如 GitLab 运行程序镜像,以执行 CI/CD 工作流中定义的任务。GitLab 运行程序镜像提供运行管道所需的必要工具、配置和脚本。如果修改管道中的任务,您必须更新并重建容器镜像,使其包含这些更改。这样可确保在触发管道时正确执行管道任务。
重建容器镜像涉及以下步骤:
-
运行
podman
以提取现有的管道文件。 - 根据您的要求自定义管道任务。
- 重建容器镜像。
- 将更新的镜像推送到容器 registry。
先决条件
-
必须在您的系统上安装了
podman
。 - 您必须具有 Quay.io 的登录凭证,才能推送更新的镜像。
- 您必须已分叉并在本地克隆 Sample 模板。
- 您必须确保 fork 的版本为最新版本,并与上游存储库同步。
流程
为构建资源创建一个目录。目录的位置取决于您的角色:
-
平台工程师: 如果您要重建镜像以更新机构的默认管道,您可以在 fork
tssc-sample-templates
存储库的位置创建该目录。例如,重新构建
。 -
开发人员: 如果您要为自己的使用或特定项目重建镜像,请在
tssc-sample-templates
机构范围内分叉之外的位置创建一个目录以避免冲突。
mkdir rebuild-image
-
平台工程师: 如果您要重建镜像以更新机构的默认管道,您可以在 fork
运行以下命令并复制
容器镜像
URL:more ../tssc-sample-templates/skeleton/ci/source-repo/gitlabci/.gitlab-ci.yml # Example: ... image: quay.io/redhat-appstudio/rhtap-task-runner:latest ...
运行以下命令在本地复制现有管道内容:
podman run -v $(pwd):/pwd:z <The_url_you_copied_in_step_2> cp -r /work/rhtap /pwd 1
- 1
- 此命令使用 <
the_url_you_copied_in_step_2>
镜像启动容器。然后,它会将容器内的 /work/rhtap 中的管道文件复制到工作目录中($(pwd)。另外,如果您不在启用了 SELinux 的系统上(如 Fedora、RHEL、pr CentOS),请删除命令中的:z
选项以确保兼容性。
-
导航到
rhtap
目录,并根据需要自定义管道任务。 在
rebuild-image
目录中创建Dockerfile
,并添加以下内容来在容器中包含您的更改:另外,基础镜像quay.io/redhat-app Studio/rhtap-task-runner:latest
基于ubi/ubi-minimal
,它提供了一个轻量级通用基础镜像(UBI)。如果您需要安装其他软件和依赖项,请使用microdnf
。一个命令示例:FROM quay.io/redhat-appstudio/rhtap-task-runner:latest 1 #Copy the updated pipeline tasks COPY ./rhtap /work/rhtap 2 # Example: Install additional software (for example, git) RUN microdnf -y install make 3
使用以下命令构建新容器镜像:
podman build -f Dockerfile -t quay.io/<namespace>/<new_image_name> 1
- 1
-f Dockerfile
指定用于构建容器镜像的 Dockerfile。如果 Dockerfile 没有被命名或位于其他目录中,可以使用-f
标志明确指向Dockerfile
。-T quay.io/<namespace>/<new_image_name
> 为容器镜像分配一个标签(名称)以便轻松识别。
登录到 Quay.io 并推送更新的镜像:
podman login quay.io # Enter username and password podman push quay.io/<namespace>/<new_image_name> 1
- 1
- 这会将自定义容器镜像上传到 Quay.io,使它可用于 GitLab 管道。
仅限平台工程师:导航到 tssc-sample-templates > skeleton > ci > source-repo > gitlabci >
.gitlab-ci.yml
文件,并将容器镜像 URL 替换为您刚才创建的镜像 URL。这使得新容器镜像成为默认值。image: quay.io/<namespace>/<new_image_name>
仅限开发人员:为 GitLab 中的单个存储库更新容器镜像:
-
导航到源存储库 >
.gitlab-ci.yaml
,并将容器镜像 URL 替换为您刚才创建的镜像 URL。
image: quay.io/<namespace>/<new_image_name>
-
导航到源存储库 >
- 提交并推送更改以应用更新的管道配置。