チュートリアル: OpenShift上のGitLab Runner Operatorでルートレスコンテナ内のBuildahを使用する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
このチュートリアルでは、OpenShiftクラスター上のGitLab Runner Operatorを使用してデプロイされたRunnerで、buildahツールを使用してイメージを正常にビルドする方法を説明します。
このガイドは、GitLab Runner Operatorのusing Buildah to build images in aルートレスコンテナOpenShift containerドキュメントを翻案したものです。
このチュートリアルを完了する手順は、次のとおりです:
- Buildahイメージを設定します。
- サービスアカウントを設定します。
- ジョブを設定します。
はじめる前
このチュートリアルを完了する前に、以下があることを確認してください:
gitlab-runnerネームスペースにデプロイされたRunnerがすでに存在すること。
Buildahイメージを設定します
quay.io/buildah/stable:v1.23.1イメージに基づいてカスタムイメージを準備することから始めます。
Containerfile-buildahファイルを作成します:cat > Containerfile-buildah <<EOF FROM quay.io/buildah/stable:v1.23.1 RUN touch /etc/subgid /etc/subuid \ && chmod g=u /etc/subgid /etc/subuid /etc/passwd \ && echo build:10000:65536 > /etc/subuid \ && echo build:10000:65536 > /etc/subgid # Use chroot because the default runc does not work when running rootless RUN echo "export BUILDAH_ISOLATION=chroot" >> /home/build/.bashrc # Use VFS because fuse does not work RUN mkdir -p /home/build/.config/containers \ && (echo '[storage]';echo 'driver = "vfs"') > /home/build/.config/containers/storage.conf # The buildah container will run as `build` user USER build WORKDIR /home/build EOFBuildahイメージをコンテナレジストリにビルドしてプッシュします。GitLabコンテナレジストリにプッシュしましょう:
docker build -f Containerfile-buildah -t registry.example.com/group/project/buildah:1.23.1 . docker push registry.example.com/group/project/buildah:1.23.1
サービスアカウントを設定します
これらの手順では、OpenShiftクラスターに接続されたターミナルでコマンドを実行する必要があります。
buildah-saという名前のサービスアカウントを作成するには、このコマンドを実行します:oc create -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: buildah-sa namespace: gitlab-runner EOF作成したサービスアカウントに、
anyuidSCCで実行する機能を提供します:oc adm policy add-scc-to-user anyuid -z buildah-sa -n gitlab-runner新しいサービスアカウントを使用するようにOperatorを設定するには、Runner設定テンプレートを使用します。以下を含む
custom-config.toml設定ファイルを作成します:[[runners]] [runners.kubernetes] service_account_overwrite_allowed = "buildah-*"custom-config.tomlファイルからcustom-config-tomlという名前のConfigMapを作成します:oc create configmap custom-config-toml --from-file config.toml=custom-config.toml -n gitlab-runnerカスタムリソース定義(CRD)ファイルを更新して、
Runnerのconfigプロパティを設定します:apiVersion: apps.gitlab.com/v1beta2 kind: Runner metadata: name: buildah-runner spec: gitlabUrl: https://gitlab.example.com token: gitlab-runner-secret config: custom-config-toml
ジョブを設定します
最後のステップは、新しいBuildahイメージと設定されたサービスアカウントを使用するために、プロジェクトでGitLab /CI/CD設定ファイルを設定することです:
build:
stage: build
image: registry.example.com/group/project/buildah:1.23.1
variables:
STORAGE_DRIVER: vfs
BUILDAH_FORMAT: docker
BUILDAH_ISOLATION: chroot
FQ_IMAGE_NAME: "$CI_REGISTRY_IMAGE/test"
KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: "buildah-sa"
before_script:
# Log in to the GitLab container registry
- buildah login -u "$CI_REGISTRY_USER" --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- buildah images
- buildah build -t $FQ_IMAGE_NAME
- buildah images
- buildah push $FQ_IMAGE_NAMEジョブは、imageキーワードの値として、ビルドしたイメージを使用する必要があります。
KUBERNETES_SERVICE_ACCOUNT_OVERWRITE変数には、作成したサービスアカウント名の値を設定する必要があります。
おめでとうございます。Buildahを使用してルートレスコンテナでイメージを正常にビルドしました。
トラブルシューティング
非rootとして実行すると既知のイシューがあります。OpenShift Runnerを使用している場合は、回避策を使用する必要があるかもしれません。