Google Cloud Deploy と CI システムの統合

このドキュメントでは、継続的インテグレーション(CI)システムから Google Cloud Deploy デリバリー パイプラインを呼び出す方法について説明します。

Google Cloud Deploy と CI システムの統合は、Google Cloud Deploy の gcloud CLI への呼び出しを追加するだけで簡単です。この呼び出しは、アプリケーションのデプロイ準備ができた CI パイプラインで発生します。

始める前に

このページで説明する手順では、次の条件を満たしている必要があります。

CI パイプラインからの Google Cloud Deploy の呼び出し

次のコマンドで新しいリリースが作成され、デリバリー パイプライン インスタンスが呼び出されます。

gcloud deploy releases create RELEASE_NAME \
  --delivery-pipeline=PIPELINE_NAME \
  --region=REGION
  --annotations=[KEY=VALUE,...]
  --images=[IMAGE_LIST]

ここで...

  • RELEASE_NAME

    は、このリリースに付ける名前です。この値は必須です。

  • PIPELINE_NAME

    は、登録されたデリバリー パイプラインの名前です。この値は必須です。

  • REGION

    は、このリリースを作成するリージョンです。リージョンは、最終的にアプリケーションをデプロイするリージョンと同じにする必要はありません。

  • [KEY=VALUE,...]

    は、リリースに適用する 1 つ以上のアノテーションのリストです(省略可)。Key-Value ペアの形式で指定します。

    アノテーションを使用して、リリースの出所を追跡できます。たとえば、commitId=0065ca0 などのアノテーションを渡します。リリースのすべてのアノテーションは、リリースに対して list または get を実行すると返され、Google Cloud Console にリリースと一緒に表示されるため、リリースの出所も確認できます。

  • [IMAGE_LIST]

    は、イメージ名からイメージパスへの置換のカンマ区切りリストです。例: --images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18

    この値は、Skaffold ビルド アーティファクトの出力ファイルを指定する --build-artifacts を渡す場合には必要ありません。

    Google Cloud Deploy がマニフェストをレンダリングすると、レンダリングされていないマニフェスト内のイメージ名は、レンダリングされたマニフェストの完全なイメージ参照に置き換えられます。つまり、この例の image1 は、レンダリングされていないマニフェスト内にあり、レンダリングされたマニフェストで path/to/image1:v1@sha256:45db24 に置き換えられます。

直接イメージ参照の使用例

次のコマンドは、新しいリリースを作成し、ビルド アーティファクト ファイルではなく、イメージ参照を直接渡します。

gcloud deploy releases create my-release \
  --delivery-pipeline=web-app \
  --region=us-central1
  --images=image1=path/to/image1:v1@sha256:45db24

ビルド アーティファクトとイメージ

gcloud deploy releases create コマンドには、一連のイメージ参照またはビルド アーティファクト ファイル参照を渡すことができます。

  • --images=[NAME=TAG,...] を使用して 1 つ以上のコンテナ イメージを参照します。

    この値は、イメージのフルパスの置換への個々のイメージ名のコレクションへの参照です。次に例を示します。

    gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24

  • --build-artifacts= を使用して、Skaffold ビルド アーティファクトの出力ファイルを指定します。

Cloud Build の例。ビルド アーティファクト ファイルを渡す

Docker ビルドの例

次の YAML ファイルは、Docker のビルドイメージを push する Cloud Build を示し、最終的に Google Cloud Deploy リリースを作成します。

この例では、イメージをビルドしてアーティファクト リポジトリに push します。また、短い commit SHA に基づいてリリース名を使用してリリースを作成するコマンドを作成します。この例は、$COMMIT_SHA 変数に依存しているため、Cloud Build SCM トリガーとして使用する必要があります。

この例では、ソース リポジトリの commit ハッシュと同じ Docker ラベルにイメージを push します。次に、同じ commit ハッシュが Docker ラベルとして、release-command 引数から参照されます。

# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
    ]

この例の最後のイメージ名は、レンダリングされたマニフェストで "--images", "IMAGE_NAME= が完全なイメージ参照で置き換えられていることに注意してください。

Skaffold を使用した Cloud Build 構成の例

次の YAML ファイルは、日付に基づくリリース名を使用して、リリースを作成するための Google Cloud Deploy 呼び出しを含む Cloud Build ビルド構成の内容です。この例では、ビルドに Skaffold を使用しています。

- name: gcr.io/k8s-skaffold/skaffold
  args:
    - skaffold
    - build
    - '--interactive=false'
    - '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--build-artifacts", "/workspace/artifacts.json"
    ]

アノテーションを使用してリリースの出所を追跡する

--annotations= フラグを使用すると、このコマンドで作成するリリースに任意の Key-Value ペアを適用できます。このフラグは、gcloud deploy releases create コマンドに追加します。

たとえば、次の Key-Value ペアを使用して、デプロイするイメージのソースを追跡できます。

次に例を示します。

gcloud deploy releases create web-app-1029rel \
  --delivery-pipeline=web-app \
  --region=us-central1
  --annotations=commitId=0065ca0,author=user@company.com
  --images=image1=path/to/image1:v1@sha256:45db24

たとえば、pull リクエストを指定する URL の値をアノテーションとして作成することもできます。詳細については、Google Cloud Deploy でのラベルとアノテーションの使用をご覧ください。