CI 시스템과 Cloud Deploy 통합

이 문서에서는 지속적 통합(CI) 시스템에서 Cloud Deploy 전달 파이프라인을 호출하는 방법을 설명합니다.

Cloud Deploy를 CI 시스템과 통합하려면 Cloud Deploy gcloud CLI를 호출하면 됩니다. 이 호출은 애플리케이션이 배포 준비된 CI 파이프라인 지점에서 수행됩니다.

시작하기 전에

이 페이지에서는 다음 조건이 이미 충족되었다고 가정합니다.

CI 파이프라인에서 Cloud Deploy 호출

다음 명령어는 새 출시 버전을 만들어 배포 파이프라인 인스턴스를 호출합니다.

gcloud deploy releases create RELEASE_NAME \
  --delivery-pipeline=PIPELINE_NAME \
  --region=REGION \
  --annotations=[KEY=VALUE,...] \
  --images=[IMAGE_LIST]

각 항목의 의미는 다음과 같습니다.

  • RELEASE_NAME

    이 출시에 지정하는 이름입니다. 이 값은 필수 항목입니다.

    '$DATE', '$TIME' 또는 둘 모두를 포함하여 동적 출시 버전 이름을 지정할 수 있습니다. 예를 들어 이 명령어를 오후 3시 7분(UTC)에 호출하면 'rel-$TIME'rel-1507로 해석됩니다. '$DATE''$TIME'은 작은따옴표로 묶어야 합니다.

  • PIPELINE_NAME

    등록된 배포 파이프라인의 이름입니다. 이 값은 필수 항목입니다.

  • REGION

    이 출시 버전을 만들려는 리전입니다. 리전은 궁극적으로 애플리케이션을 배포하는 리전과 동일하지 않아도 됩니다.

  • [KEY=VALUE,...]

    키-값 쌍의 형식으로 출시 버전에 적용할 하나 이상의 주석 목록입니다(선택사항).

    주석을 사용하여 출시 버전 출처를 추적할 수 있습니다. 예를 들면 commitId=0065ca0와 같은 주석을 전달합니다. 출시 버전의 모든 주석은 출시 버전을 list 또는 get할 때 반환되며 Google Cloud 콘솔에서 출시 버전과 함께 표시되므로 출시 버전 출처도 확인할 수 있습니다.

  • [IMAGE_LIST]

    이미지 이름에서 이미지 경로로의 치환을 쉼표로 구분한 목록입니다. 예를 들면 --images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18입니다.

    Skaffold 빌드 아티팩트 출력 파일을 식별하는 --build-artifacts을 전달하면 이 값이 필요하지 않습니다.

    Cloud Deploy가 매니페스트를 렌더링할 때 렌더링되지 않은 매니페스트의 이미지 이름은 렌더링된 매니페스트의 전체 이미지 참조로 바뀝니다. 즉, 이 예시에서 image1은 렌더링되지 않은 매니페스트에 있으며 렌더링된 매니페스트에서 path/to/image1:v1@sha256:45db24로 바뀝니다.

직접 이미지 참조 사용 예시

다음 명령어는 빌드 아티팩트 파일 대신 이미지 참조를 직접 전달하여 새 출시 버전을 생성합니다.

gcloud deploy releases create my-release \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

이 예시에서 my-release은 출시 버전 이름입니다. 날짜 또는 시간을 기준으로 출시 버전 이름을 생성하려면 '$DATE' 또는 'TIME' 또는 둘 다를 포함하면 됩니다. 시간은 명령어를 호출하는 머신의 UTC 시간입니다. '$DATE''$TIME'은 작은따옴표로 묶어야 합니다.

예를 들면 다음과 같습니다.

gcloud deploy releases create rel-'$DATE'-'$TIME' \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

이 예시에서 명령어는 rel- 프리픽스와 날짜 및 시간으로 출시 버전 이름을 생성합니다(예: rel-20220131-1507).

출시 버전 이름에 Git SHA를 사용하는 것도 일반적입니다. 이 문서에서 Cloud Build 및 Docker 예시를 참조하세요.

빌드 아티팩트와 이미지 비교

gcloud deploy releases create 명령어에서 이미지 참조 집합 또는 빌드 아티팩트 파일 참조를 전달할 수 있습니다.

  • --images=[NAME=TAG,...]를 사용하여 하나 이상의 개별 컨테이너 이미지를 참조합니다.

    이 값은 개별 이미지 이름에서 이미지 전체 경로로의 치환 모음에 대한 참조입니다. 예를 들면 다음과 같습니다.

    gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24

  • --build-artifacts=를 사용하여 Skaffold 빌드 아티팩트 출력 파일을 가리키도록 설정합니다.

Cloud Build 예시, 빌드 아티팩트 파일 전달

Docker 빌드 예시

다음 YAML 파일은 Docker 빌드 이미지 푸시를 위한 Cloud Build를 보여주고 궁극적으로 Cloud Deploy 출시 버전을 만듭니다.

이 예시에서는 이미지를 빌드하여 아티팩트 저장소에 푸시하고, 명령어를 구성하여 짧은 커밋 SHA 기반의 출시 버전 이름으로 출시 버전을 만듭니다. 이 예시는 $COMMIT_SHA 변수에 의존하므로 Cloud Build SCM 트리거로 사용되어야 합니다.

이 예시는 소스 저장소의 커밋 해시와 동일한 Docker 태그로 이미지를 푸시합니다. 그런 다음 출시 명령어 인수에서 동일한 커밋 해시를 Docker 태그로 참조합니다.

steps:
# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
    ]

이 예시의 끝에 있는 이미지 이름에서 "--images", "IMAGE_NAME=가 렌더링된 매니페스트에서 전체 이미지 참조로 대체됩니다.

Skaffold를 사용한 Cloud Build 구성 예시

다음 YAML 파일은 날짜를 기준으로 출시 버전 이름을 사용하여 출시 버전을 만들기 위해 Cloud Deploy 호출을 포함하는 Cloud Build 빌드 구성의 내용입니다. 또한 이 예시에서는 빌드에 사용된 Skaffold를 보여줍니다.

steps:
- name: gcr.io/k8s-skaffold/skaffold
  args:
    - skaffold
    - build
    - '--interactive=false'
    - '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--build-artifacts", "/workspace/artifacts.json"
    ]

Cloud Deploy에 GitHub 작업 연결

지속적 통합 또는 다른 소프트웨어 배포와 관련된 활동에 GitHub Actions를 사용하는 경우, 지속적 배포를 위해 create-cloud-deploy-release라는 Action을 사용하여 Cloud Deploy에 연결할 수 있습니다.

Cloud Deploy에 GitLab 연결

지속적 통합에 GitLab을 사용하는 경우, GitLab Cloud Deploy 구성 요소 create-cloud-deploy-release를 사용하여 Cloud Deploy 출시 버전을 만들 수 있습니다.

Google Cloud에서 GitLab을 사용하는 방법을 다루는 엔드 투 엔드 튜토리얼을 사용해 볼 수도 있습니다.

주석을 사용하여 출시 버전 출처 추적

--annotations= 플래그를 사용하면 이 명령어가 생성하는 출시 버전에 임의의 키-값 쌍을 하나 이상 적용할 수 있습니다. 이 플래그를 gcloud deploy releases create 명령어에 추가하면 됩니다.

예를 들어 다음 키-값 쌍을 사용하여 배포할 이미지의 소스를 추적할 수 있습니다.

예를 들면 다음과 같습니다.

gcloud deploy releases create web-app-1029rel \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --annotations=commitId=0065ca0,author=user@company.com \
  --images=image1=path/to/image1:v1@sha256:45db24

예를 들어 값이 pull 요청을 가리키는 URL인 주석을 만들 수도 있습니다. 자세한 내용은 Cloud Deploy에 라벨 및 주석 사용을 참조하세요.