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 リファレンスをご覧ください。
コンソール
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
[ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。
そのロールアウトのロールアウトの詳細ページが表示されます。
無視する失敗したジョブを選択します。
[エラーを無視] ボタンをクリックします。
失敗したジョブ実行は無視され、ジョブが成功したかのようにロールアウトが続行されます。つまり、同じフェーズに他のジョブがある場合は、それらのジョブが実行されます。それ以外の場合は、ロールアウトを次のフェーズに進めることができます。
失敗したジョブを再試行する
失敗したジョブの実行を再試行できます。次のいずれかの理由で、エクスポートに失敗する可能性があります。
ジョブの実行が完了しなかった。
たとえば、権限エラーが発生している可能性があります。
ユーザーがそのジョブからジョブ実行を終了した。
ジョブ実行を終了すると、ジョブは失敗します。このジョブは再試行できます。
確認テストが失敗しました。
検証ジョブの検証テストが失敗しました。検証ジョブは正常に完了しましたが、検証テストの 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 サービス アーキテクチャのドキュメントをご覧ください。