Cloud Deploy のロールアウトにはフェーズが含まれます。フェーズは、ロールアウトで実行するジョブの順序付けられた論理グループです。
各フェーズにはジョブが含まれます。ジョブは各フェーズで実行するアクション(deploy や verify など)です。各ジョブには 0 個以上のジョブ実行を含めることができます。ジョブ実行はジョブのインスタンスです。ジョブが実行されていない場合、ジョブ実行はありません。
このドキュメントでは、フェーズ、ジョブ、ジョブ実行、およびそれらの管理方法について説明します。
ロールアウトの構造
ロールアウトは、リリースをターゲットに関連付ける Cloud Deploy リソースです。
フェーズ
ロールアウトは 1 つ以上のフェーズで構成されます。
標準のデプロイ戦略の場合は、stable という 1 つのフェーズのみです。
カナリア デプロイ戦略の場合、構成された割合ごとに個別のフェーズがあります。たとえば、25%、50%、100% の順にデプロイするカナリアを構成すると、次の 3 つのフェーズが作成されます。
canary-25canary-50stable
これらのフェーズ名は標準です。カナリア ステージの場合は canary-[PERCENTAGE]、100% フェーズの場合は stable です。ただし、カスタム自動カナリアまたはカスタム カナリアを構成する場合は、フェーズ名を制御できます。
ジョブとジョブ実行
各ロールアウト フェーズには 1 つ以上のジョブが含まれます。
標準のデプロイ戦略でのロールアウトの場合、デプロイの確認は有効になりません。1 つのフェーズ(stable)があります。
カナリア ロールアウトの場合、カナリアの各部分(canary-25、canary-50、stable など)にフェーズがあり、各フェーズには 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 リファレンスをご覧ください。
コンソール
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
[ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。
そのロールアウトのロールアウトの詳細ページが表示されます。

この例では、ロールアウトに
canary-50フェーズとstableフェーズがあります。ロールアウトには、より多くのフェーズや異なるフェーズが含まれる場合があります。[ロールアウトを進める] をクリックします。
ロールアウトを次のフェーズに進めます。
ロールアウトのキャンセル
完了していないロールアウトはキャンセルできます。失敗したロールアウトをキャンセルして、それ以上の操作(無視や再試行など)を防ぐこともできます。ロールアウトは次のいずれかの状態である必要があります。
FAILEDHALTEDIN_PROGRESSPENDINGPENDING_APPROVALPENDING_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 リファレンスをご覧ください。
コンソール
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
[ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。
そのロールアウトのロールアウトの詳細ページが表示されます。

この例では、ロールアウトに
canary-50フェーズとstableフェーズがあります。ロールアウトには、より多くのフェーズや異なるフェーズが含まれる場合があります。[ロールアウトをキャンセル] をクリックします。
ロールアウトはキャンセルされます。
ジョブの実行を終了する
現在進行中のジョブ実行を終了できます。たとえば、ジョブの実行に時間がかかりすぎている場合や、想定どおりに動作していない場合などに、この操作を行うことができます。ジョブ実行を終了するには、ジョブ実行が 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 のロールアウト ページで確認できます。

gcloud deploy rollouts
describe コマンドを使用してジョブ実行 ID を取得することもできます。
RELEASE_NAME は、このジョブ実行が属するリリースの名前です。
PIPELINE_NAME は、このリリースのデプロイを管理するために使用するデリバリー パイプラインの名前です。
ROLLOUT_NAME は、このジョブ実行が属するロールアウトの名前です。
REGION は、リリースが作成されたリージョンの名前です(例: us-central1)。必須入力項目です。
gcloud deploy job-runs terminate コマンドの詳細については、Google Cloud SDK リファレンスをご覧ください。
コンソール
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
[ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。
そのロールアウトのロールアウトの詳細ページが表示されます。

この例では、ロールアウトに
canary-50フェーズとstableフェーズがあります。ロールアウトには、より多くのフェーズや異なるフェーズが含まれる場合があります。[フェーズ] で、ジョブ実行を終了するジョブを含むフェーズをクリックします。
[ジョブ実行] で、終了する特定のジョブ実行を選択し、[終了] をクリックします。
ジョブの実行が終了し、フェーズの表に示すように、ジョブのステータスは
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 コンソールのロールアウトの [フェーズ] テーブルで確認できます。

PHASE_ID は、無視するジョブを含むフェーズの名前です。
REGION は、リリースが作成されたリージョンの名前です(例: us-central1)。
gcloud deploy rollouts ignore-job コマンドの詳細については、Google Cloud SDK リファレンスをご覧ください。
コンソール
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
[ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。
そのロールアウトのロールアウトの詳細ページが表示されます。
無視する失敗したジョブを選択します。
[Ignore failures] ボタンをクリックします。
失敗したジョブ実行は無視され、ジョブが成功したかのようにロールアウトが続行されます。つまり、同じフェーズに他のジョブがある場合は、それらが実行されます。それ以外の場合、ロールアウトは次のフェーズに進む準備が整っています。

失敗したジョブを再試行する
失敗したジョブ実行を再試行できます。次のいずれかの理由で、エクスポートに失敗する可能性があります。
ジョブの実行が完了しませんでした。
たとえば、権限の失敗が考えられます。
ユーザーがそのジョブからジョブ実行を終了しました。
ジョブ実行を終了すると、ジョブが失敗し、再試行できます。
検証テストが失敗しました。
検証ジョブで、検証テストが失敗しました。検証ジョブは正しく完了しましたが、検証テストの 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 リファレンスをご覧ください。
コンソール
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
[ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。
そのロールアウトのロールアウトの詳細ページが表示されます。
[フェーズとジョブ] で、再試行するジョブを含むフェーズをクリックします。
再試行するジョブを選択します。
[再試行] をクリックして確定します。

ジョブの実行が再度実行され、フェーズの表に示すように、ジョブのステータスは「進行中」になります。同じフェーズに他のジョブがある場合は、それらが実行されます。それ以外の場合は、ロールアウトを次のフェーズに進める準備が整っています。
次のステップ
Cloud Deploy でのデプロイ戦略の仕組みについて詳しく学習します。
ロールアウト、フェーズ、ジョブ、ジョブ実行が Cloud Deploy の他の部分とどのように関連しているかについては、Cloud Deploy サービス アーキテクチャのドキュメントをご覧ください。