在 Cloud Deploy 中自動推送版本和推出進度
本頁面說明如何使用 Cloud Deploy 自動將版本推送至目標,並將推出作業推進至下一階段。
在本快速入門導覽課程中,您將執行以下操作:
建立兩個 GKE 叢集或兩個 Cloud Run 服務。
建立 Skaffold 設定,以及 Kubernetes 資訊清單或 Cloud Run 服務定義。
定義 Cloud Deploy 推送管道和部署目標。
管道會部署至兩個目標:
dev
和staging
。staging
目標使用初期測試版部署策略。定義兩個自動化規則:
在成功推出
dev
後,將自動化作業推送至staging
目標。自動化動作,可在
canary-25
` 階段順利完成後,將推出作業推進至stable
階段。
建立版本,讓系統自動將版本部署至
dev
目標,以此將推送管道例項化。在 Google Cloud 控制台中查看推送管道和版本。
由於自動升級功能,這個版本會自動升級至
staging
。由於
staging
目標使用 Canary 部署策略,且這是首次在該執行階段部署,因此會略過canary-25
階段。請參閱「為什麼有時會略過階段」,進一步瞭解為何第一次略過初期測試階段。由於自動推進階段,推出作業會推進至
stable
階段。
事前準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
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"
-
新增
iam.serviceAccountUser
角色,其中包含預設服務帳戶的actAs
權限,可將其部署至執行階段: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
-
新增
iam.serviceAccountUser
角色,包括您自己的actAs
權限,以便使用預設服務帳戶: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 的電子郵件地址。
建立執行階段環境
如果您要部署至 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
- 首先新增
如果您已安裝 CLI,請確認您執行的是最新版本:
gcloud components update
取得專案編號。
您需要專案編號才能識別預設服務帳戶。這項資訊是設定自動化資源時所需。
執行下列指令,取得專案編號:
gcloud projects describe PROJECT_ID
從指令列輸出內容複製專案編號,然後貼在這裡。
您不需要以指令的形式執行這項操作。將其貼在這裡,可在本快速入門稍後的自動化設定中填入服務帳戶參照。
PROJECT_NUMBER
準備 Skaffold 設定和應用程式資訊清單
Cloud Deploy 會使用 Skaffold,為您提供詳細資訊,說明要部署哪些內容,以及如何為個別目標正確部署。
在本快速入門導覽課程中,您會建立 skaffold.yaml
檔案,用來識別用於部署範例應用程式的應用程式資訊清單。
開啟終端機視窗。
建立新目錄並前往該目錄。
GKE
mkdir deploy-automation-gke-quickstart cd deploy-automation-gke-quickstart
Cloud 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: name: "promote-release" wait: 1m toTargetId: "@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: name: "advance-rollout" sourcePhases: ["canary-25"] wait: 1m
Cloud Run
在
deploy-automation-run-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 profiles: [dev] - targetId: automation-quickstart-staging profiles: [staging] strategy: canary: runtimeConfig: cloudRun: automaticTrafficControl: true 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 run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-staging description: Staging cluster to demonstrate deploy automation run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/promote description: Promotes a release to the next target suspended: false serviceAccount: PROJECT_NUMBER-compute@developer.gserviceaccount.com selector: targets: - id: automation-quickstart-dev rules: - promoteReleaseRule: name: "promote-release" wait: 1m toTargetId: "@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: name: "advance-rollout" sourcePhases: ["canary-25"] wait: 1m
使用 Cloud Deploy 服務註冊管道和目標:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
您現在擁有一個管道,其中包含一個多目標,包含兩個 GKE 或 Cloud Run 目標,可部署應用程式。
確認管道和目標:
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看可用的推送管道清單。
系統會顯示您剛建立的推送管道,其中「目標」欄會列出兩個目標。
按一下管道名稱,開啟提交管道圖表和詳細資料。
選取「提交管道詳細資料」下方的「自動化動作」分頁標籤。
畫面上會顯示你建立的兩個自動化動作。
建立版本
版本是代表待部署變更的集中式 Cloud Deploy 資源。發布管道會定義該版本的生命週期。如要進一步瞭解這個生命週期,請參閱 Cloud Deploy 服務架構。
GKE
從 deploy-automation-gke-quickstart
目錄執行下列指令,建立代表要部署的容器映像檔的 release
資源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-automation-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
請注意 --images=
旗標,您可以使用該旗標將 資訊清單 中的預留位置 (my-app-image
) 替換為特定的 SHA 合格圖片。Google 建議您以這種方式建立資訊清單範本,並在建立版本時使用 SHA 合格的映像檔名稱。
Cloud Run
從 deploy-automation-run-quickstart
目錄執行下列指令,建立代表要部署的容器映像檔的 release
資源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-automation-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
請注意 --images=
標記,您可以使用該標記將 服務定義中的預留位置 (my-app-image
) 替換為特定 SHA 合格映像檔。Google 建議您以這種方式建立服務和工作定義範本,並在建立版本時使用 SHA 合格映像檔名稱。
根據預設,建立版本時,系統會自動為管道中的第一個目標建立推出作業。
由於這個快速入門導覽課程包含兩個自動化動作,因此會自動發生以下兩件事:
在第一個目標中成功部署後,系統會自動將版本推送至第二個目標。
自動提昇功能需要等待一分鐘。
在第二個目標中,系統已設定 25% 的初期測試版本,第二個自動化動作會將推出作業從
canary-25
推進至stable
。對於這個第一個版本,系統會略過
canary-25
階段,因為沒有可用於初期測試的先前版本應用程式。推出作業會自動推進至stable
。提前自動化動作的延遲時間為 1 分鐘。
完成所有作業後,應用程式就會成功部署至兩個目標,您不必再採取任何行動。
如要進一步瞭解如何執行初期測試部署策略,請試試初期測試快速入門指南。
在 Google Cloud 控制台中查看結果
您可以在Google Cloud 主控台中查看結果,包括自動化執行作業。
前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看推送管道。
按一下推送管道名稱「my-automation-demo-app-1」。
管道示意圖會顯示應用程式的部署狀態。如果已過足夠的時間,兩個目標都會顯示綠色。
你的版本會列在「發布管道詳細資料」下方的「版本」分頁中。
按一下「自動化動作執行次數」分頁標籤。
這裡有兩個項目,分別對應到您建立的兩個自動化動作。您可以點選任一項目,查看該自動化動作執行作業的詳細資料。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取您在本頁所用資源的費用,請按照下列步驟操作。
刪除 GKE 叢集或 Cloud Run 服務:
GKE
gcloud container clusters delete automation-quickstart-cluster-dev --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete automation-quickstart-cluster-staging --region=us-west1 --project=PROJECT_ID
Cloud Run
gcloud run services delete my-automation-run-service-dev --region=us-central1 --project=PROJECT_ID \ && gcloud run services delete my-automation-run-service-staging --region=us-central1 --project=PROJECT_ID
刪除推送管道、目標、自動化動作、版本和推出項目:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
刪除 Cloud Deploy 建立的 Cloud Storage 值區。
一個結尾是
_clouddeploy
,另一個是[region].deploy-artifacts.[project].appspot.com
。
大功告成,您已經完成本快速入門導覽課程!