このページでは、次のタスクを含むデリバリー パイプラインの管理方法について説明します。
- パイプライン、リリース、ロールアウト、ターゲットに関する情報の表示
- パイプラインでの通知の使用
- ロールアウトの承認と拒否
始める前に
このページでは、Google Cloud Deploy デリバリー パイプラインが 1 つ以上使用されており、すぐに使用できることを前提としています。
Google Cloud Deploy では Skaffold を使用してマニフェストのレンダリングとデプロイを行うため、Skaffold に慣れていない場合は、Skaffold クイックスタートを使用して基本を学習してください。
デリバリー パイプラインの表示と編集
すべてのプロジェクトのすべての Google Cloud Deploy デリバリー パイプラインのリストを表示できます。このリストは、コマンドラインから、または Google Cloud Console 内で表示できます。
デリバリー パイプラインのリストの表示
Console
Cloud Console で、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
デリバリー パイプラインのリストが Cloud Console に表示されます。
構成されているものの Google Cloud Deploy サービスに登録されていないデリバリー パイプラインは表示されません。
gcloud
次のコマンドは、現在のプロジェクト内のすべてのデリバリー パイプラインのリストを返します。
gcloud deploy delivery-pipelines list
出力は次のようになります。
$ gcloud deploy delivery-pipelines list --region=$REGION
---
createTime: '2021-05-03T16:03:11.687046682Z'
description: main application pipeline
etag: a9721c6cf665fcc7
name: projects/try-cd-dev6/locations/us-central1/deliveryPipelines/my-demo-app-1
serialPipeline:
stages:
- targetId: qsdev
- targetId: qsprod
uid: f0b8148d5ddf4071964803e278acb1da
updateTime: '2021-05-03T16:03:12.780948171Z'
この出力に示すように、このコマンドは 2 つのターゲットを持つ 1 つのパイプラインのみを返します。
デリバリー パイプラインの詳細の表示
既存のデリバリー パイプラインの場合は、パイプライン メタデータやターゲットの進行状況など、パイプラインの詳細を表示できます。
Console
Cloud Console で、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
デリバリー パイプラインのリストが Cloud Console に表示されます。
構成されているものの Google Cloud Deploy サービスに登録されていないデリバリー パイプラインは表示されません。
詳細を表示するデリバリー パイプラインの名前をクリックします。
Cloud Console に、デリバリー パイプライン、パイプラインのメタデータ、ステータスの可視化が表示されます。
[ターゲット] タブをクリックすると、このデリバリー パイプラインで使用するターゲットの詳細が表示されます。
gcloud
次のコマンドは、指定されたデリバリー パイプラインの詳細を返します。
gcloud deploy delivery-pipelines describe <pipeline-name> --region=<region>
出力は次のようになります。
$ gcloud deploy delivery-pipelines describe my-demo-app-1 --region=us-central1
Delivery Pipeline:
createTime: '2021-05-03T16:03:11.687046682Z'
description: main application pipeline
etag: a9721c6cf665fcc7
name: projects/try-cd-dev6/locations/us-central1/deliveryPipelines/my-demo-app-1
serialPipeline:
stages:
- targetId: qsdev
- targetId: qsprod
uid: f0b8148d5ddf4071964803e278acb1da
updateTime: '2021-05-03T16:03:12.780948171Z'
Targets:
- Target: qsdev
- Target: qsprod
この出力に示すように、このコマンドは 1 つのパイプラインの詳細を返します。2 つの stages
と、対応する 2 つの Target
に注意してください。
Deployment のロールバック
ターゲットをロールバックすると、Google Cloud Deploy は以前のリリースに基づいて新しい rollout
リソースを作成します。
gcloud
デフォルトでは、ロールバックは、指定されたターゲットへのロールアウトが成功した最後のリリースを使用しますが、--release
を使用して別のリリースを選択することもできます。
ロールバックするには、デリバリー パイプラインを含むディレクトリから次のコマンドを実行します。
gcloud deploy targets rollback TARGET_NAME \
--delivery-pipeline=PIPELINE_NAME \
--release=RELEASE_NAME \
--rollout-id=ROLLOUT_ID
上記のコマンドで、--release
と --rollout-id
は省略可能です。--release
を使用して、ロールバックする特定のリリースを指定します。このオプションを省略すると、Google Cloud Deploy は指定されたターゲットに対する最後に確認された正常なリリースを使用します。
--rollout-id
を使用して、生成された rollout
に識別子を割り当てます。指定しない場合、Google Cloud Deploy によって、生成された rollout
の ID が生成されます。
Console
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
その他メニュー
をクリックし、[Roll back release] を選択します。
ロールバック フォームが表示されます。
[Release] フィールドでリリースを選択します。
これはロールバックするリリースです。[Rollout name] は、選択したリリースに基づいて入力されます。
必要に応じて、ロールアウト名とロールアウトの説明をデフォルトから変更できます。
[Roll back] をクリックします。
選択したリリースから新しいロールアウトが作成され、同じターゲットにデプロイされます。
さらにロールバック
最後に正常にデプロイされたリリースよりも前のリリースに手動でロールバックできます。
以前のリリースで gcloud deploy releases promote
を実行して、リリースをロールバックするターゲットに設定した --to-target
オプションを含めるだけです。
デリバリー パイプラインでの通知の使用
Google Cloud Deploy は、2 つの目的で Pub/Sub を使用して通知を公開します。
ワークフロー チケット発行やテスト インフラストラクチャ用のツールなど、Google Cloud Deploy をサードパーティのツールや他の Google ツールと統合できます。
追加のビジネス ロジックを使用して Google Cloud Deploy を拡張します。
詳細については、Google Cloud Deploy 通知への登録をご覧ください。
デリバリー パイプラインの承認の管理
どのターゲットにも承認を要求できます。また、そのターゲットへのリリースを承認または拒否できます。
ワークフロー管理システム(ServiceNow など)またはその他のシステムを Google Cloud Deploy と統合(Pub/Sub と Google Cloud Deploy API を使用)することで、承認をプログラムで管理できます。
承認の要求
ターゲットで承認を要求するには、ターゲット構成で requireApproval
を true
に設定します。
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name:
description:
requireApproval: true
詳細については、デリバリー パイプラインの構成をご覧ください。
ロールアウトが承認待ちの場合、cd-approvals
Pub/Sub トピックに登録しているユーザーまたはシステムは通知を受信し、ロールアウトを承認または拒否できます。
ロールアウトの承認または拒否
ロール roles/clouddeploy.approver
を持つユーザーまたはサービス アカウントは、承認が必要なターゲットへの Google Cloud Deploy ロールアウトを承認できます。
サービス通知を使用する承認が必要な通知を受け取った統合ワークフロー管理システムは、Google Cloud Deploy API を使用してロールアウトを承認または拒否できます。
手動で承認または拒否
Console
Cloud Console で、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
デリバリー パイプラインのリストが Cloud Console に表示されます。構成されているものの Google Cloud Deploy サービスに登録されていないデリバリー パイプラインは表示されません。
デリバリー パイプラインの名前をクリックします。
パイプラインの可視化が表示されます。承認が保留中で、
roles/clouddeploy.approver
ロールまたは同等の権限がある場合は、可視化に [Review] リンクが含まれます。[Review] をクリックします。
承認待ちのロールアウトのリストが表示されます。
[Review] をクリックします。
[Approve rollout] 画面が表示されます。
[Manifest diff] タブには、現在デプロイされているバージョン(存在する場合)から現在承認(または拒否)中のバージョンまで、レンダリングされたマニフェストへの変更が表示されます。
[Approve] または [Reject] をクリックします。
承認すると、アプリケーションがターゲットにデプロイされます。拒否すると、アプリケーションはデプロイされず、後で再昇格しない限り承認できません。
gcloud
roles/clouddeploy.approver
ロールを持つユーザーは、ロールアウトを手動で承認または却下できます。承認する方法は次のとおりです。
gcloud deploy rollouts approve rollout-name --delivery-pipeline=pipeline-name
拒否する方法は次のとおりです。
gcloud deploy rollouts reject rollout-name --delivery-pipeline=pipeline-name
すでに使用されているデリバリー パイプラインの変更
デリバリー パイプラインを変更するには、デリバリー パイプラインの定義を編集します。
ただし、パイプラインとターゲット、およびそれらが管理するリリースの間の関係を Google Cloud Deploy がどのように扱うかによって、期待する結果が得られないことがあります。
各 release
リソースと rollout
リソースは、release
の作成時に定義されたようにパイプラインに永続的に関連付けられます。リリースの作成後にデリバリー パイプラインの構成(ターゲット定義を含む)を変更した場合、そのリリースは定義と一致しなくなります。
このようにリソースを保持することで、ターゲット間で一貫した機能が実現され、構成の変更による中断を防ぐことができます。ただし、この動作は意図した動作とは異なる可能性があります。この場合、更新されたパイプラインを使用して、デプロイする新しいリリースを作成できます。
Google Cloud Deploy は、このような不一致があった場合に、リリースを昇格させるなどの特定のアクションを実行しようとすると警告を返します。
詳細については、リリースあたりのパイプライン インスタンス数をご覧ください。
デリバリー パイプラインの削除
サブリソース(リリースまたはロールアウト)がないデリバリー パイプラインがある場合は、次のコマンドを実行して削除できます。
gcloud deploy delivery-pipelines delete PIPELINE_NAME
削除するパイプラインにリリースまたはロールアウトが関連付けられている場合は、パイプラインとサブリソースを削除するために --force
フラグを含める必要があります。
gcloud deploy delivery-pipelines delete PIPELINE_NAME --force
次のステップ
- Google Cloud Deploy での IAM ロールと権限についてさらに学習する。