이 문서에서는 Google Cloud Deploy 배포를 확인하는 방법을 설명합니다.
Google Cloud Deploy 및 Skaffold를 구성하여 모든 대상에 배포한 애플리케이션이 올바르게 작동하는지 확인할 수 있습니다. 확인은 자체 테스트 이미지를 사용하여 이루어지며 배포가 완료된 후 이러한 테스트를 실행하도록 Google Cloud Deploy 및 Skaffold를 구성합니다.
배포 확인 작동 방식
확인을 위해 Skaffold를 구성합니다.
이 구성은 테스트를 실행하는 데 사용할 컨테이너 이미지와 해당 컨테이너 이미지에서 실행할 특정 명령어(예: 스크립트)를 식별합니다.
배포를 확인하기 위해 배포 파이프라인에 하나 이상의 대상을 구성합니다.
이 구성으로 해당 대상에 확인을 사용 설정할 수 있습니다.
출시가 배포되면(
skaffold apply
) Google Cloud Deploy가 자체 실행 환경에서skaffold verify
명령어를 실행합니다.Skaffold는
skaffold.yaml
의verify
스탠자에 지정된 하나 이상의 테스트를 호출하여 배포된 애플리케이션에 실행합니다.테스트 중 하나라도 실패하면 확인이 실패합니다.
확인에 실패했기 때문에 출시도 실패합니다.
확인 중에 배포가 실패하면 출시를 검사하여 이를 확인할 수 있습니다.
실패한 확인을 다시 시도할 수 있습니다.
확인에 사용되는 구성요소
출시 리소스에는 배포 확인을 지원하는 다음 객체가 포함됩니다.
단계
논리적으로 함께 그룹화된 출시의 작업 모음(예: 배포 또는 배포 및 확인)입니다.
작업
배포 또는 확인 등 출시에서 수행할 특정 작업입니다.
작업 실행
출시 리소스의 하위 요소인 작업 실행은 작업의 인스턴스입니다(예: 배포 시도).
Google Cloud Deploy 리소스에 대한 자세한 내용은 Google Cloud Deploy 서비스 아키텍처를 참조하세요.
배포 확인으로 생성된 알림
Google 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
)
다음은 clouddeploy-operations
주제에 게시되는 실패한 작업 실행에 대한 Pub/Sub 메시지의 예시입니다.
{
"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"
}
},
배포 확인을 위한 Google Cloud Deploy 구성
Google 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
이 구성에서는 prod
대상이 아닌 dev
대상에 대해 배포 확인이 사용 설정됩니다. verify: false
는 verify
속성 또는 전체 strategy
스탠자를 생략하는 것과 같습니다.
확인 작업은 자체 실행 환경 내에서 수행됩니다.
이 실행 환경은 RENDER
및 DEPLOY
에서와 마찬가지로 VERIFY
에 대해 구성할 수 있습니다.
배포 확인을 위한 Skaffold 구성
대상의 배포 확인을 사용 설정하려면 배포의 skaffold.yaml
구성 파일에 verify
스탠자가 있어야 합니다. 이러한 구성은 대상별로 다른 프로필을 사용하는 경우 특정 Skaffold 프로필에 대한 구성일 수 있습니다.
이 verify
스탠자는 확인(예: 통합 테스트)을 위해 실행할 컨테이너를 식별합니다.
다음은 verify
스탠자를 포함하는 skaffold.yaml
의 예시입니다.
apiVersion: skaffold/v3alpha1
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의 자리표시자일 뿐이며 사용 가능한 Google 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
로 변경됩니다.
확인 작업이 실패한 출시에서만 확인을 재시도할 수 있습니다.
사용 가능한 환경 변수
Google Cloud Deploy는 테스트에 사용할 수 있는 VERIFY
실행 환경에서 다음 환경 변수를 제공하고 채웁니다.
TARGET_TYPE
대상의 특정 런타임 유형입니다.
GKE
,ANTHOS
또는RUN
입니다.GKE_CLUSTER
GKE
유형의 대상의 경우 Google Kubernetes Engine 클러스터의 완전히 지정된 리소스 이름입니다(예:projects/p/locations/us-central1/clusters/dev
).ANTHOS_MEMBERSHIP
ANTHOS
유형 대상의 경우 Anthos 멤버십의 완전하게 지정된 리소스 이름입니다.CLOUD_RUN_LOCATION
RUN
유형 대상의 경우 Cloud Run 서비스가 배포된 리전입니다.CLOUD_RUN_PROJECT
RUN
유형 대상의 경우 Cloud Run 서비스가 생성된 프로젝트입니다.CLOUD_RUN_SERVICE_URLS
RUN
유형 대상의 경우 최종 사용자가 서비스에 액세스하는 데 사용할 URL 또는 쉼표로 구분된 URL 목록입니다. Google Cloud 콘솔의 해당 서비스에 대한 Cloud Run 서비스 세부정보에서 이를 확인할 수 있습니다.