Cloud Deploy에서 출시 프로모션 및 출시 진행 자동화
이 페이지에서는 Cloud Deploy를 사용해서 대상에 대해 출시를 자동으로 프로모션하고 다음 단계로 출시를 진행하는 방법을 보여줍니다.
이 빠른 시작에서 다루는 작업은 다음과 같습니다.
GKE 클러스터 2개 또는 Cloud Run 서비스 2개를 만듭니다.
Skaffold 구성과 Kubernetes 매니페스트 또는 Cloud Run 서비스 정의를 만듭니다.
Cloud Deploy 배포 파이프라인 및 배포 대상을 정의합니다.
이 파이프라인은
dev및staging에 해당하는 2개 대상에 배포됩니다. 그리고staging대상에는 카나리아 배포 전략이 사용됩니다.다음 두 가지 자동화 규칙을 정의합니다.
dev출시가 성공하면staging대상에 출시를 프로모션하는 자동화.canary-25` 단계가 성공적으로 완료되면stable단계로 출시를 진행하는 자동화.
dev대상에 자동으로 배포되는 출시를 만들어 배포 파이프라인을 인스턴스화합니다.Google Cloud 콘솔에서 배포 파이프라인과 출시 버전을 확인합니다.
자동 프로모션으로 인해 이 출시가
staging으로 자동 승격됩니다.staging대상에 카나리아 배포 전략이 사용되고 이것이 해당 런타임에 대한 첫 번째 배포이기 때문에canary-25단계를 건너뜁니다. 카나리아 단계를 처음 건너뛰는 이유에 대한 자세한 내용은 단계를 건너뛰는 이유를 참조하세요.자동화된 단계 진행으로 인해 출시가
stable단계로 진행됩니다.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init - 기본 Compute Engine 서비스 계정에 충분한 권한이 있는지 확인합니다.
서비스 계정에 이미 필요한 권한이 있을 수 있습니다. 기본 서비스 계정의 자동 역할 부여를 중지한 프로젝트를 위해 포함된 단계입니다.
- 먼저
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" clouddeploy.releaser역할 추가: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.releaser"- 특정 런타임의 개발자 역할을 추가합니다.
- GKE의 경우:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer" - Cloud Run의 경우:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer" -
런타임에 배포할 기본 서비스 계정에 대해
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 -
기본 서비스 계정을 사용하기 위해 자신에 대한
actAs권한을 포함하여iam.serviceAccountUser역할을 추가합니다.gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=user:YOUR_EMAIL_ADDRESS \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID여기에서 YOUR_EMAIL_ADDRESS는 Google Cloud에 액세스하는 데 사용되는 이메일 주소입니다.
- 먼저
CLI가 이미 설치되어 있으면 최신 버전으로 실행 중인지 확인합니다.
gcloud components update
런타임 환경 만들기
Cloud Run에 배포하는 경우 이 명령어를 건너뛸 수 있습니다.
GKE의 경우 기본 설정으로 automation-quickstart-cluster-dev 및 automation-quickstart-cluster-staging라는 클러스터 두 개를 만듭니다. 클러스터의 Kubernetes API 엔드포인트는 공개 인터넷에서 네트워크에 연결할 수 있어야 합니다. GKE 클러스터는 기본적으로 외부에서 액세스할 수 있습니다.
gcloud container clusters create-auto automation-quickstart-cluster-dev \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto automation-quickstart-cluster-staging \
--project=PROJECT_ID \
--region=us-central1
프로젝트 번호를 가져옵니다.
기본 서비스 계정을 식별하려면 프로젝트 번호가 필요합니다. 이 작업은 자동화 리소스를 구성하는 데 필요합니다.
다음 명령어를 실행하여 프로젝트 번호를 가져옵니다.
gcloud projects describe PROJECT_ID --format="value(projectNumber)"명령줄 출력에서 프로젝트 번호를 복사하여 여기에 붙여넣습니다.
이를 명령어로 실행할 필요가 없습니다. 여기에 붙여넣으면 이 빠른 시작의 뒷부분에 있는 자동화 구성의 서비스 계정 참조가 채워집니다.
PROJECT_NUMBER
Skaffold 구성 및 애플리케이션 매니페스트 준비
Cloud Deploy는 Skaffold를 사용하여 배포할 항목의 세부정보와 별도의 대상에 적절하게 배포하는 방법을 제공합니다.
이 빠른 시작에서는 샘플 앱을 배포하는 데 사용할 애플리케이션 매니페스트를 식별하는 skaffold.yaml 파일을 만듭니다.
터미널 창을 엽니다.
새 디렉터리를 만들어 해당 디렉터리로 이동합니다.
GKE
mkdir deploy-automation-gke-quickstart cd deploy-automation-gke-quickstartCloud Run
mkdir deploy-automation-run-quickstart cd deploy-automation-run-quickstart다음 콘텐츠로
skaffold.yaml라는 파일을 만듭니다.GKE
apiVersion: skaffold/v4beta7 kind: Config metadata: name: gke-automation manifests: rawYaml: - k8s-deployment.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config metadata: name: run-automation profiles: - name: dev manifests: rawYaml: - run-dev.yaml - name: staging manifests: rawYaml: - run-staging.yaml deploy: cloudrun: {}이 파일은 최소한의 Skaffold 구성입니다. 이 빠른 시작에서는 해당 파일을 만듭니다. 하지만 간단한 비프로덕션 애플리케이션의 경우 Cloud Deploy에서 자동으로 생성되도록 할 수도 있습니다.
이 파일에 대한 자세한 내용은
skaffold.yaml참조를 확인하세요.Cloud Run에 대한 서비스 정의 집합 쌍이거나 GKE에 대한 Kubernetes 매니페스트일 수 있는 애플리케이션에 대한 정의를 만듭니다.
GKE
다음 콘텐츠로
k8s-deployment.yaml이라는 파일을 만듭니다.apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app namespace: default spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-image --- apiVersion: v1 kind: Service metadata: name: my-service namespace: default spec: selector: app: my-app ports: - protocol: TCP port: 80이 파일은 애플리케이션을 배포하는 데 사용되는 간단한 Kubernetes 매니페스트입니다. 배포할 컨테이너 이미지는 여기에서 자리표시자
my-app-image로 설정되며, 버전을 생성할 때 특정 이미지로 대체됩니다.Cloud Run
다음 콘텐츠로
run-dev.yaml이라는 파일을 만듭니다.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-automation-run-service-dev spec: template: spec: containers: - image: my-app-image다음 콘텐츠로
run-staging.yaml이라는 파일을 만듭니다.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-automation-run-service-staging spec: template: spec: containers: - image: my-app-image
이러한 파일은 애플리케이션을 배포하는 데 사용되는 단순 Cloud Run 서비스 정의입니다. 배포할 컨테이너 이미지는 여기에서 자리표시자
my-app-image로 설정되며, 버전을 만들 때 특정 이미지로 대체됩니다.
배포 파이프라인, 대상, 자동화 만들기
배포 파이프라인 및 대상을 파일 하나 또는 별도의 파일로 정의할 수 있습니다. 또한 개별 파일에 자동화 작업을 정의할 수 있습니다. 이 빠른 시작에서는 파이프라인, 대상, 자동화에 대해 하나의 파일을 사용합니다.
배포 파이프라인, 대상 정의, 자동화 작업을 만듭니다.
GKE
deploy-automation-gke-quickstart디렉터리에서 다음 콘텐츠로 새 파일clouddeploy.yaml을 만듭니다.apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-automation-demo-app-1 description: Automation demonstration pipeline serialPipeline: stages: - targetId: automation-quickstart-dev - targetId: automation-quickstart-staging profiles: [] strategy: canary: runtimeConfig: kubernetes: serviceNetworking: service: "my-service" deployment: "my-deployment" canaryDeployment: percentages: [25] verify: false --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-dev description: Dev cluster to demonstrate deploy automation gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/automation-quickstart-cluster-dev --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-staging description: Staging cluster to demonstrate deploy automation gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/automation-quickstart-cluster-staging --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/promote description: promotes a release suspended: false serviceAccount: PROJECT_NUMBER-compute@developer.gserviceaccount.com selector: targets: - id: automation-quickstart-dev rules: - promoteReleaseRule: id: "promote-release" wait: 1m destinationTargetId: "@next" --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/advance description: advances a rollout suspended: false serviceAccount: PROJECT_NUMBER-compute@developer.gserviceaccount.com selector: targets: - id: automation-quickstart-staging rules: - advanceRolloutRule: id: "advance-rollout" sourcePhases: ["canary-25"] wait: 1mCloud Run
deploy-automation-run-quickstart디렉터리에서 다음 콘텐츠로 새 파일clouddeploy.yaml을 만듭니다.apiVersion: