ロールアウトを管理する

Cloud Deploy のロールアウトにはフェーズが含まれます。フェーズは、ロールアウトで実行するジョブの順序付けられた論理グループです。

各フェーズにはジョブが含まれます。ジョブは各フェーズで実行するアクション(deployverify など)です。各ジョブには 0 個以上のジョブ実行を含めることができます。ジョブ実行はジョブのインスタンスです。ジョブが実行されていない場合、ジョブ実行はありません。

このドキュメントでは、フェーズジョブジョブ実行、およびそれらの管理方法について説明します。

ロールアウトの構造

ロールアウトは、リリースターゲットに関連付ける Cloud Deploy リソースです。

フェーズ

ロールアウトは 1 つ以上のフェーズで構成されます。

標準のデプロイ戦略の場合は、stable という 1 つのフェーズのみです。

カナリア デプロイ戦略の場合、構成された割合ごとに個別のフェーズがあります。たとえば、25%、50%、100% の順にデプロイするカナリアを構成すると、次の 3 つのフェーズが作成されます。

  • canary-25
  • canary-50
  • stable

これらのフェーズ名は標準です。カナリア ステージの場合は canary-[PERCENTAGE]、100% フェーズの場合は stable です。ただし、カスタム自動カナリアまたはカスタム カナリアを構成する場合は、フェーズ名を制御できます。

ジョブとジョブ実行

各ロールアウト フェーズには 1 つ以上のジョブが含まれます。

標準のデプロイ戦略でのロールアウトの場合、デプロイの確認は有効になりません。1 つのフェーズ(stable)があります。

カナリア ロールアウトの場合、カナリアの各部分(canary-25canary-50stable など)にフェーズがあり、各フェーズには deploy ジョブがあります。検証が有効になっている場合は、フェーズごとに verify ジョブもあります。

ジョブ実行はジョブのインスタンスです。たとえば、deploy ジョブのジョブ実行が実行され、成功した場合、そのジョブのジョブ実行はそれ以上行われません。失敗した場合は、別のジョブ実行として再試行できます。

初回にフェーズをスキップする

一部のデプロイ戦略(カナリアなど)では、古いバージョンと新しいバージョンの間でトラフィックを割り当てます。ターゲットに初めてデプロイする場合は、古いバージョンがないため、トラフィックを割り当てることができません。

そのため、カナリアを初めてデプロイするときは、カナリア フェーズをスキップして stable フェーズを実行します。その後、アプリケーションがデプロイされ、以降のカナリア デプロイにはカナリア フェーズが含まれます。

実際の状況では、アプリケーションがすでに動作しているカナリア デプロイが実行されるため、このフェーズをスキップすることはまれです。

ロールアウト内の状態

ロールアウト、フェーズ、ジョブ、ジョブ実行にはすべて状態があります。このセクションでは、それぞれの状態について説明します。

ロールアウトの状態

ロールアウトは次のいずれかの状態になります。

  • APPROVAL_REJECTED

    ロールアウトには承認が必要でしたが、承認が拒否されました。

  • CANCELLED

    ユーザーによってキャンセルされたロールアウトの最終状態。

  • CANCELLING

    ユーザーがロールアウトをキャンセルしましたが、キャンセル処理が完了していません。

  • HALTED

    並行デプロイでは、1 つ以上の子ロールアウトが失敗しても、少なくとも 1 つの子ロールアウトが成功した場合、現在のフェーズの後にフェーズが続く場合は、コントローラのロールアウトが停止します。

    停止したコントローラのロールアウトを再開するには、次のいずれかを行います。

    • コントローラのロールアウトをキャンセルする

    • 子ロールアウトで失敗したジョブを再試行または無視する

  • IN_PROGRESS

    ジョブ実行が処理中です。

  • FAILED

    ジョブが失敗し、ユーザーが失敗を無視を選択しませんでした。

  • PENDING

    ロールアウトの処理が開始されていません。この状態は IN_PROGRESS または CANCELED に移行します。

  • PENDING_APPROVAL

    ロールアウトには承認が必要ですが、まだ承認されていません。

  • PENDING_RELEASE

    ロールアウトはリリースがレンダリングされるのを待っています。

  • SUCCEEDED

    ロールアウトがエラーなく完了しました。

フェーズの状態

フェーズは次のいずれかの状態になります。

  • PENDING

    フェーズは、ロールアウトの別のフェーズが完了するのを待機しています。

  • IN_PROGRESS

    フェーズが開始されました。

  • SUCCEEDED

    フェーズが正常に完了しました。

  • FAILED

    フェーズ内のジョブが失敗し、ユーザーが失敗を無視を選択しませんでした。

  • ABORTED

    前のフェーズが失敗しました。

  • SKIPPED

    カナリアなどのデプロイ戦略を実行している場合、トラフィックを分割するアプリケーションの実行バージョンがまだ存在しないと、Cloud Deploy は stable フェーズにスキップします。この場合、状態は SKIPPED に設定されます。

ジョブの状態

ジョブは次のいずれかの状態になります。

  • ABORTED

    フェーズが失敗すると、後続のフェーズは中止されます。

    ジョブが失敗し、その失敗が無視されない場合、後続のジョブは中止されます。たとえば、フェーズにデプロイ ジョブと検証ジョブが含まれていて、デプロイ ジョブが失敗した場合、検証ジョブは中止されます。

  • DISABLED

    フェーズ内のジョブの一部が無効になっている可能性があります。たとえば、検証が有効になっているかどうかに関係なく、フェーズには常に検証ジョブが含まれます。検証が有効になっていない場合、検証ジョブは DISABLED に設定されます。

  • FAILED

    このジョブのジョブ実行が失敗し、ユーザーが失敗を無視を選択しませんでした。

    ユーザーがこのジョブのジョブ実行を終了することを選択しました。

  • IGNORED

    このジョブのジョブ実行が失敗し、ユーザーが失敗を無視することを選択しました。

  • IN_PROGRESS

    このジョブのジョブ実行が現在実行中です。

  • PENDING

    別のフェーズまたはジョブが完了していないため、このジョブのジョブ実行は開始を待機しています。

  • SKIPPED

    カナリアなどのデプロイ戦略を実行している場合、トラフィックを分割するアプリケーションの実行バージョンがまだ存在しないと、Cloud Deploy は stable フェーズにスキップします。この場合、スキップされたフェーズ内のジョブの状態は SKIPPED に設定されます。

  • SUCCEEDED

    ジョブ実行が正常に完了し、フェーズの次のジョブが開始されたか、次のフェーズが開始されたか、開始の準備が整っている(ユーザー入力待ちの可能性がある)、またはロールアウトが完了した。

ジョブ実行の状態

  • FAILED

    実行中にジョブ実行が失敗しました。

  • IN_PROGRESS

    ジョブの実行は開始しましたが、完了していません。

  • TERMINATED

    ユーザーがジョブ実行を終了しました。

  • TERMINATING

    ユーザーがジョブ実行を終了しましたが、まだ終了していません。

  • SUCCEEDED

    ジョブの実行が失敗せず、ユーザーによって終了されることなく正常に完了すると、SUCCEEDED 状態になります。この状態はつぎのとおりです。

ロールアウトを管理する

Google Cloud コンソールまたは Google Cloud SDK を使用して、Cloud Deploy ロールアウトで次の操作を行うことができます。

カナリア デプロイ戦略並列デプロイを使用している場合は、並列カナリア ロールアウトを管理する方法をご覧ください。

ロールアウトの進行

「標準」以外のデプロイ戦略を使用するように構成されたターゲットの場合は、ロールアウトをフェーズごとに進める必要があります。

たとえば、50% の単純なカナリア デプロイを実行するようにターゲットが構成されている場合は、stable (100%)フェーズのみで、ロールアウトから 1 回だけ、canary-50フェーズからstable(100%)フェーズにロールアウトを行う必要があります。

gcloud

gcloud deploy rollouts advance ROLLOUT_NAME \
                               --release=RELEASE_NAME \
                               --delivery-pipeline=PIPELINE_NAME \
                               --region=REGION

ここで

ROLLOUT_NAME は、次のフェーズに進める現在のロールアウトの名前です。

RELEASE_NAME は、このロールアウトが属するリリースの名前です。

PIPELINE_NAME は、このリリースのデプロイを管理するために使用するデリバリー パイプラインの名前です。

REGION は、リリースが作成されたリージョンの名前です(例: us-central1)。必須入力項目です。

gcloud deploy rollouts advance コマンドの詳細については、Google Cloud SDK リファレンスをご覧ください。

コンソール

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

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

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

  3. [ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。

    そのロールアウトのロールアウトの詳細ページが表示されます。

     Google Cloud コンソールでのロールアウトの詳細

    この例では、ロールアウトに canary-50 フェーズと stable フェーズがあります。ロールアウトには、より多くのフェーズや異なるフェーズが含まれる場合があります。

  4. [ロールアウトを進める] をクリックします。

    ロールアウトを次のフェーズに進めます。

ロールアウトのキャンセル

完了していないロールアウトはキャンセルできます。失敗したロールアウトをキャンセルして、それ以上の操作(無視や再試行など)を防ぐこともできます。ロールアウトは次のいずれかの状態である必要があります。

  • FAILED
  • HALTED
  • IN_PROGRESS
  • PENDING
  • PENDING_APPROVAL
  • PENDING_RELEASE

ロールアウトをキャンセルすると、保留中のジョブ実行がすべて完了するまで、そのロールアウトは CANCELLING 状態になります。待機したくない未完了のジョブ実行は終了できます。ロールアウトが CANCELLED になると、それ以上進めたり変更したりすることはできません。

ロールアウトをキャンセルするには:

gcloud

gcloud deploy rollouts cancel ROLLOUT_NAME \
                               --release=RELEASE_NAME \
                               --delivery-pipeline=PIPELINE_NAME \
                               --region=REGION

ここで

ROLLOUT_NAME は、次のフェーズに進める現在のロールアウトの名前です。

RELEASE_NAME は、このロールアウトが属するリリースの名前です。

PIPELINE_NAME は、このリリースのデプロイを管理するために使用するデリバリー パイプラインの名前です。

REGION は、リリースが作成されたリージョンの名前です(例: us-central1)。必須入力項目です。

gcloud deploy rollouts cancel コマンドの詳細については、Google Cloud SDK リファレンスをご覧ください。

コンソール

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

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

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

  3. [ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。

    そのロールアウトのロールアウトの詳細ページが表示されます。

     Google Cloud コンソールでのロールアウトの詳細

    この例では、ロールアウトに canary-50 フェーズと stable フェーズがあります。ロールアウトには、より多くのフェーズや異なるフェーズが含まれる場合があります。

  4. [ロールアウトをキャンセル] をクリックします。

    ロールアウトはキャンセルされます。

ジョブの実行を終了する

現在進行中のジョブ実行を終了できます。たとえば、ジョブの実行に時間がかかりすぎている場合や、想定どおりに動作していない場合などに、この操作を行うことができます。ジョブ実行を終了するには、ジョブ実行が IN_PROGRESS である必要があります。

gcloud

gcloud deploy job-runs terminate JOB_RUN_ID \
                               --release=RELEASE_NAME \
                               --delivery-pipeline=PIPELINE_NAME \
                               --rollout=ROLLOUT_NAME \
                               --region=REGION

ここで

JOB_RUN_ID は、終了するジョブ実行の(UUID)です。ジョブ実行 ID は、 Google Cloud コンソールの Cloud Deploy のロールアウト ページで確認できます。

 Google Cloud コンソールのロールアウトの詳細にあるジョブ実行 ID

gcloud deploy rollouts describe コマンドを使用してジョブ実行 ID を取得することもできます。

RELEASE_NAME は、このジョブ実行が属するリリースの名前です。

PIPELINE_NAME は、このリリースのデプロイを管理するために使用するデリバリー パイプラインの名前です。

ROLLOUT_NAME は、このジョブ実行が属するロールアウトの名前です。

REGION は、リリースが作成されたリージョンの名前です(例: us-central1)。必須入力項目です。

gcloud deploy job-runs terminate コマンドの詳細については、Google Cloud SDK リファレンスをご覧ください。

コンソール

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

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

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

  3. [ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。

    そのロールアウトのロールアウトの詳細ページが表示されます。

     Google Cloud コンソールでのロールアウトの詳細

    この例では、ロールアウトに canary-50 フェーズと stable フェーズがあります。ロールアウトには、より多くのフェーズや異なるフェーズが含まれる場合があります。

  4. [フェーズ] で、ジョブ実行を終了するジョブを含むフェーズをクリックします。

  5. [ジョブ実行] で、終了する特定のジョブ実行を選択し、[終了] をクリックします。

    ジョブの実行が終了し、フェーズの表に示すように、ジョブのステータスは Failure になります。

ジョブ実行を終了すると、ジョブは失敗とみなされ、次のいずれかの操作を行うことができます。

  • そのままにして、ロールアウトの失敗を無視する
  • ジョブを再試行する
  • ジョブを無視して、ロールアウトの次のジョブまたはフェーズに進む

ジョブを無視する

失敗したジョブを無視して、フェーズの次のジョブにすぐに移動できます。このジョブは、ユーザーや他のユーザーがジョブの実行を終了した場合など、さまざまな理由で失敗する可能性があります。

ジョブが失敗すると、フェーズとロールアウトも失敗します。ただし、障害を無視すると、フェーズとロールアウトの両方が進行し、最終的に SUCCEEDED 状態になる可能性があります。

gcloud

gcloud deploy rollouts ignore-job ROLLOUT_NAME \
                               --release=RELEASE_NAME \
                               --delivery-pipeline=PIPELINE_NAME \
                               --job-id=JOB_ID \
                               --phase-id=PHASE_ID \
                               --region=REGION

ここで

ROLLOUT_NAME は、このジョブ実行が属するロールアウトの名前です。

RELEASE_NAME は、このジョブを含む現在のリリースの名前です。

PIPELINE_NAME は、このリリースのデプロイを管理するために使用するデリバリー パイプラインの名前です。

JOB_ID は、無視するジョブの名前です(例: DEPLOY)。ジョブ名は、 Google Cloud コンソールのロールアウトの [フェーズ] テーブルで確認できます。

 Google Cloud コンソールのフェーズ テーブル。ジョブ実行が失敗している

PHASE_ID は、無視するジョブを含むフェーズの名前です。

REGION は、リリースが作成されたリージョンの名前です(例: us-central1)。

gcloud deploy rollouts ignore-job コマンドの詳細については、Google Cloud SDK リファレンスをご覧ください。

コンソール

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

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

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

  3. [ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。

    そのロールアウトのロールアウトの詳細ページが表示されます。

  4. 無視する失敗したジョブを選択します。

  5. [Ignore failures] ボタンをクリックします。

    失敗したジョブ実行は無視され、ジョブが成功したかのようにロールアウトが続行されます。つまり、同じフェーズに他のジョブがある場合は、それらが実行されます。それ以外の場合、ロールアウトは次のフェーズに進む準備が整っています。

 Google Cloud コンソールで無視できる状態の失敗したジョブ

失敗したジョブを再試行する

失敗したジョブ実行を再試行できます。次のいずれかの理由で、エクスポートに失敗する可能性があります。

  • ジョブの実行が完了しませんでした。

    たとえば、権限の失敗が考えられます。

  • ユーザーがそのジョブからジョブ実行を終了しました。

    ジョブ実行を終了すると、ジョブが失敗し、再試行できます。

  • 検証テストが失敗しました。

    検証ジョブで、検証テストが失敗しました。検証ジョブは正しく完了しましたが、検証テストの 1 つが失敗したため、検証ジョブに伝播されます。この場合、アプリケーションに対する失敗したテストのデバッグの一環として、ジョブを再試行します。

失敗したジョブを再試行するには:

gcloud

gcloud deploy rollouts retry-job JOB_NAME \
                       --release=RELEASE_NAME \
                       --delivery-pipeline=PIPELINE_NAME \
                       --rollout=ROLLOUT_NAME \
                       --phase=PHASE_ID \
                       --region=REGION

ここで

JOB_NAME は、再試行するジョブの名前です。たとえば、検証が失敗した後に検証ジョブを再試行する場合は、verify になります。

RELEASE_NAME は、このジョブ実行が属するリリースの名前です。

PIPELINE_NAME は、このリリースのデプロイを管理するために使用するデリバリー パイプラインの名前です。

ROLLOUT_NAME は、このジョブ実行が属するロールアウトの名前です。

PHASE_ID は、このジョブが属するフェーズの名前です。例: canary-50、または stable

REGION は、リリースが作成されたリージョンの名前です(例: us-central1)。必須入力項目です。

gcloud deploy rollouts retry-job コマンドの詳細については、Google Cloud SDK リファレンスをご覧ください。

コンソール

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

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

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

  3. [ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。

    そのロールアウトのロールアウトの詳細ページが表示されます。

  4. [フェーズとジョブ] で、再試行するジョブを含むフェーズをクリックします。

  5. 再試行するジョブを選択します。

  6. [再試行] をクリックして確定します。

     Google Cloud コンソールでのロールアウトの詳細

    ジョブの実行が再度実行され、フェーズの表に示すように、ジョブのステータスは「進行中」になります。同じフェーズに他のジョブがある場合は、それらが実行されます。それ以外の場合は、ロールアウトを次のフェーズに進める準備が整っています。

次のステップ