このドキュメントでは、自動化ルールについて説明します。自動化ルールとは、デリバリー パイプラインに対して自動的に実行できるアクションです。たとえば、適切な状況下で特定のターゲットへのプロモーションが自動的に行われるように、デリバリー パイプラインを構成できます。
Cloud Deploy に組み込まれている自動化ルールのみを使用できます。利用可能な自動化ルールについては、このドキュメントをご覧ください。
利用可能な自動化ルール
Cloud Deploy では、次の自動化ルールを使用できます。
| ルール | 説明 |
|---|---|
timedPromoteReleaseRule
|
あるターゲットから次のターゲットに自動的にプロモートする cron スケジュールに基づいて実行されます。 |
promoteReleaseRule
|
進行中の前のターゲットのロールアウトの成功後に、 指定されたターゲットにリリースを自動的にプロモートさせます。 |
advanceRolloutRule
|
指定された フェーズから次のフェーズへと、自動的にロールアウトを進行させます。 |
repairRolloutRule
|
ロールアウトで失敗したジョブを自動的に再試行する 指定された回数だけ再試行し、すべての再試行が失敗した場合はロールバックします。 |
自動化ルールを構成する
自動化ルールの構成は、ルールごとに異なります。このセクションでは、すべてのルールに共通する構成と、利用可能な各ルールの構成方法について説明します。
各自動化ルールは、自動化リソースの構成の一部として構成されます。これは、関連するデリバリー パイプラインの構成(通常は clouddeploy.yaml と呼ばれます)と同じファイル内に配置することも、任意のファイル内に配置することもできます。詳しくは、自動化の構成をご覧ください。
以降のセクションでは、個々の自動化ルールに固有の構成について説明します。自動化自体の構成については、デプロイを自動化するをご覧ください。
timedPromoteReleaseRule 自動化ルールを構成する
timedPromoteReleaseRule ルールを使用すると、選択したターゲットから進行中の次のターゲットまたは指定されたターゲットにリリースをプロモートするタイミングをスケジュールできます。timedPromoteReleaseRule 自動化を構成する際は、cron スケジュールに基づいてリリースをプロモートするタイミングを指定します。
rules:
- timedPromoteReleaseRule:
id: "[RULE_ID]"
schedule: "[CRON]"
timeZone: "[TIME_ZONE]"
destinationTargetId: "[TO_TARGET]"
destinationPhase: "[TO_PHASE]"
ここで
[RULE_ID]このルールに付ける名前です。この名前は、自動化リソース内で一意である必要があります。
[CRON]リリースをプロモートするタイミングを指定する cron スケジュールです。このスケジュールを使用して、リリースを宣伝する日時を指定します。
このスケジュールでは、標準の
cron構文を使用します。* * * * *このスケジュールでは、
- 最初の位置は分(
0~59)です。 - 2 番目の位置は時間(
0~23)です。 - 3 番目の位置は日(
1~31)です。 - 4 番目の位置は月(
1~12)です。 - 5 番目の位置は曜日(
0~6、日曜日~土曜日)です。
たとえば、時間指定の昇格ルールに
0 9 * * 1というスケジュールが含まれている場合、リリースは毎週月曜日の午前 9 時に昇格されます。次の標準の cron スケジュール機能も使用できます。
- 範囲(
0~5) - リスト(
1、3、5) - ステップ関数(たとえば、hours フィールドの
*/3は 3 時間ごとにアクティブになります)
- 最初の位置は分(
[TIME_ZONE]プロモーションのスケジュール設定に使用するタイムゾーン(IANA 形式)。
[TO_TARGET]プロモート先のターゲットの
targetId、またはこの自動化構成のselector.targets propertyで指定されたターゲットの後にリリースを次のターゲットに自動的にプロモートする@nextです。これは省略可能です。デフォルトは@nextです。[TO_PHASE]プロモート先のフェーズのフェーズ名(
canary-25、stableなど)です。このプロパティは省略可能です。指定しない場合、リリースはターゲットの最初のフェーズにプロモートされます。
promoteReleaseRule 自動化ルールを構成する
promoteReleaseRule ルールは、ターゲットへのロールアウトに成功した後にリリースをプロモートさせます。たとえば、3 つのターゲットがある場合、リリースが最初のターゲットに正常にデプロイされると、自動的に 2 番目のターゲットにプロモートするようにこのルールを設定できます。
promoteReleaseRule 自動化を構成する際は、プロモートさせるターゲットを(destinationTargetId)または @next で指定できます。Automation 定義で指定されたターゲットでロールアウトが正常に終了すると、wait の時間間隔に従って、リリースが destinationTargetId で指定されたターゲットにプロモートされます。
destinationPhase プロパティを使用して、目的のターゲットの特定のフェーズにリリースをプロモートすることもできます。ここに示されている rules スタンザは、自動化の定義内に配置されます。
rules:
- promoteReleaseRule:
id: "[RULE_ID]"
wait: [WAIT_TIME]
destinationTargetId: "[TO_TARGET]"
destinationPhase: "[TO_PHASE]"
ここで
[RULE_ID]このルールに付ける名前です。この名前は、自動化リソース内で一意である必要があります。
[WAIT_TIME]リリースの準備が整った後、プロモートされるまで待機する時間(分単位)です。たとえば
1mです。必ずmを付ける必要があります。デフォルト値は
0(待機時間なし)です。最大値は20160m(14 日)です。[TO_TARGET]プロモート先のターゲットの
targetIdです。@nextにすることもできます。この場合、この自動化構成のselector.targetsプロパティで指定されたターゲットの後に、リリースが次のターゲットに自動的にプロモートされます。これは、destinationTargetIdの値を指定しない場合のデフォルトです。[TO_PHASE]プロモート先のフェーズのフェーズ名(
canary-25、stableなど)です。このプロパティは省略可能です。指定しない場合、リリースはターゲットの最初のフェーズにプロモートされます。
advanceRolloutRule 自動化ルールを構成する
advanceRolloutRule は、1 つのフェーズが正常に完了すると、ロールアウトを次のフェーズに自動的に進めます。この自動化ルールは、カナリア デプロイに役立ちます。たとえば、ターゲットにカナリア デプロイ戦略(25%、50%、stable のフェーズ)を用いている場合に、フェーズを進行する自動化ルールを構成して、50% フェーズが終了すると自動的に stable に進行させるといったことができます。
advanceRolloutRule 自動化を構成する際は、どのフェーズから進行させるか(sourcePhase )を特定します。ここに示されている rules スタンザは、自動化定義内に配置されます。
rules:
- advanceRolloutRule:
id: "[RULE_ID]"
sourcePhases: ["[START_PHASE]", "[START_PHASE]"...]
wait: [WAIT_TIME]
ここで
[RULE_ID]このルールに付ける名前です。この名前は、自動化リソース内で一意である必要があります。
[WAIT_TIME]ロールアウトの準備が整った後、ロールアウトを進めるのを待機する時間(分単位)です。たとえば
1mです。必ずmを付ける必要があります。デフォルト値は
0(待機時間なし)です。最大値は20160m(14 日)です。["[START_PHASE]", "[START_PHASE]"...]ロールアウトを自動的に進行させる起点となるフェーズです。 つまり、指定されたいずれかのフェーズが正常に終了すると、そのフェーズから次のフェーズに自動的にロールアウトが進行します。
フェーズ名では大文字と小文字が区別されます。また、これらのフェーズ名はオプションです。
sourcePhasesを省略すると、ロールアウトのすべてのフェーズが自動的に進行します。
repairRolloutRule 自動化ルールを構成する
repairRolloutRule ルールは、失敗したロールアウトを指定された回数だけ再試行します。再試行回数が上限に達すると、このルールはターゲットを最後に成功したリリースに自動的にロールバックできます。
repairRolloutRule 自動化を構成する際は、ロールアウトを再試行する回数と、再試行間の待機時間を指定できます。特定のフェーズまたはジョブ、またはその両方を再試行するように構成することもできます。再試行がすべて失敗すると、ロールアウトは失敗します。再試行が成功すると、自動化が停止し、ロールアウトが成功します。
必要に応じて、ターゲットで最後に成功したリリースにロールバックするように自動化を構成できます。再試行も省略可能ですが、一定回数の再試行またはロールバック、またはその両方が必要です。
ここに示されている rules スタンザは、自動化の定義内に配置されます。
rules:
- repairRolloutRule:
id: "[RULE_ID]"
phases: [PHASES_TO_REPAIR]
jobs: [JOBS_TO_REPAIR]
repairPhases:
- retry:
attempts: [NUMBER_OF_ATTEMPTS]
wait: [WAIT_TIME]
backoffMode: [LINEAR | EXPONENTIAL]
- rollback:
destinationPhase: [PHASE_NAME]
ここで
[RULE_ID]このルールに付ける名前です。この名前は、自動化リソース内で一意である必要があります。
[PHASES_TO_REPAIR]再試行するロールアウト フェーズです。これは省略可能です。デフォルトはロールアウトのすべてのフェーズです。
[JOBS_TO_REPAIR]再試行するジョブです。これは省略可能です。デフォルトはすべてのジョブです。
[NUMBER_OF_ATTEMPTS]これは省略可能です。ロールアウトを失敗と見なす前に再試行する回数です。
[WAIT_TIME]再試行の間に待機する最大時間です。 たとえば、1 分間隔の場合は
1mです。時間単位(この場合はm)は必須です。modeがlinearの場合、この間隔は再試行ごとに同じになります。modeがexponentialの場合、間隔は毎回増加します。(詳しくは、modeをご覧ください)。backoffModeLINEARまたはEXPONENTIALの場合、リタイア間の時間を長くするかどうかを示します。LINEARの場合、再試行の間隔はWAIT_TIMEで一定です。EXPONENTIALの場合、再試行の間隔は再試行ごとに 2 倍になります。デフォルトはLINEARです。たとえば、
WAIT_TIMEが 1 分で、backoffModeがEXPONENTIALに設定されている場合、障害と最初の再試行の間の時間は 1 分、1 回目と 2 回目の再試行の間の時間は 2 分、2 回目と 3 回目の再試行の間の時間は 4 分になります。rollback省略可能です。すべての再試行が試行された後に、失敗したロールアウトをロールバックするかどうか設定します。
[PHASE_NAME]ロールバックする特定のフェーズの名前です。
toPhaseを省略すると、ロールバックはデフォルトでstableフェーズになります。
repairRolloutRule 自動化の実行を中止する
ロールアウトで次のいずれかのコマンドを実行すると、repairRolloutRule の自動化が中止されます。
例
repairRolloutRule を使用した自動化構成の例を次に示します。
apiVersion: deploy.cloud.google.com/v1
kind: Automation
metadata:
name: regular-repair/regular
description: repair regular rollouts
suspended: false
serviceAccount: (REDACTED)
selector:
targets:
- id: t1
rules:
- repairRolloutRule:
id: "repair-rollout"
repairPhases:
- retry:
attempts: 3
wait: 1m
backoffMode: LINEAR
- rollback:
destinationPhase: "stable"
この自動化では、特定されたターゲットでロールアウトが失敗した場合、ロールアウトは最大 3 回再試行されます。再試行の間隔は 1 分です。再試行がすべて失敗すると、ロールバックが開始されます。ロールバックでは、ターゲットの最新の成功したリリースをそのターゲットにデプロイする新しいロールアウトが作成されます。
次のステップ
クイックスタート: リリースの作成とロールアウト進行の自動化をご確認ください。
Cloud Deploy のデプロイ自動化の詳細をご覧ください。