GitLab CI で Docker Image をビルドして ECR に push する


元ネタ: GitLab RunnerとkanikoでDockerイメージをビルドする - GeekFactory

以下のようなジョブを .gitlab-ci.yml に記述

gitlab-ci.yml
build_image_with_kaniko:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - |
      cat > /kaniko/.docker/config.json <<EOF
      {
        "credsStore": "ecr-login"
      }
      EOF
      /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $ECR_URI:$CI_COMMIT_SHORT_SHA

GitLab で Ci/CD で参照する変数の設定で以下の環境変数を設定

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • ECR_URI
    • ex) 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/hoge

GitLabで上記のジョブを実行してみて ECR に Image が登録されれば OK

ポイント

いくつかポイントがあるので補足しておく

  • kaniko の image は :debug を使用する。
    • GitLab CI で動作させるためには sh が必要らしく、:debug のイメージが必要
  • kanikoentrypoint をオーバーライドする
    • オーバーライドしないと /kaniko/executor を直接実行しようとして エラーになる

参考