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
フェーズに進みます{101 トラフィックを分割するアプリケーションの } この場合、状態はSKIPPED
に設定されます。
ジョブの状態
ジョブは次のいずれかの状態になります。
ABORTED
フェーズが失敗すると、後続のフェーズは中止されます。
ジョブが失敗し、その失敗が無視されない場合、後続のジョブは中止されます。たとえば、フェーズにデプロイジョブと検証ジョブが含まれているときに、デプロイジョブが失敗した場合、検証ジョブは中止されます。
DISABLED
フェーズ内の一部のジョブが無効になることがあります。たとえば、検証が有効かどうかにかかわらず、フェーズには検証ジョブが常に含まれます。検証が有効になっていない場合は、検証ジョブは
DISABLED
に設定されます。FAILED
このジョブのジョブ実行が失敗し、ユーザーが失敗を無視することを選択しました。
ユーザーがこのジョブのジョブ実行を終了することを選択しました。
IGNORED
このジョブのジョブは失敗し、ユーザーは失敗を無視することを選択しました。
IN_PROGRESS
このジョブのジョブ実行は現在実行中です。
PENDING
このジョブで実行されているジョブは、別のフェーズまたはジョブが完了していないため、開始を待機しています。
SKIPPED
カナリアなどのデプロイ戦略を実行している場合、実行中のバージョンがない場合は Cloud Deploy が
stable
フェーズに進みます{101 トラフィックを分割するアプリケーションの } この場合、スキップされたフェーズ内のジョブでは状態が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
フェーズがあります。ロールアウトには、より多くのフェーズや異なるフェーズがある場合があります。[Advance rollout] をクリックします。
ロールアウトが次のフェーズに進みます。
ロールアウトのキャンセル
終了していないロールアウトをキャンセルできます。失敗したロールアウトをキャンセルして、追加のアクション(無視や再試行など)を防ぐこともできます。ロールアウトは次のいずれかの状態になります。
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)です。Google Cloud コンソールの Cloud Deploy では、ロールアウト ページでジョブ実行 ID を確認できます。
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
フェーズがあります。ロールアウトには、より多くのフェーズやフェーズがある場合があります。[Phases] で、ジョブの実行を終了するジョブを含むフェーズをクリックします。
[ジョブ実行] で、終了する特定のジョブ実行を選択し、[終了] をクリックします。
ジョブの実行は終了し、フェーズテーブルに示されているジョブのステータスは
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 リファレンスをご覧ください。
コンソール
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
[ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。
そのロールアウトのロールアウトの詳細ページが表示されます。
無視するジョブを選択します。
[IgnoreFailure] ボタンをクリックします。
失敗したジョブ実行は無視され、ジョブが成功したかのようにロールアウトが続行されます。つまり、同じフェーズに他のジョブがあれば実行されます。それ以外の場合、ロールアウトは次のフェーズに進むことができます。
失敗したジョブを再試行する
失敗したジョブ実行を再試行できます。次のいずれかの理由で、エクスポートに失敗する可能性があります。
ジョブ実行を完了できませんでした。
たとえば、権限が失敗していたことが考えられます。
ユーザーがそのジョブからジョブ実行を終了しました。
ジョブの実行を終了すると、ジョブが失敗するため、再試行できます。
確認テストに失敗しました。
確認ジョブの場合、検証テストが失敗しました。検証ジョブが正常に完了しても、いずれかの検証テストが失敗し、検証ジョブに伝播されます。この場合、失敗したテストをアプリケーションに対してデバッグするときにジョブを再試行します。
失敗したジョブを再試行するには:
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 サービス アーキテクチャのドキュメントをご覧ください。