このドキュメントでは、Cloud Deploy のデプロイを検証する方法について説明します。
任意のターゲットにデプロイしたアプリケーションが正しく動作していることを検証するため、Cloud Deploy と Skaffold を構成できます。検証は独自のテストイメージを使用して行われ、デプロイの完了後にこれらのテストを実行するように Cloud Deploy と Skaffold を構成します。
デフォルトでは、デプロイの検証は Cloud Deploy 実行環境で実行されますが、アプリケーションが実行されているのと同じクラスタで実行するように構成することもできます。
デプロイ検証の仕組み
検証用に Skaffold を構成します。
この構成では、テストの実行に使用するコンテナ イメージとコンテナ イメージから実行する特定のコマンド(スクリプトなど)を識別します。
デプロイ検証のデリバリー パイプラインで 1 つ以上のターゲットを構成します。
この構成により、ターゲットにデプロイされたワークロードの検証が有効になります。
ロールアウトがデプロイ(
skaffold apply
)されると、Cloud Deploy は Cloud Deploy 実行環境でskaffold verify
コマンドを実行します。Google Kubernetes Engine と GKE Enterprise へのデプロイでは、アプリケーション コンテナが実行されているのと同じクラスタで検証コンテナを実行することもできます。
Skaffold は、
skaffold.yaml
のverify
スタンザで指定されたテストを呼び出して、デプロイされたアプリケーションに対して実行します。実行されたテストの成功または失敗は、検証の成功または失敗を示します。
検証の成功は、実行されたコンテナの終了コードによって確認されます。
0
は成功を示します。ゼロ以外の終了コードは失敗を示します。必要な検証結果を生成するには、コンテナが適切な終了コードで終了するようにします。検証の一環として複数のコンテナが実行されている場合、検証に成功するには、それらのコンテナがすべて成功する必要があります。検証が失敗した場合は、ロールアウトも失敗します。
検証中にデプロイが失敗した場合は、ロールアウトを検査して確認できます。
-
進行中の検証ジョブを終了することもできます。
検証に使用されるコンポーネント
ロールアウトリソースには、デプロイの検証をサポートする次のオブジェクトが含まれています。
フェーズ
論理的にグループ化された、ロールアウト内のオペレーション(ジョブ)のコレクション(デプロイ、デプロイと検証など)。
Job
ロールアウト時に実行される特定のオペレーション(デプロイ、検証など)。
ジョブ実行
ロールアウト リソースの子、ジョブ実行はジョブのインスタンスです(デプロイの試行など)。
Cloud Deploy リソースの詳細については、Cloud Deploy サービス アーキテクチャをご覧ください。
デプロイの検証で生成された通知
Cloud Deploy は Pub/Sub メッセージを生成し、次のイベント用に公開します。
ジョブの作成、更新、削除
これらの通知は
clouddeploy-resources
トピックに公開され、次の属性が含まれます。Resource
ResourceType
(JobRun
)Action
(Create
、Update
、Delete
)ProjectNumber
Location
TargetId
DeliveryPipelineId
ReleaseId
RolloutId
JobRunId
clouddeploy-resources
トピックに公開された、ジョブ実行の作成の Pub/Sub メッセージの例を次に示します。
{
"ackId": "UAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRAGAE8CKF15MFcrQVh9Dz4NGXJ9YXRiWRIJBkUHeF9cEQ1iXE5EB0nq0KDVV1dKXxYGAExQeVhbHQVoWVh0Bnn7h5nK-8HjYwk9OqKarPdtO4PY2fNHZiI9XhJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FU0Q",
"message": {
"attributes": {
"Action": "Create",
"DeliveryPipelineId": "dv-pipeline",
"JobRunId": "634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
"Location": "us-central1",
"ProjectNumber": "253401481285",
"ReleaseId": "test-release-100",
"Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-100/rollouts/test-release-100-to-dev-0001/jobRuns/634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
"ResourceType": "JobRun",
"RolloutId": "test-release-100-to-dev-0001"
},
"messageId": "5572937706805411",
"publishTime": "2022-09-07T14:00:46.040Z"
}
},
ジョブ実行の開始、成功、失敗
これらの通知は
clouddeploy-operations
トピックに公開され、次の属性が含まれます。Resource
ResourceType
(JobRun
)Action
(Start
、Succeed
、Failure
)ProjectNumber
Location
TargetId
DeliveryPipelineId
ReleaseId
RolloutId
JobRunId
PhaseId
JobId
JobType
(Deploy
またはVerify
)
失敗したジョブ実行の Pub/Sub メッセージの例を次に示します。これは、clouddeploy-operations
トピックに公開されます。
{
"ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUUBAgUBXx9cEFPdVhec2hRDRlyfWB9aVsbCAUXU3cJURsHaE5tdR-6xcvaS0NVb18UAgRFWndfXhMEblhfcy-fkK3HwvT9U0AvOemNgdZpe6jHiulvZiM9XxJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FUw",
"message": {
"attributes": {
"Action": "Failure",
"DeliveryPipelineId": "dv-pipeline",
"JobId": "verify",
"JobRunId": "b389224a-c259-4a00-ab75-c22e48bc3136",
"JobType": "Verify",
"Location": "us-central1",
"PhaseId": "stable",
"ProjectNumber": "253401481285",
"ReleaseId": "test-release-101",
"Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-101/rollouts/test-release-101-to-dev-0001/jobRuns/b389224a-c259-4a00-ab75-c22e48bc3136",
"ResourceType": "JobRun",
"RolloutId": "test-release-101-to-dev-0001",
"TargetId": "dev"
},
"messageId": "5573609905896436",
"publishTime": "2022-09-07T15:35:37.906Z"
}
},
デプロイ検証用に Cloud Deploy を構成する
Cloud Deploy ターゲットのデプロイ検証を有効にするには、この例に示すように、デリバリー パイプラインの進行状況で、特定のターゲットに verify: true
プロパティを追加します。
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-demo-app
description: main application pipeline
serialPipeline:
stages:
- targetId: dev
profiles: []
strategy:
standard:
verify: true
- targetId: prod
profiles: []
strategy:
standard:
verify: false
この構成では、デプロイの検証は dev
ターゲットでは有効ですが、prod
ターゲットでは有効になりません。verify: false
は、verify
プロパティまたは strategy
スタンザ全体を省略した場合と同じです。
検証オペレーションは、独自の実行環境内で実行されます。この実行環境は、RENDER
と DEPLOY
の場合と同じように VERIFY
に構成できます。
デプロイの検証用に Skaffold を構成する
ターゲットのデプロイ検証を有効にするには、デプロイの skaffold.yaml
構成ファイルに verify
スタンザが必要です。この構成は、ターゲットごとに別々のプロファイルを使用している場合、特定の Skaffold プロファイル用です。
この verify
スタンザは、検証を行うために実行するコンテナ(統合テストなど)を識別します。
verify
スタンザを含む skaffold.yaml
の例を次に示します。
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: integration-test
context: integration-test
manifests:
rawYaml:
- kubernetes.yaml
deploy:
kubectl: {}
verify:
- name: verify-integration-test
container:
name: integration-test
image: integration-test
command: ["./test-systems.sh"]
- name: verify-endpoint-test
container:
name: alpine
image: alpine
command: ["/bin/sh"]
args: ["-c", "wget #ENDPOINT_URL"]
この簡単な例は、使用するコンテナを識別する verify
スタンザと、そのコンテナで実行するテスト スクリプトを示しています。この例の #ENDPOINT_URL
はアプリケーション URL のプレースホルダであり、使用可能な Cloud Deploy 環境変数ではありません。
アプリケーション クラスタで検証コンテナを実行する
デフォルトでは、デプロイの検証は Cloud Deploy 実行環境で実行されます。アプリケーションが動作しているのと同じクラスタで検証コンテナを実行するように Skaffold を構成することもできます。skaffold.yaml
でクラスタ内検証を構成し、ターゲットで検証を有効にすると、ターゲットのクラスタ内で検証が自動的に実行されます。
この機能は、GKE と GKE Enterprise へのデプロイでのみ使用できます。Cloud Run では使用できません。Cloud Run へのデプロイについては、Cloud Deploy 実行環境でのみ検証を実行できます。
クラスタ内検証には、Skaffold バージョン 2.3 以降が必要です。
クラスタで検証コンテナを実行するには、skaffold.yaml
構成ファイルの executionMode.kubernetesCluster
スタンザを、特定の検証コンテナの verify
スタンザに配置します。
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
以下に、アプリケーション クラスタで検証コンテナを呼び出す executionMode
を含む検証スタンザの例を示します。
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
executionMode
スタンザの使用は任意です。省略すると、Skaffold は Cloud Deploy 実行環境で検証コンテナを実行します。
検証を再試行する
検証ジョブが失敗した場合は、新しいジョブ実行を作成して検証を再試行できます。
gcloud deploy rollouts retry-job ROLLOUT_NAME \
--job-id=JOB_ID \
--phase-id=PHASE_ID \
--delivery-pipeline=PIPELINE_NAME \
--release=RELEASE_NAME \
--region=REGION
検証を再試行すると、ロールアウトの状態が FAILED
から IN_PROGRESS
に変わります。
検証ジョブが失敗したロールアウトの検証のみ再試行できます。
使用可能な環境変数
Cloud Deploy では、テストに使用できる VERIFY
実行環境で、次の環境変数を指定し、入力します。
ANTHOS_MEMBERSHIP
タイプが
ANTHOS
のターゲットの場合、Anthos メンバーシップの完全なリソース名。CLOUD_RUN_LOCATION
RUN
タイプのターゲットに対して、Cloud Run サービスがデプロイされているリージョン。CLOUD_RUN_PROJECT
タイプが
RUN
のターゲットの場合、Cloud Run サービスが作成されたプロジェクト。CLOUD_RUN_SERVICE
タイプが
RUN
のターゲットの場合、デプロイされた Cloud Run サービスの完全なリソース名。例:projects/p/locations/us-central1/services/dev
。CLOUD_RUN_SERVICE_URLS
タイプが
RUN
のターゲットの場合、エンドユーザーがサービスへのアクセスに使用する 1 つまたは複数の URL(カンマ区切りのリスト)。これらは、Google Cloud コンソールで、サービスの Cloud Run サービスの詳細で確認できます。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_LOCATION
実行環境が運用されているリージョン。
CLOUD_DEPLOY_DELIVERY_PIPELINE
実行環境が運用されている ID デリバリー パイプライン。
CLOUD_DEPLOY_TARGET
実行環境が運用されているターゲットの ID。
CLOUD_DEPLOY_PROJECT
実行環境が運用されている Google Cloud プロジェクトのプロジェクト番号。
CLOUD_DEPLOY_RELEASE
検証が実行されるリリースの ID。
CLOUD_DEPLOY_ROLLOUT
検証するジョブが含まれるロールアウトの ID。
CLOUD_DEPLOY_JOB_RUN
ジョブの現在の実行を表すジョブ実行の ID。
CLOUD_DEPLOY_PHASE
検証するジョブを含むロールアウトのフェーズ。