Skip to content

コンテナイメージをビルド・プッシュ

kanikoがメンテナンスされなくなったため、BuildKitを使ってコンテナイメージを作成するためのGitLab CI向け設定を記載します。

cf.

設定

環境変数

GitLab上に、下記要領で環境変数を登録しておいてください:

  • HARBOR_HOST: {harborサーバのIP}:80
  • HARBOR_USERNAME: robot$noboなどアカウント名
  • HARBOR_PASSWORD: アクセストークン
  • HARBOR_PROJECT: harbor上のプロジェクト名

config.toml

GitLab Runnerサーバ上のコンフィグファイルについて、下記修正を入れてください:

  [runners.docker]
    privileged = true # false -> trueに変更して特権モードを許可

.gitlab-ci.yml

stages:
  - test
  - build
  - push
variables:
  MODULE: easyapp # アプリのモジュール名
  ARTIFACT_PATH: main # ビルド成果物のパス
push:
  stage: push
  image:
    name: moby/buildkit:rootless
    entrypoint: [""]
  variables:
    BUILDKITD_FLAGS: --oci-worker-no-process-sandbox
  before_script:
    - mkdir -p ~/.docker
    - echo "{\"auths\":{\"$HARBOR_HOST\":{\"username\":\"$HARBOR_USERNAME\",\"password\":\"$HARBOR_PASSWORD\"}}}" > ~/.docker/config.json
  script: # registry.insecure=trueを付与してHTTP通信を許可
    - |
      buildctl-daemonless.sh build \
        --frontend dockerfile.v0 \
        --local context=. \
        --local dockerfile=. \
        --opt build-arg:ARTIFACT_PATH=${ARTIFACT_PATH} \
        --output type=image,name=${HARBOR_HOST}/${HARBOR_PROJECT}/${MODULE}:${CI_COMMIT_TAG},push=true,registry.insecure=true
  rules:
    - if: $CI_COMMIT_TAG