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