このドキュメントでは、デプロイの前後に任意のプログラムやオペレーションを実行する方法について説明します。
デプロイ前のアクションまたはデプロイ後のアクション、あるいはその両方を実行するように Cloud Deploy を構成できます。このように実行されるプログラムは「フック」と呼ばれます。デプロイ前フックとデプロイ後フックは、ロールアウトでデプロイ前ジョブとデプロイ後ジョブとして実行されます。
各フックは、指定した Cloud Deploy 実行環境で実行されるように構成できますが、Google Kubernetes Engine にデプロイする場合は、アプリケーションをデプロイする GKE クラスタで実行されるよう構成できます。
デプロイフックはべき等であると想定されます。特定のアクションが複数回実行されても、追加の効果はありません。
デプロイフックの仕組み
以降では、Cloud Deploy でデプロイフックがどのように実行され、どのように設定されるかについて説明します。
デリバリー パイプラインの進行状況の 1 つ以上のステージでフックを構成します。
ロールアウトのデプロイジョブの実行の前に、Cloud Deploy は、パイプライン進行の
predeploy定義で構成された任意のタスクを実行します。predeployフックは、フェーズの最初のジョブとして常に実行されます。ロールアウトのデプロイジョブが実行されると、Cloud Deploy は、パイプライン進行の
postdeploy定義で構成された任意のタスクを実行します。
デプロイフックは、Cloud Deploy の実行環境で実行されます。
カナリア デプロイでデプロイフックを使用する
カナリア デプロイのデプロイフックを構成する際には、次の点に注意してください。
デリバリー パイプライン ステージでは、フックの構成(
predeployとpostdeploy)は、strategy.standardではなくstrategy.canary.canaryDeploymentまたはstrategy.canary.customCanaryDeployment.phaseConfigsの下にあります。自動カナリアの場合、
predeployフックは最初のフェーズのデプロイ前にのみ実行され、postdeployフックは最後のフェーズ(安定版)のデプロイ後にのみ実行されます。
フックを実行するようにパイプラインを構成する
デプロイ前フックとデプロイ後フックは、パイプラインの進行中の 1 つ以上の特定のステージで構成します。
standard デプロイ戦略を使用する場合、パイプライン ステージでデプロイ前とデプロイ後のフックを構成する方法は次のとおりです。
serialPipeline:
stages:
- targetId: hooks-staging
profiles: []
strategy:
standard:
predeploy:
tasks: [TASKS]
postdeploy:
tasks: [TASKS]
この yaml では:
TASKS
デプロイ前またはデプロイ後のフックの一部として実行する 1 つ以上の Task のリストです。複数のタスクを指定すると、指定された順序でシリアルに実行されます。ジョブ(事前デプロイまたは事後デプロイ)は、失敗した最初のタスクで失敗し、残りのタスクは実行されません。
アプリケーション クラスタでフックを実行する
デフォルトでは、デプロイフックは Cloud Deploy 実行環境で実行されます。アプリケーションが動作しているのと同じクラスタでデプロイフックを実行するように Skaffold を構成することもできます。
アプリケーション クラスタでフックを実行するには、skaffold.yaml で customActions として構成し、配信パイプライン ステージ構成の predeploy または postdeploy スタンザで actions を使用して参照する必要があります。
serialPipeline:
stages:
- targetId: hooks-staging
profiles: []
strategy:
standard:
predeploy:
actions: ["my-predeploy-action"]
postdeploy:
actions: ["my-postdeploy-action"]
この機能は、Cloud Run ではなく、GKE へのデプロイでのみ使用できます。Cloud Run へのデプロイについては、Cloud Deploy 実行環境でのみフックを実行できます。
クラスタで実行するようにフックを構成するには、skaffold.yaml 構成ファイルの executionMode.kubernetesCluster スタンザを、クラスタで実行する各アクションの customActions スタンザに配置します。
customActions:
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
executionMode:
kubernetesCluster: {}
以下に、アプリケーション クラスタでフック コンテナを呼び出す executionMode を含む customActions スタンザの例を示します。
customActions:
- name: predeploy-action
containers:
- name: predeploy-echo
image: ubuntu
command: ["/bin/sh"]
args: ["-c", 'echo "this is a predeploy action"' ]
executionMode:
kubernetesCluster: {}
executionMode スタンザの使用は任意です。省略すると、Skaffold は Cloud Deploy 実行環境でカスタム アクション コンテナを実行します。
使用可能な環境変数
Cloud Deploy では、実行環境で次の環境変数を指定し、入力します。これらの環境変数は、デプロイフック、検証ジョブ、カスタム ターゲットのレンダリングまたはデプロイの一部として使用できます。
ANTHOS_MEMBERSHIPタイプが
ANTHOSのターゲットの場合、Anthos メンバーシップの完全なリソース名。CLOUD_RUN_LOCATIONタイプが
RUNのターゲットの場合、Cloud Run サービスがデプロイされているリージョン。CLOUD_RUN_PROJECTタイプが
RUNのターゲットの場合、Cloud Run サービスが作成されたプロジェクト。CLOUD_RUN_SERVICEタイプが
RUNのターゲットの場合、デプロイされた Cloud Run サービスの名前。CLOUD_RUN_SERVICE_URLSタイプが
RUNのターゲットの場合、エンドユーザーがサービスへのアクセスに使用する 1 つまたは複数の URL(カンマ区切りのリスト)。これらは、Google Cloud コンソールで、サービスの Cloud Run サービスの詳細で確認できます。URL は、Cloud Run サービスが正常にデプロイされた後に Cloud Run によって生成されます。そのため、この環境変数は postdeploy フックと検証ジョブでのみ使用できます。CLOUD_RUN_REVISIONタイプが
RUNのターゲットの場合、Cloud Run サービスの特定のリビジョン。GKE_CLUSTERタイプが
GKEのターゲットの場合、Google Kubernetes Engine クラスタの完全なリソース名。例:projects/p/locations/us-central1/clusters/dev。TARGET_TYPEターゲットの特定のランタイム タイプ。
GKE、ANTHOS、RUNのいずれか。 カスタム ターゲットの場合、これは設定されません。CLOUD_DEPLOY_LOCATIONCloud Deploy リソースを含むリージョン。
CLOUD_DEPLOY_DELIVERY_PIPELINEデリバリー パイプラインの ID。
CLOUD_DEPLOY_TARGETターゲットの ID。
CLOUD_DEPLOY_PROJECTCloud Deploy リソースを含むプロジェクトの Google Cloud プロジェクト番号。
CLOUD_DEPLOY_PROJECT_IDプロジェクトの Google Cloud プロジェクト ID。
CLOUD_DEPLOY_RELEASE検証が実行されるリリースの ID。
CLOUD_DEPLOY_ROLLOUTフックのジョブを含むロールアウトの ID。
CLOUD_DEPLOY_JOB_RUNジョブの現在の実行を表すジョブ実行の ID。
CLOUD_DEPLOY_PHASEデプロイフック、検証ジョブ、カスタム レンダリングまたはデプロイのジョブを含むロールアウトのフェーズ。
パラメータを環境変数としてデプロイする
このセクションに記載されている環境変数に加えて、設定したデプロイ パラメータが Cloud Deploy からカスタム コンテナに渡されます。
詳細。
次のステップ
- タスクの詳細
- クイックスタート: デプロイの前後にフックを実行するを試す。