このコンテンツは選択した言語では利用できません。
Chapter 4. Customizing GitLab pipelines and rebuilding container images
When customizing pipelines in GitLab, rebuilding the container image is a critical step to ensure your changes are included in the updated workflow.
Pipelines in GitLab rely on a specific container image, such as the GitLab runner image, to run the tasks defined in your CI/CD workflow. The GitLab runner image provides the necessary tools, configuration, and scripts required for your pipeline to run. If you modify tasks in the pipeline, you must update and rebuild the container image to include those changes. This ensures that the pipeline tasks are properly executed when the pipeline is triggered.
Rebuilding the container image involves the following steps:
-
Running
podmanto extract the existing pipeline files. - Customizing the pipeline tasks with your requirements.
- Rebuilding the container image.
- Pushing the updated image to a container registry.
Prerequisites
Before making changes, ensure that:
-
You have
podmaninstalled on your system. - You have login credentials for Quay.io to push the updated image.
- You have forked and cloned the Sample templates repository.
- Your forked repository is up to date and synced with the upstream repository.
Procedure
Create a directory for the build resources. The location of the directory depends on your role:
-
Platform engineer: If you are rebuilding the image to update the default pipeline for your organization, you can create the directory within the location where you forked the
tssc-sample-templatesrepository. For example,rebuild-image. Developers: If you are rebuilding the image for your own use or a specific project, create a directory in a location outside the organization-wide fork of
tssc-sample-templatesto avoid conflicts.mkdir rebuild-image
$ mkdir rebuild-imageCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Platform engineer: If you are rebuilding the image to update the default pipeline for your organization, you can create the directory within the location where you forked the
Run the following command and copy the container
imageURL:less ../tssc-sample-templates/skeleton/ci/source-repo/gitlabci/.gitlab-ci.yml
$ less ../tssc-sample-templates/skeleton/ci/source-repo/gitlabci/.gitlab-ci.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow image: quay.io/redhat-tssc/task-runner/
image: quay.io/redhat-tssc/task-runner/Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy the existing pipeline content locally by running the following command:
podman run -v $(pwd):/pwd:z <The_url_you_copied_in_step_2> cp -r /work/tssc /pwd
$ podman run -v $(pwd):/pwd:z <The_url_you_copied_in_step_2> cp -r /work/tssc /pwdCopy to Clipboard Copied! Toggle word wrap Toggle overflow This command starts the container by using the
<the_url_you_copied_in_step_2>image. It then copies the pipeline files from/work/tsscinside the container to your working directory ($(pwd)). Additionally, if you are not on a system with SELinux enabled (for example, Fedora, RHEL, or CentOS), remove the:zoption in the command to ensure compatibility.-
Navigate to the
rhtapdirectory and customize the pipelines tasks as required. Create a
Dockerfilein therebuild-imagedirectory and add the following content to include your changes in the container. Additionally, the base imagequay.io/redhat-tssc/task-runner:1.8is built onubi/ubi-minimal, which provides a lightweight Universal Base Image (UBI). If you need to install additional software and dependencies, usemicrodnf. For example, example command:FROM quay.io/redhat-tssc/task-runner:1.8 COPY ./tssc /work/tssc RUN microdnf -y install make
FROM quay.io/redhat-tssc/task-runner:1.8 COPY ./tssc /work/tssc RUN microdnf -y install makeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - FROM
-
Uses the existing
rhtap-runnercontainer as the starting point. - COPY
-
Copies the updated pipeline tasks from the local
rhtapfolder into the /work/tssc directory inside the container. - RUN
-
Demonstrates the use of the
microdnfto install additional software or dependencies.
Build the new container image by running the following command:
podman build -f Dockerfile -t quay.io/<namespace>/<new_image_name>
$ podman build -f Dockerfile -t quay.io/<namespace>/<new_image_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
-f Dockerfileoption specifies the Dockerfile to use to build the container image. The-foption allows you to explicitly point to the Dockerfile if it’s not namedDockerfileor is located in a different directory. The-t quay.io/<namespace>/<new_image_name>option assigns a tag (name) to the container image for easy identification.Login to Quay.io by running the following command:
podman login quay.io
$ podman login quay.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow Push the updated image by running the following command:
podman push quay.io/<namespace>/<new_image_name>
$ podman push quay.io/<namespace>/<new_image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow This uploads the customized container image to Quay.io, making it available for use in GitLab pipelines.
Platform engineer only: Navigate to the
.gitlab-ci.ymlin the tssc-sample-templates > skeleton > ci > source-repo > gitlabci > directory and replace the container image URL with the one you just created. This makes the new container image the default.image: quay.io/<namespace>/<new_image_name>
image: quay.io/<namespace>/<new_image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow For developers only: To update the container image just for a single repository in GitLab, navigate to the source repository >
.gitlab-ci.yamland replace the container image URL with the one you just created.image: quay.io/<namespace>/<new_image_name>
image: quay.io/<namespace>/<new_image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Commit and push the changes to apply the updated pipeline configuration.