배포 확인하기

이 문서에서는 Cloud Deploy 배포를 확인하는 방법을 설명합니다.

Cloud Deploy 및 Skaffold를 구성하여 대상에 배포한 애플리케이션이 올바르게 작동하는지 확인할 수 있습니다. 확인은 자체 테스트 이미지를 사용하여 이루어지며 배포가 완료된 후 이러한 테스트를 실행하도록 Cloud Deploy 및 Skaffold를 구성합니다.

기본적으로 배포 확인은 Cloud Deploy 실행 환경에서 실행되지만 애플리케이션이 실행되는 동일한 클러스터에서 실행되도록 구성할 수도 있습니다.

배포 확인 작동 방식

  1. 확인을 위해 Skaffold를 구성합니다.

    이 구성은 테스트를 실행하는 데 사용할 컨테이너 이미지와 해당 컨테이너 이미지에서 실행할 특정 명령어(예: 스크립트)를 식별합니다.

  2. 배포를 확인하기 위해 배포 파이프라인에 하나 이상의 대상을 구성합니다.

    이 구성은 해당 대상에 배포된 워크로드의 확인을 사용 설정합니다.

  3. 출시가 배포되면(skaffold apply) Cloud Deploy가 Cloud Deploy 실행 환경에서 skaffold verify 명령어를 실행합니다.

    Google Kubernetes Engine 및 GKE Enterprise에 배포하는 경우 애플리케이션 컨테이너가 실행되는 동일한 클러스터에서 확인 컨테이너를 선택적으로 실행할 수 있습니다.

  4. Skaffold는 skaffold.yamlverify 스탠자에 지정된 하나 이상의 테스트를 호출하여 배포된 애플리케이션에 실행합니다.

  5. 실행된 테스트의 성공 또는 실패는 확인의 성공 또는 실패를 나타냅니다.

    • 확인 성공은 실행된 컨테이너의 종료 코드에 따라 결정됩니다.

      0은 성공을 나타냅니다. 0이 아닌 종료 코드는 실패를 나타냅니다. 원하는 확인 결과를 생성하려면 컨테이너가 적절한 종료 코드로 종료되는지 확인합니다. 확인의 일환으로 컨테이너가 두 개 이상 실행되는 경우 확인이 성공하려면 모두 성공해야 합니다.

    • 확인에 실패하면 출시도 실패합니다.

    • 확인 중에 배포가 실패하면 출시를 검사하여 이를 확인할 수 있습니다.

      확인 상태를 포함하여 출시를 위한 Google Cloud 콘솔의 세부정보

  6. 실패한 확인을 무시하거나 다시 시도할 수 있습니다.

    진행 중인 확인 작업을 종료할 수도 있습니다.

확인에 사용되는 구성요소

출시 리소스에는 배포 확인을 지원하는 다음 객체가 포함됩니다.

  • 단계

    논리적으로 함께 그룹화된 출시의 작업 모음(예: 배포 또는 배포 및 확인)입니다.

  • 작업

    배포 또는 확인 등 출시에서 수행할 특정 작업입니다.

  • 작업 실행

    출시 리소스의 하위 요소인 작업 실행은 배포 시도와 같은 작업의 인스턴스입니다.

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)

다음은 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"
    }
  },

배포 확인을 위해 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

이 구성에서는 prod 대상이 아닌 dev 대상에 대해 배포 확인이 사용 설정됩니다. verify: falseverify 속성 또는 전체 strategy 스탠자를 생략하는 것과 같습니다.

확인 작업은 자체 실행 환경 내에서 수행됩니다. 이 실행 환경을 VERIFY에 대해 RENDERDEPLOY와 동일한 방식으로 구성할 수 있습니다.

배포 확인을 위한 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의 자리표시자일 뿐이며 사용 가능한 Cloud Deploy 환경 변수가 아닙니다.

애플리케이션 클러스터에서 확인 컨테이너 실행

기본적으로 배포 확인은 Cloud Deploy 실행 환경에서 실행됩니다. 또한 애플리케이션이 실행되는 동일한 클러스터에서 확인 컨테이너를 실행하도록 Skaffold를 구성할 수 있습니다. skaffold.yaml에서 클러스터 내 확인을 구성하고 대상에 대한 확인을 사용 설정하면 대상의 클러스터에서 확인이 자동으로 실행됩니다.

이 기능은 GKE 및 GKE Enterprise 배포에서만 사용할 수 있으며 Cloud Run에는 사용할 수 없습니다. Cloud Run에 대한 배포는 Cloud Deploy 실행 환경에서만 확인을 실행할 수 있습니다.

클러스터 내 확인을 위해서는 Skaffold 버전 2.3 이상이 필요합니다.

클러스터에서 확인 컨테이너를 실행하려면 특정 확인 컨테이너의 verify 스탠자 내에 skaffold.yaml 구성 파일에 executionMode.kubernetesCluster 스탠자를 포함합니다.

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 서비스의 이름입니다.

  • CLOUD_RUN_SERVICE_URLS

    RUN 유형 대상의 경우 최종 사용자가 서비스에 액세스하는 데 사용할 URL 또는 쉼표로 구분된 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

    확인 작업을 포함하는 출시의 단계입니다.