このページでは、次のタスクを含むデリバリー パイプラインの管理方法について説明します。
- パイプライン、リリース、ロールアウト、ターゲットに関する情報の表示
- パイプラインでの通知の使用
- ロールアウトの承認と拒否
始める前に
このページでは、Google Cloud Deploy デリバリー パイプラインが 1 つ以上使用されており、すぐに使用できることを前提としています。
Google Cloud Deploy では Skaffold を使用してマニフェストのレンダリングとデプロイを行うため、Skaffold に慣れていない場合は、Skaffold クイックスタートを使用して基本を学習してください。
デリバリー パイプラインの表示と編集
すべてのプロジェクトのすべての Google Cloud Deploy デリバリー パイプラインのリストを表示できます。このリストは、コマンドラインから、または Google Cloud コンソール内で表示できます。
デリバリー パイプラインのリストの表示
コンソール
Google Cloud コンソールで、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
デリバリー パイプラインのリストが Google Cloud コンソールに表示されます。
構成されているものの 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 つのパイプラインのみを返します。
デリバリー パイプラインの詳細の表示
既存のデリバリー パイプラインの場合は、パイプライン メタデータやターゲットの進行状況など、パイプラインの詳細を表示できます。
コンソール
Google Cloud コンソールで、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
デリバリー パイプラインのリストが Google Cloud コンソールに表示されます。
構成されているものの Google Cloud Deploy サービスに登録されていないデリバリー パイプラインは表示されません。
詳細を表示するデリバリー パイプラインの名前をクリックします。
Google Cloud コンソールに、デリバリー パイプライン、パイプラインのメタデータ、ステータスの可視化が表示されます。
[ターゲット] タブをクリックすると、このデリバリー パイプラインで使用するターゲットの詳細が表示されます。
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
に注意してください。
また、ロールアウトの詳細やレンダリング ソースなど、リリースの詳細を表示することもできます。レンダリングされたアーティファクト(マニフェストや Skaffold 構成など)の差分を確認できます。
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] フィールドでリリースを選択します。
これはロールバックするリリースです。[ロールアウト名] は、選択したリリースに基づいて入力されます。
必要に応じて、ロールアウト名とロールアウトの説明をデフォルトから変更できます。
[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 を使用してロールアウトを承認または拒否できます。
手動で承認または拒否
コンソール
Google Cloud コンソールで、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
デリバリー パイプラインのリストが Google Cloud コンソールに表示されます。構成されているものの Google Cloud Deploy サービスに登録されていないデリバリー パイプラインは表示されません。
デリバリー パイプラインの名前をクリックします。
パイプラインの可視化が表示されます。承認が保留中で、
roles/clouddeploy.approver
ロールまたは同等の権限がある場合は、[確認] リンクが表示されます。[Review] をクリックします。
承認待ちのロールアウトのリストが表示されます。
[Review] をクリックします。
[Approve rollout] 画面が表示されます。
[Manifest diff] タブには、現在デプロイされているバージョン(存在する場合)から現在承認(または拒否)中のバージョンまで、レンダリングされたマニフェストへの変更が表示されます。
[Approve] または [Reject] をクリックします。
承認すると、アプリケーションがターゲットにデプロイされます。拒否すると、アプリケーションはデプロイされず、後で再昇格しない限り承認できません。
gcloud
roles/clouddeploy.approver
ロールを持つユーザーは、ロールアウトを手動で承認または拒否できます。承認する方法は次のとおりです。
gcloud deploy rollouts approve rollout-name --delivery-pipeline=pipeline-name --region=region --release=release-name
拒否する方法は次のとおりです。
gcloud deploy rollouts reject rollout-name --delivery-pipeline=pipeline-name --region=region --release=release-name
デリバリー パイプラインの停止
デリバリー パイプラインを停止できます。パイプラインを停止すると、次の目的で使用できなくなります。
リリースを作成する
リリースを昇格する
リリースをロールバックする
リリースを再デプロイする
ロールアウトを承認または拒否する
デリバリー パイプラインを停止する理由は次のとおりです。
リリースに問題があるため、問題が見つかるまでそのパイプラインでこれ以上のアクションが行われないようにする必要がある。
組織は、たとえば年末商戦の繁忙期の間など、休日中の停止を行う。
デリバリー パイプラインを停止するには:
デリバリー パイプラインの構成ファイルに、次のプロパティを含めます。
suspended: true
このプロパティは、以下に示すように最上位のレベルに移動します。
apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: Name: my-app description: main application pipeline suspended: true serialPipeline: stages: - targetId: dev profiles: [] - targetId: staging profiles: [] - targetId: prod profiles: []
デリバリー パイプラインを登録します。
gcloud deploy apply --file=PIPELINE_CONFIG --region=REGION --project=PROJECT_ID
ここで
PIPELINE_CONFIG
は、デリバリー パイプライン構成ファイルの名前です。通常は
clouddeploy.yaml
です。必須入力項目です。REGION
は、デリバリー パイプラインが作成されたリージョンの名前です(例:
us-central1
)。必須入力項目です。PROJECT_ID
は、デリバリー パイプラインが作成されたプロジェクトのプロジェクト ID です。必須入力項目です。
デリバリー パイプラインが停止状態になり、リリースの作成、昇格、ロールバックと再デプロイ、ロールアウトの承認が行われなくなります。
停止されたデリバリー パイプラインからのロールアウト
デリバリー パイプラインを停止したときに、進行中のロールアウトやキューへの追加のロールアウトがある場合、それらのロールアウトは完了するまで続行され、キャンセルされません。ただし、リリースの作成や昇格はできないため、そのパイプラインを使用して再開するまで新しいロールアウトは作成できません。
パイプラインの停止に必要な IAM 権限
デリバリー パイプラインを停止するために必要な IAM 権限は、次のロールに含まれています。
roles/clouddeploy.admin
roles/clouddeploy.operator
roles/clouddeploy.developer
停止されたデリバリー パイプラインの再開
停止された配信パイプラインを再度有効にするには:
デリバリー パイプライン構成ファイルで、プロパティ
suspended: true
を削除するか、false
に設定します。構成を適用します。
gcloud deploy apply --file=PIPELINE_CONFIG --region=REGION --project=PROJECT_ID
停止されているパイプラインを確認する
ロックされているデリバリー パイプラインは、Google Cloud コンソールの [デリバリー パイプライン] ビューの名前の横に鍵アイコンが表示されます。
すでに使用されているデリバリー パイプラインの変更
デリバリー パイプラインを変更するには、デリバリー パイプラインの定義を編集します。
ただし、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 のロールと権限の詳細を確認する。