ロールアウトを管理する

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 フェーズに進みます{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 リファレンスをご覧ください。

コンソール

  1. [デリバリー パイプライン] ページを開く

  2. デリバリー パイプラインのリストに表示されているパイプラインをクリックします。

    デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。

  3. [ロールアウト] タブの [デリバリー パイプラインの詳細] で、ロールアウトの名前をクリックします。

    そのロールアウトのロールアウトの詳細ページが表示されます。

    Google Cloud コンソールのロールアウトの詳細

    この例では、ロールアウトに canary-50 フェーズと stable フェーズがあります。ロールアウトには、より多くのフェーズや異なるフェーズがある場合があります。

  4. [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 リファレンスをご覧ください。

コンソール

  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)です。Google Cloud コンソールの Cloud Deploy では、ロールアウト ページでジョブ実行 ID を確認できます。

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. [Phases] で、ジョブの実行を終了するジョブを含むフェーズをクリックします。

  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. [IgnoreFailure] ボタンをクリックします。

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

Google Cloud コンソールで失敗したジョブ(無視できる状態)

失敗したジョブを再試行する

失敗したジョブ実行を再試行できます。次のいずれかの理由で、エクスポートに失敗する可能性があります。

  • ジョブ実行を完了できませんでした。

    たとえば、権限が失敗していたことが考えられます。

  • ユーザーがそのジョブからジョブ実行を終了しました。

    ジョブの実行を終了すると、ジョブが失敗するため、再試行できます。

  • 確認テストに失敗しました。

    確認ジョブの場合、検証テストが失敗しました。検証ジョブが正常に完了しても、いずれかの検証テストが失敗し、検証ジョブに伝播されます。この場合、失敗したテストをアプリケーションに対してデバッグするときにジョブを再試行します。

失敗したジョブを再試行するには:

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

    ジョブ実行が再実行され、フェーズテーブルに示されているジョブ ステータスが「処理中」になります。同じフェーズに他のジョブが存在する場合は、それらが実行されます。それ以外の場合、ロールアウトは次の段階に進むことができます。

次のステップ