ロールアウトを管理する

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. [エラーを無視] ボタンをクリックします。

    失敗したジョブ実行は無視され、ジョブが成功したかのようにロールアウトが続行されます。つまり、同じフェーズに他のジョブがある場合は、それらのジョブが実行されます。それ以外の場合は、ロールアウトを次のフェーズに進めることができます。

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 コンソールでのロールアウトの詳細

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

次のステップ