13

GitLab CI/CD パイプラインで kaniko を使用してビルドできる Dockerfile があります。現在、buildステージはコンテナーを構築し、それをリモートの Docker リポジトリーにプッシュします。

CI/CD パイプラインのステージの概念を利用してイメージを構築し、自動テストを実行してコンテナー セキュリティ分析ツール ( Trivy ) を実行し、最後のステップとして、すべての前のステップが成功した場合は、レジストリにプッシュします。

  1. ビルドイメージ
  2. 自動テストの実行 (作成されたイメージに基づく)
  3. 作成したイメージのセキュリティを分析する (Trivy を使用)
  4. 前の手順が成功した場合にのみイメージをレジストリにプッシュし、イメージを再構築しない

イメージをビルドしてプッシュするコマンドは次のとおりです。

build:latest-master:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
    - /kaniko/executor --cache=true --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:latest
  only:
    - master

プッシュを実行しないオプション/コマンド ライン フラグと、イメージの tarball のみを生成する--no-pushフラグがあります。--tar-path

これらのフラグとコマンドを組み合わせて、レジストリにプッシュせずにイメージのみを作成するにはどうすればよいでしょうか。セキュリティ チェックが実行されている場合にのみイメージをプッシュする必要があるからです。そして、プッシュ ステージ (GitLab CI ジョブ) はどのように見えますか。特に正確な kaniko コマンド ラインです。

最後のプッシュ ステージ/ジョブが、以前にビルドされたイメージまたはキャッシュを再利用し、再構築しないようにできれば素晴らしいことです。 tarball は何とか使えると思いますが、kaniko がそれを使用するためのフラグは何でしょうか? それとも、その tarball を使用し、docker コマンドを使用して tarball をレジストリにプッシュするだけですか?

4

1 に答える 1

26

これは、クレーンツールを使用して行うことができます。

  • 最初のステップ: Kaniko でビルドし、tarball にエクスポートします。イメージをアーティファクトとして保存します。
  • 2 番目のステップ: クレーンを使用して tarball をレジストリにプッシュする
docker:build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug-v1.0.0
    entrypoint: [""]
  script:
  - /kaniko/executor
    --context $CI_PROJECT_DIR
    --dockerfile $CI_PROJECT_DIR/docker/Dockerfile
    --no-push
    --destination $CI_REGISTRY_IMAGE/path/to/your/image:version
    --tarPath image.tar
  artifacts:
    paths:
    - image.tar
    when: on_success

docker:push:
  stage: push
  image:
    name: gcr.io/go-containerregistry/crane:debug
    entrypoint: [""]
  script:
  - crane auth login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  - crane push image.tar $CI_REGISTRY_IMAGE/path/to/your/image:version
  needs:
  - docker:build
于 2020-08-19T17:09:45.610 に答える