デリバリー パイプラインの管理

このページでは、次のタスクを含むデリバリー パイプラインの管理方法について説明します。

  • パイプライン、リリース、ロールアウト、ターゲットに関する情報の表示
  • パイプラインでの通知の使用
  • ロールアウトの承認と拒否

始める前に

このページでは、Google Cloud Deploy デリバリー パイプラインが 1 つ以上使用されており、すぐに使用できることを前提としています。

Google Cloud Deploy では Skaffold を使用してマニフェストのレンダリングとデプロイを行うため、Skaffold に慣れていない場合は、Skaffold クイックスタートを使用して基本を学習してください。

デリバリー パイプラインの表示と編集

すべてのプロジェクトのすべての Google Cloud Deploy デリバリー パイプラインのリストを表示できます。このリストは、コマンドラインから、または Google Cloud コンソール内で表示できます。

デリバリー パイプラインのリストの表示

コンソール

Google Cloud コンソールで、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。

[デリバリー パイプライン] ページを開く

デリバリー パイプラインのリストが Google Cloud コンソールに表示されます。

パイプラインのリストを示す 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 つのパイプラインのみを返します。

デリバリー パイプラインの詳細の表示

既存のデリバリー パイプラインの場合は、パイプライン メタデータやターゲットの進行状況など、パイプラインの詳細を表示できます。

コンソール

  1. Google Cloud コンソールで、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。

    [デリバリー パイプライン] ページを開く

    デリバリー パイプラインのリストが Google Cloud コンソールに表示されます。

    デリバリー パイプラインのリスト

    構成されているものの Google Cloud Deploy サービスに登録されていないデリバリー パイプラインは表示されません。

  2. 詳細を表示するデリバリー パイプラインの名前をクリックします。

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

  1. [デリバリー パイプライン] ページを開く

  2. デリバリー パイプラインのリストに表示されているパイプラインをクリックします。

    デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。

  3. その他メニュー その他メニュー をクリックし、[Roll back release] を選択します。

    メニューから [Roll back release] を選択します。

    ロールバック フォームが表示されます。

    ロールバック フォーム

  4. [Release] フィールドでリリースを選択します。

    これはロールバックするリリースです。[ロールアウト名] は、選択したリリースに基づいて入力されます。

  5. 必要に応じて、ロールアウト名とロールアウトの説明をデフォルトから変更できます。

  6. [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 を使用)することで、承認をプログラムで管理できます。

承認の要求

ターゲットで承認を要求するには、ターゲット構成で requireApprovaltrue に設定します。

     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 を使用してロールアウトを承認または拒否できます。

手動で承認または拒否

コンソール

  1. Google Cloud コンソールで、Google Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。

    [デリバリー パイプライン] ページを開く

    デリバリー パイプラインのリストが Google Cloud コンソールに表示されます。構成されているものの Google Cloud Deploy サービスに登録されていないデリバリー パイプラインは表示されません。

  2. デリバリー パイプラインの名前をクリックします。

    パイプラインの可視化が表示されます。承認が保留中で、roles/clouddeploy.approver ロールまたは同等の権限がある場合は、[確認] リンクが表示されます。

    承認待ちのデリバリー パイプラインの可視化

  3. [Review] をクリックします。

    承認待ちのロールアウトのリストが表示されます。

    このパイプラインのロールアウト(承認待ち)

  4. [Review] をクリックします。

    [Approve rollout] 画面が表示されます。

    承認待ちのロールアウトの詳細

    [Manifest diff] タブには、現在デプロイされているバージョン(存在する場合)から現在承認(または拒否)中のバージョンまで、レンダリングされたマニフェストへの変更が表示されます。

  5. [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

デリバリー パイプラインの停止

デリバリー パイプラインを停止できます。パイプラインを停止すると、次の目的で使用できなくなります。

  • リリースを作成する

  • リリースを昇格する

  • リリースをロールバックする

  • リリースを再デプロイする

  • ロールアウトを承認または拒否する

デリバリー パイプラインを停止する理由は次のとおりです。

  • リリースに問題があるため、問題が見つかるまでそのパイプラインでこれ以上のアクションが行われないようにする必要がある。

  • 組織は、たとえば年末商戦の繁忙期の間など、休日中の停止を行う。

デリバリー パイプラインを停止するには:

  1. デリバリー パイプラインの構成ファイルに、次のプロパティを含めます。

    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: []
    
  2. デリバリー パイプラインを登録します。

    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

停止されたデリバリー パイプラインの再開

停止された配信パイプラインを再度有効にするには:

  1. デリバリー パイプライン構成ファイルで、プロパティ suspended: true を削除するか、false に設定します。

  2. 構成を適用します。

    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

次のステップ