커스텀 대상 유형 정의 및 사용

이 빠른 시작에서는 Cloud Deploy를 사용하여 커스텀 대상 유형을 만든 후 해당 유형의 커스텀 대상에 배포하는 방법을 보여줍니다.

이 빠른 시작에서 다루는 작업은 다음과 같습니다.

  1. Skaffold 구성을 만듭니다.

    Skaffold 구성 파일은 타겟의 동작을 구성하는 곳입니다. 이 구성은 컨테이너 이미지와 이러한 이미지에서 실행할 셸 명령어를 참조합니다. 이러한 명령어는 렌더링 및 배포 작업의 작업입니다.

  2. 커스텀 대상 유형과 이 유형을 참조하는 대상을 정의합니다.

  3. Cloud Deploy 배포 파이프라인을 정의합니다.

    이 파이프라인에는 한 단계만 포함되며 대상 하나만 사용됩니다. 이 단계에서는 구성한 대상을 참조합니다.

  4. 출시 버전을 만들면 출시가 자동으로 생성되어 커스텀 렌더링 및 배포 작업이 수행됩니다.

    이 출시 버전 및 출시의 일환으로 Skaffold 구성에 정의된 렌더링 및 배포 작업이 모두 실행됩니다.

  5. 맞춤 작업의 결과를 확인합니다. 여기에는 Cloud Storage에 업로드된 렌더링된 구성 파일, 이 파일에 쓰여진 문자열, 작업 상태가 포함된 결과 파일이 포함됩니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Google Cloud CLI가 이미 설치되어 있으면 최신 버전으로 실행 중인지 확인합니다.

    gcloud components update
    
  13. 기본 Compute Engine 서비스 계정에 충분한 권한이 있는지 확인합니다.

    서비스 계정에 이미 필요한 권한이 있을 수 있습니다. 기본 서비스 계정의 자동 역할 부여를 중지한 프로젝트를 위해 포함된 단계입니다.

    1. 먼저 clouddeploy.jobRunner 역할을 추가합니다.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      
    2. 특정 런타임의 개발자 역할을 추가합니다.
    3. 런타임에 배포할 수 있는 actAs 권한이 포함된 iam.serviceAccountUser 역할을 추가합니다.
      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

Skaffold 구성 준비

Cloud Deploy는 Skaffold를 사용하여 배포할 항목의 세부정보와 대상에 배포하는 방법을 제공합니다.

이 빠른 시작에서는 맞춤 대상 유형의 렌더링 및 배포 작업을 나타내는 맞춤 작업을 정의하는 skaffold.yaml 파일을 만듭니다.

이 빠른 시작에 제공된 커스텀 작업은 실제로 애플리케이션을 런타임에 배포하지 않습니다. 렌더링 작업과 배포 작업 모두 결과 파일을 Cloud Storage에 업로드하여 Cloud Deploy와 사용자 정의 렌더링 및 배포 간의 맞춤 대상 계약을 충족합니다.

  1. 터미널 창을 엽니다.

  2. 새 디렉터리를 만들어 해당 디렉터리로 이동합니다.

    mkdir custom-target-quickstart
    cd custom-target-quickstart
    
  3. 다음 콘텐츠로 skaffold.yaml라는 파일을 만듭니다.

    apiVersion: skaffold/v4beta7
    kind: Config
    customActions:
    - name: custom-render
      containers:
      - name: render
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018
        command: ['/bin/bash']
        args:
          - '-c'
          - |-
            echo "Sample manifest rendered content" > manifest.txt
            gcloud storage cp manifest.txt $CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt
            echo {\"resultStatus\": \"SUCCEEDED\", \"manifestFile\": \"$CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt\"} > results.json
            gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
    - name: custom-deploy
      containers:
      - name: deploy
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018
        command: ['/bin/bash']
        args:
          - '-c'
          - |-
            echo {\"resultStatus\": \"SUCCEEDED\"} > results.json
            gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
    

    이 파일에는 맞춤 렌더링 작업과 맞춤 배포 작업을 정의하는 customActions: 스탠자가 포함되어 있습니다. 이러한 각 맞춤 작업은 실행할 컨테이너 이미지와 해당 컨테이너에서 실행할 명령어를 참조합니다.

    이 구성 파일에 대한 자세한 내용은 skaffold.yaml 참조를 확인하세요.

배포 파이프라인, 커스텀 대상 유형, 대상 만들기

전달 파이프라인, 커스텀 대상 유형, 대상을 하나의 파일 또는 별도의 파일로 정의할 수 있습니다. 이 빠른 시작에서는 세 가지 모두를 포함하는 단일 파일을 만듭니다.

  1. custom-target-quickstart 디렉터리에서 다음 콘텐츠가 포함된 새 파일 clouddeploy.yaml을 만듭니다.

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: custom-targets-pipeline
    serialPipeline:
      stages:
      - targetId: sample-env
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: sample-env
    customTarget:
      customTargetType: basic-custom-target
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: CustomTargetType
    metadata:
      name: basic-custom-target
    customActions:
      renderAction: custom-render
      deployAction: custom-deploy
    
  2. Cloud Deploy 서비스에 파이프라인 및 대상을 등록합니다.

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

    이제 하나의 대상이 포함된 배포 파이프라인이 있습니다. 커스텀 대상 유형을 사용하는 대상이며 이 파이프라인은 애플리케이션을 런타임에 배포하지 않습니다.

  3. 파이프라인 및 대상을 확인합니다.

    Google Cloud 콘솔에서 Cloud Deploy 배포 파이프라인 페이지로 이동하여 사용 가능한 배포 파이프라인 목록을 확인합니다.

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

    방금 만든 배포 파이프라인이 표시되고 대상 하나가 대상 열에 나열됩니다.

    파이프라인을 보여주는 Google Cloud 콘솔의 배포 파이프라인 페이지

출시 버전 만들기

출시 버전은 배포되는 변경사항을 나타내는 중앙 Cloud Deploy 리소스입니다. 배포 파이프라인은 해당 출시의 수명 주기를 정의합니다. 수명 주기에 대한 자세한 내용은 Cloud Deploy 서비스 아키텍처를 참조하세요.

custom-target-quickstart 디렉터리에서 다음 명령어를 실행하여 배포할 맞춤 작업을 나타내는 release 리소스를 만듭니다.

gcloud deploy releases create test-release-001 \
  --project=PROJECT_ID \
  --region=us-central1 \
  --delivery-pipeline=custom-targets-pipeline

모든 출시 버전과 마찬가지로(--disable-initial-rollout을 포함하지 않는 경우) Cloud Deploy도 자동으로 출시 리소스를 만듭니다. 렌더링 및 배포를 비롯한 출시의 모든 단계가 실행됩니다.

Google Cloud 콘솔에서 결과 보기

몇 분 후 배포가 완료됩니다. 이 경우 두 맞춤 작업은 문자열을 파일로 에코하고 파일을 Cloud Storage에 업로드하는 명령이므로 타겟 런타임에 아무것도 배포되지 않습니다.

하지만 파일과 해당 파일의 문자열은 볼 수 있습니다.

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

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

  2. 배포 파이프라인 이름(custom-targets-pipeline)을 클릭합니다.

    파이프라인 시각화에 앱의 배포 상태가 표시됩니다. 파이프라인에는 단계가 하나뿐이므로 시각화에 노드가 하나만 표시됩니다.

    성공을 보여주는 배포 파이프라인 시각화

    출시 버전은 배포 파이프라인 세부정보출시 탭에 표시됩니다.

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

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

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

  5. 대상 아티팩트에서 아티팩트 보기 링크를 클릭합니다.

    렌더링된 매니페스트 파일이 표시됩니다. 이 경우 파일은 skaffold.yaml 구성 파일에서 정의한 커스텀 렌더링 작업의 출력이며 'Sample manifest rendered content' 문자열이 포함됩니다.

    커스텀 렌더링 작업의 출력

  6. 이 출시 버전에서 만든 Cloud Storage 버킷을 찾습니다.

    Cloud Storage 브라우저 페이지 열기

    이 출시 버전에 대해 생성된 2개의 버킷을 보여주는 버킷 페이지가 표시됩니다. 하나의 버킷에는 배포 파이프라인 구성 파일과 렌더링된 skaffold.yaml이 있습니다. 다른 하나는 커스텀 작업이 생성하도록 구성된 출력 파일을 포함합니다.

  7. 이름이 us-central1.deploy-artifacts로 시작하는 버킷을 클릭합니다.

    Cloud Storage 버킷 목록

  8. 이름이 custom-targets-pipeline-으로 시작하는 폴더를 클릭한 다음 test-release-001 폴더를 클릭합니다.

  9. 이름이 출시 이름인 폴더를 클릭합니다. 이 이름은 test-release-001-to-sample-env-0001여야 합니다.

  10. 표시된 폴더(UUID)를 클릭한 다음 custom-output 폴더를 클릭합니다.

  11. results.json을 클릭한 다음 인증된 URL 필드에서 하이퍼링크된 URL을 클릭합니다.

    이 파일에는 skaffold.yaml에서 custom-deploy 작업의 출력으로 구성한 문자열이 포함됩니다.

    커스텀 작업 배포의 출력

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

  1. 배포 파이프라인, 대상, 출시 버전 및 출시를 삭제합니다.

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  2. Cloud Deploy에서 만든 두 개의 Cloud Storage 버킷을 모두 삭제합니다.

    Cloud Storage 브라우저 페이지 열기

빠른 시작을 완료하셨습니다.

다음 단계