デプロイの自動化

このドキュメントでは、デプロイ自動化の概要について説明します。

特定のデリバリー パイプラインのリリース関連のタスクとロールアウト関連のタスクを自動的に実行するように Cloud Deploy を構成できます。これらのタスクには、リリースのプロモーションフェーズの進行が含まれます。

Cloud Deploy でリリースの自動化に使用されるリソースの詳細をご覧ください。

これらの自動化の仕組みを定義するルールを設定する方法について詳しくは、こちらをご覧ください。

自動化できるアクション

Cloud Deploy では、次のリリースとロールアウト アクティビティを自動化できます。

  • リリースを自動的に昇格する

    ターゲットへのロールアウトが成功すると、リリースを自動的にプロモートさせるように Cloud Deploy を構成できます。たとえば、devstagingprod の 3 つのターゲットがある場合、staging へのデプロイが成功すると、人手を介さずにリリースを prod にプロモートさせるように自動化を構成できます。遅延時間を指定することもできます。

  • スケジュールに従ってリリースを昇格させる

    cron スケジュールに従ってリリースを昇格させるように Cloud Deploy を構成できます。

  • ロールアウトの進行

    前のターゲットへのロールアウトが成功すると、次のフェーズへとロールアウトを進行させるように Cloud Deploy を構成できます。フェーズの進展は、カナリア デプロイ戦略を使用するターゲットでのみ使用できます。

  • ロールアウトを修復する

    失敗したロールアウトを自動的に再試行するように Cloud Deploy を構成できます。これには、ロールアウトを指定回数再試行し、その回数の再試行が失敗した場合に自動的にロールバックすることが含まれます。

これらのアクションとその構成方法の詳細については、自動化ルールをご覧ください。

自動化の仕組み

各自動化は、使用されるデリバリー パイプラインに関連付けられています。複数のデリバリー パイプラインで自動化を共有することはできません。

自動化の構成と実行の一般的なプロセスは次のとおりです。

  1. 自動化を構成する

    この自動化は 1 つのデリバリー パイプラインに関連付けられています。

  2. この自動化は gcloud deploy apply を使用して登録します。

    これにより、Automation リソースが作成されます。

  3. この自動化に関連付けられたデリバリー パイプラインを呼び出すには、リリースを作成します。

  4. 少なくとも 1 つのターゲットでロールアウトが成功するか、失敗します。

    ロールアウトが成功し、自動化が promoteReleaseRule の場合:

    1. ソース ターゲットでロールアウトが成功するまで実行を待機します。ソース ターゲットとは、AutomationRule ではなく、自動化用に構成された selector.targets です。

    2. wait 時間が構成されている場合、その時間も実行を待機します。

    3. リリースは、進行中のパイプラインの次のターゲット(または、指定されている場合は指定のターゲット)に自動的にプロモートされます。

    ロールアウトが成功し、自動化が advanceRolloutRule で、ターゲットがカナリア デプロイ戦略を使用している場合:

    1. 指定されたソース フェーズが存在する場合、実行を待機します。

      sourcePhase プロパティは省略可能です。ソースフェーズが指定されていない場合、ロールアウトの各フェーズは自動的に進行します。ソースフェーズが IN_PROGRESS の場合、wait 時間が経過するとフェーズの自動進行が行われます。

    2. wait 時間が構成されている場合、その時間も実行を待機します。

      カナリア デプロイを自動化する場合は、この待機時間を使用して、各カナリア フェーズの所要時間を指定します。

    3. ロールアウトは、そのソースフェーズからロールアウトの次のフェーズに自動的に進みます。

    4. 追加のソースフェーズがある場合、同じ待機時間(該当する場合)を含め、同じ方法で処理されます。

    ロールアウトに失敗し、repairRollout ルールを含む自動化がある場合:

    1. ロールアウトは、構成された wait 時間(存在する場合)後に再試行されます。

      この repairRollout ルールで特定のフェーズまたはジョブが構成されている場合、それらのフェーズまたはジョブのみが再試行されます。ジョブまたはフェーズが指定されていない場合のデフォルトは、ロールアウト内のすべてのフェーズとジョブを再試行することです。

      再試行は任意であるため、自動化で再試行が構成されていない場合、このステップは実行されません。

    2. 最初の再試行が失敗した場合、実行は構成された wait 時間を待ってから、もう一度試行します。

    3. 再試行は、Cloud Deploy が再試行回数 attempts を使い果たすまで繰り返されます。

      各試行が失敗し、attempts が使い果たされると、ロールアウトは失敗します。

      再試行中、ロールアウトが成功するか、最後の再試行の試行後に失敗するまで、ロールアウトのステータスIN_PROGRESS です。フェーズ状態は、再試行中は IN_PROGRESS ですが、ロールアウトの失敗後は FAILED になります。

    4. すべての再試行が失敗した場合(または構成されていない場合)、新しいロールアウトが作成され、ターゲットで最後に正常にリリースされたロールバックにロールバックされます。

自動化のリソース

自動化専用の Cloud Deploy リソースは 2 つあります。

  • 自動化

    Automation はデリバリー パイプラインの子リソースであり、次の情報が含まれます。

    • 自動化が使用されるターゲットへのポインタ
    • 自動化の処理内容と方法を制御するルール

    Automation リソースの構成については、自動化リソースについてをご覧ください。

    自動化構成(kind: Automation)を含むファイルに対して gcloud deploy apply を実行すると、Cloud Deploy はデリバリー自動化リソースを作成します。 この自動化リソースは、パイプラインとターゲットを 1 つまたは複数の自動化ルールに関連付けます。

  • 自動化の実行

    AutomationRun は自動化のインスタンスです。これは、対応する Automation リソースへのポインタと、それを生成したロールアウトに関する情報、その他のメタデータです。

    自動化がトリガーされると、自動化の実行が作成されます。

自動化リソースの詳細

自動化のルール

自動化ルールでは、デリバリー パイプラインで自動的に実行できるアクションと、自動化の実行方法の詳細を定義します。

自動化ルールの詳細をご確認ください。

必要な Identity and Access Management のロールと権限

Cloud Deploy デリバリー パイプラインを実行するために必要な権限、自動化されるタスク(ロールアウト進行など)を行うために必要な権限に加えて、 Automation リソースと AutomationRun リソースに対する特定のオペレーションを実行するためには次のようないくつかの権限が必要です。

  • clouddeploy.automations.create
  • clouddeploy.automations.delete
  • clouddeploy.automations.get
  • clouddeploy.automations.list
  • clouddeploy.automations.update
  • clouddeploy.automationRuns.cancel
  • clouddeploy.automationRuns.get
  • clouddeploy.automationRuns.list

これらの権限に加えて、自動化オペレーションを実行するために、各自動化ルールで追加の権限が必要な場合があります。自動化ルールごとに必要な権限については、自動化ルールを構成するをご覧ください。

これらの権限を含む Cloud Deploy のロールなど、詳細については、IAM のロールと権限をご覧ください。

自動化の作成

自動化を作成したり、利用可能な自動化ルールのいずれかを使用するためには、自動化を構成してから gcloud deploy apply を使用して自動化リソースを作成します。

次のセクション(自動化の構成)と自動化ルールの構成をご覧ください。

自動化の構成

Automation リソースを構成する方法の詳細については、構成ファイルのスキーマをご覧ください。

自動化ルールの構成

この自動化の構成に加えて、自動化ルールを指定します。構成は、使用可能なルールごとに異なります。

使用可能な各ルールの説明については、自動化ルールの使用をご覧ください。

自動化を一時停止する

既存のリソースは、削除せずに一時停止できます。これは、デリバリー パイプラインに影響を与えることなく自動化をテストする場合に便利です。自動化を一時停止すると、自動化は実行されませんが、プラットフォーム ログは引き続き生成されます。

  1. Automation 構成で、suspended プロパティを true に更新します。

  2. その構成ファイルに対して gcloud deploy apply を実行します。

  3. プラットフォーム ログは、自動化が一時停止されている場合でも、自動化がインスタンス化されたときに生成されます。これを利用して、デリバリー パイプラインに影響を与えることなく、自動化のテストとデバッグを行えます。

次のステップ