正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

チュートリアル: 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ドキュメントを翻案したものです。

このチュートリアルを完了する手順は、次のとおりです:

  1. Buildahイメージを設定します。
  2. サービスアカウントを設定します。
  3. ジョブを設定します。

はじめる前

このチュートリアルを完了する前に、以下があることを確認してください:

  • gitlab-runnerネームスペースにデプロイされたRunnerがすでに存在すること。

Buildahイメージを設定します

quay.io/buildah/stable:v1.23.1イメージに基づいてカスタムイメージを準備することから始めます。

  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
    EOF
  2. Buildahイメージをコンテナレジストリにビルドしてプッシュします。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クラスターに接続されたターミナルでコマンドを実行する必要があります。

  1. buildah-saという名前のサービスアカウントを作成するには、このコマンドを実行します:

    oc create -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: buildah-sa
      namespace: gitlab-runner
    EOF
  2. 作成したサービスアカウントに、anyuid SCCで実行する機能を提供します:

    oc adm policy add-scc-to-user anyuid -z buildah-sa -n gitlab-runner
  3. 新しいサービスアカウントを使用するようにOperatorを設定するには、Runner設定テンプレートを使用します。以下を含むcustom-config.toml設定ファイルを作成します:

    [[runners]]
      [runners.kubernetes]
          service_account_overwrite_allowed = "buildah-*"
  4. custom-config.tomlファイルからcustom-config-tomlという名前のConfigMapを作成します:

    oc create configmap custom-config-toml --from-file config.toml=custom-config.toml -n gitlab-runner
  5. カスタムリソース定義(CRD)ファイルを更新して、Runnerconfigプロパティを設定します:

    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を使用している場合は、回避策を使用する必要があるかもしれません。