커스텀 대상 만들기

이 문서에서는 커스텀 Cloud Deploy 대상 유형을 만들고 Cloud Build 배포 파이프라인에서 해당 커스텀 대상 유형을 대상으로 사용하는 방법을 설명합니다.

다음은 커스텀 대상 유형을 만들고 배포 파이프라인에 사용하기 위한 대략적인 프로세스입니다.

  1. 커스텀 대상에 배포할 기능이 포함되고 커스텀 대상 유형에 대한 Cloud Deploy 요구사항을 충족하는 컨테이너화된 애플리케이션이나 애플리케이션을 만듭니다.

  2. skaffold.yaml에서 컨테이너를 참조하고 실행할 명령어를 지정하는 커스텀 작업을 정의합니다.

  3. 이전 단계의 커스텀 작업을 참조하는 CustomTargetType 정의를 만들고 이를 Cloud Deploy 리소스로 등록합니다.

  4. 새 커스텀 대상 유형을 식별하는 customTarget 속성을 사용하여 새 대상을 정의합니다.

  5. 배포 파이프라인 진행 상황에서 해당 대상을 참조합니다.

  6. 출시 버전을 만듭니다.

이 문서의 나머지 부분에서 이러한 각 단계를 자세히 설명합니다.

컨테이너화된 애플리케이션 만들기

커스텀 대상에 배포하는 기능은 컨테이너화된 애플리케이션에서 정의되며 skaffold.yaml 파일에서 이 애플리케이션을 참조하여 Cloud Deploy에 제공합니다. 배포 파이프라인에 커스텀 대상 유형을 사용하는 대상이 포함되면 Cloud Deploy는 Skaffold에서 커스텀 대상 유형에 정의된 커스텀 작업 컨테이너를 호출하여 정의한 렌더링 및 배포 작업을 실행합니다.

개발자가 애플리케이션 동작을 결정합니다. 그러나 Cloud Deploy에서 제공하는 입력 환경 변수를 사용해야 하며 필수 출력을 반환해야 합니다.

대부분의 경우 생성된 커스텀 대상 유형마다 렌더링 작업용 컨테이너 하나와 배포 작업용 컨테이너 하나를 만듭니다. 렌더링 작업은 선택사항이지만 이 작업을 제공하지 않으면 Cloud Deploy에서 기본 skaffold render를 사용합니다.

Skaffold에서 커스텀 작업 정의

커스텀 작업 컨테이너 이미지를 사용하면 skaffold.yaml 구성 파일에서 이러한 이미지를 참조합니다.

customActions 스탠자에서 커스텀 대상에 대한 각 커스텀 작업을 구성합니다. 모든 커스텀 대상 유형에 대해 Skaffold에서 렌더링용 커스텀 작업과 배포용 커스텀 작업을 만듭니다. CustomTargetType 정의는 렌더링에 사용되는 커스텀 작업과 배포에 사용되는 작업을 식별합니다.

다음은 skaffold.yaml의 커스텀 렌더링 및 배포 작업 구성입니다.

apiVersion: skaffold/v4beta7
kind: Config
customActions:
# custom render action
- name:
  containers:
  - name:
    image:
    command:
    args:
# custom deploy action
- name:
  containers:
  - name:
    image:
    command:
    args:

이 Skaffold 구성은 다음과 같습니다.

  • customActions.name

    커스텀 렌더링이나 배포 작업을 위한 임의의 이름입니다. CustomTargetType 정의는 renderAction 속성이나 deployAction 속성에서 이 이름을 참조합니다.

  • containers 스탠자에는 참조와 해당 컨테이너를 실행하는 명령어가 포함됩니다.

    containers 스탠자는 컨테이너를 2개 이상 허용하지만 하나만 사용하는 것이 좋습니다.

  • customActions.containers.name

    이 작업에 사용하는 특정 컨테이너를 위한 임의의 이름입니다. 이 컨테이너 이름은 항상 SHA 자격을 갖추는 것이 좋습니다.

  • image

    컨테이너 이미지에 대한 경로입니다.

  • command

    컨테이너에서 실행할 명령어입니다.

  • args

    command에 대한 인수 컬렉션입니다.

customActions에 사용된 구성 속성에 대한 자세한 내용은 Skaffold YAML 참조를 확인하세요.

커스텀 대상 유형 정의

먼저 CustomTargetType 구성을 사용하여 커스텀 대상 유형을 만들어 커스텀 대상을 정의합니다. 배포 파이프라인 정의와 동일한 파일에서 또는 대상 정의를 사용하여 또는 별도의 파일에서 CustomTargetType을 만들 수 있습니다.

CustomTargetType 정의는 다음과 같습니다.

# Custom target type config (preview)
apiVersion: deploy.cloud.google.com/v1
kind: CustomTargetType
metadata:
  name: [CUSTOM_TARGET_TYPE_NAME]
  annotations:
  labels:
description:
customActions:
  renderAction: [RENDER_ACTION_NAME]
  deployAction: [DEPLOY_ACTION_NAME]
  includeSkaffoldModules:

장소

  • CUSTOM_TARGET_TYPE_NAME

    이 커스텀 대상 유형 정의에 지정하는 임의의 이름입니다. 이 이름은 정의하는 커스텀 대상 유형을 사용하는 모든 대상의 대상 정의에서 참조됩니다.

  • RENDER_ACTION_NAME

    커스텀 렌더링 작업 이름입니다. 이 값은 렌더링 작업용 skaffold.yaml에서 정의된 customAction.name입니다.

  • DEPLOY_ACTION_NAME

    커스텀 배포 작업 이름입니다. 이 값은 배포 작업용 skaffold.yaml에서 정의된 customAction.name입니다.

  • includeSkaffoldModules

    원격 Skaffold 구성을 사용하는 경우 사용할 선택적 스탠자입니다. 이 스탠자의 속성은 원격 Skaffold 구성 사용 섹션에 나와 있습니다.

원격 Skaffold 구성 사용

공개 Git 저장소, Cloud Storage 버킷 또는 Cloud Build 2세대 저장소에 Skaffold 구성을 저장하고 커스텀 대상 유형 정의에서 이러한 구성을 참조할 수 있습니다.

원격 Skaffold 구성을 사용하면 출시 시점에 제공하는 skaffold.yaml에서 커스텀 작업을 정의할 필요가 없습니다. 이를 통해 조직 전체에서 커스텀 작업을 공유할 수 있습니다.

원격 Skaffold 구성을 사용하려면 다음 안내를 따르세요.

  1. 커스텀 작업을 사용하여 Skaffold 구성을 만듭니다.

  2. Git 저장소나 Cloud Storage 버킷에 구성을 저장합니다.

  3. 커스텀 대상 유형 정의에서 customActions.includeSkaffoldModules 스탠자를 추가합니다.

  4. includeSkaffoldModules에서 다음을 지정합니다.

    • 필요한 경우 configs 요소를 하나 이상 사용합니다.

      - configs: ["name1", "name2"]

      configs 값은 포함할 각 Skaffold 구성의 metadata.name 속성과 일치하는 문자열 목록입니다. 이를 생략하면 Cloud Deploy는 지정된 경로의 모든 구성을 사용합니다.

    • googleCloudStorage, git 또는 googleCloudBuildRepo 스탠자 중 하나입니다.

      Cloud Storage의 경우:

      googleCloudStorage:
        source: PATH_TO_GCS_BUCKET
        path: FILENAME
      

      Git의 경우:

      git:
        repo: REPO_URL
        path: PATH_TO_FILE
        ref: BRANCH_NAME
      

      Cloud Build 저장소(2세대):

       googleCloudBuildRepo:
        repository: PATH_TO_GCB_REPO
        path: PATH_TO_FILE
        ref: BRANCH_NAME
      

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

      PATH_TO_GCS_BUCKET/*로 끝나는 Cloud Storage 디렉터리의 경로이며 Skaffold 구성이 저장됩니다. Skaffold는 이 디렉터리에 있는 모든 파일을 다운로드한 후 구성된 상대 경로를 기반으로 구성을 사용하여 관련 Skaffold 파일을 찾습니다.

      PATH_TO_GCB_REPO는 Skaffold 구성이 저장되는 Cloud Build 2세대 저장소의 경로입니다. 경로의 형식은 projects/{project}/locations/{location}/connections/{connection}/repositories/{repository}입니다. Skaffold는 이 디렉터리에 있는 모든 파일을 다운로드한 후 구성된 상대 경로를 기반으로 Skaffold 파일을 찾습니다.

      FILENAME은 Skaffold 구성이 포함된 파일의 이름입니다. 이 path: 속성은 선택사항입니다. 지정하지 않으면 Cloud Deploy는 skaffold.yaml을 가정합니다. skaffold.yaml이 없거나 지정한 파일 이름이 없으면 출시 버전 만들기가 실패합니다.

      REPO_URL은 Git 저장소의 URL입니다.

      PATH_TO_FILE은 Skaffold 구성이 포함된 파일의 저장소 경로입니다.

      BRANCH_NAME은 Skaffold 구성을 사용할 브랜치(예: main)의 이름입니다.

다음 커스텀 대상 유형 YAML은 Cloud Storage 버킷에 저장된 Skaffold 구성을 가리키는 includeSkaffoldModules 스탠자가 포함된 customActions 스탠자입니다.

customActions:
  renderAction: my-custom-action
  deployAction: my-custom-action
  includeSkaffoldModules:
    - configs: ["myConfig"]
      googleCloudStorage:
        source: "gs://my-custom-target-bucket/my-custom/*"
        path: "skaffold.yaml

다음 YAML은 표시된 커스텀 작업에서 참조하는 Skaffold 구성입니다.

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: myConfig
customActions:
  - name: my-custom-action
    containers:
      - name: my-custom-container
        image: us-east1-docker.pkg.dev/abcdefg/foldername/myimage@sha256:c56fcf6e0a7637ddf0df3d56a0dd23bfce03ceca06a6fc527b0e0e7430e6e9f9

커스텀 대상 유형 등록

CustomTargetType을 구성한 후 gcloud deploy apply 명령어를 실행하여 Google Cloud 프로젝트에 CustomTargetType 리소스를 등록합니다.

gcloud deploy apply --file=[FILE] --project=[PROJECT] --region=[REGION]

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

FILE은 이 커스텀 대상 유형을 정의한 파일의 이름입니다.

PROJECT는 이 리소스를 만들 Google Cloud 프로젝트입니다. CustomTargetType은 이를 참조하는 Target 리소스와 동일한 프로젝트에 있어야 합니다. 프로젝트를 Google Cloud CLI의 기본 프로젝트로 설정한 경우에는 프로젝트를 지정하지 않아도 됩니다.

REGION은 이 리소스를 만들 리전(예: us-centra1)입니다. CustomTargetType은 이를 참조하는 Target 리소스와 동일한 리전에 있어야 합니다. 리전을 gcloud CLI의 기본 리전으로 설정한 경우에는 리전을 지정하지 않아도 됩니다.

CustomTargetType이 Cloud Deploy 리소스로 생성되었으므로 이제 Target 정의에서 이를 사용하여 커스텀 대상을 만들 수 있습니다.

CustomTargetType 정의에 대한 자세한 내용은 Cloud Deploy 구성 스키마 참조를 확인하세요.

대상 정의

지원되는 대상 유형의 대상 정의와 커스텀 대상 정의 간의 유일한 차이점은 커스텀 대상 정의에 customTarget 스탠자가 포함되어 있다는 점입니다. customTarget 구문은 다음과 같습니다.

customTarget:
  customTargetType: [CUSTOM_TARGET_TYPE_NAME]

여기서 CUSTOM_TARGET_TYPE_NAME커스텀 대상 유형 구성에 정의된 name 속성의 값입니다.

배포 파이프라인에 대상 추가

지원되는 대상 유형을 사용할 때와 마찬가지로 배포파이프라인에서 커스텀 대상을 사용할 수 있습니다. 즉, 지원되는 대상 유형의 대상과 커스텀 대상 간 배포 파이프라인 진행에는 차이가 없습니다.

배포 파이프라인의 모든 대상은 같은 대상 유형을 사용해야 합니다. 예를 들어 배포 파이프라인에는 Google Kubernetes Engine에 배포되는 일부 대상과 일부 커스텀 대상이 있을 수 없습니다.

지원되는 대상 유형과 마찬가지로 파이프라인 단계에 배포 매개변수를 포함할 수 있습니다.

출시 버전 만들기

커스텀 대상 유형이 완전히 정의되고 해당 유형을 사용하도록 생성된 대상이 있으면 일반적인 방법으로 출시 버전을 만들 수 있습니다.

gcloud deploy releases create [RELEASE_NAME] \
  --project=[PROJECT_NAME] \
  --region=[REGION] \
  --delivery-pipeline=[PIPELINE_NAME]

출시 버전을 만들 때 출시 버전, 대상 또는 배포 파이프라인에 구성된 배포 매개변수 처리를 포함하여 배포 파이프라인의 대상마다 커스텀 렌더링 작업이 실행됩니다. Cloud Deploy는 커스텀 렌더링 컨테이너에 배포 매개변수를 입력으로 제공합니다.

커스텀 대상 출력 보기

커스텀 작업이 커스텀 대상의 요구사항을 충족하면 Google Cloud 콘솔을 사용하여 렌더링된 아티팩트를 볼 수 있습니다.

커스텀 렌더링 작업의 출력을 보려면 다음 단계를 수행합니다.

  1. Google Cloud 콘솔에서 Cloud Deploy 배포 파이프라인 페이지로 이동하여 배포 파이프라인을 봅니다.

    배포 파이프라인 페이지 열기

  2. 배포 파이프라인 이름을 클릭합니다.

    파이프라인 시각화에 앱 배포 상태가 표시되며 출시 버전은 배포 파이프라인 세부정보출시 탭에 나열됩니다.

  3. 출시 이름을 클릭합니다.

    출시 세부정보 페이지가 표시됩니다.

  4. 아티팩트 탭을 클릭합니다.

  5. 대상 아티팩트에서 아티팩트 보기 옆에 있는 화살표를 클릭합니다.

    커스텀 렌더기에서 생성한 렌더링된 skaffold.yaml 및 렌더링된 매니페스트 파일 등 렌더링된 아티팩트가 나열됩니다. 각 아티팩트 옆에 있는 스토리지 위치 링크를 클릭하면 Cloud Storage 버킷으로 이동하여 해당 파일을 볼 수 있습니다.

    또한 아티팩트 보기 링크를 클릭하면 출시 버전 검사기를 사용하여 출시 버전, 대상 또는 단계별로 이러한 파일을 볼 수 있습니다.

다음 단계