使用部署參數
本頁面說明如何使用 Cloud Deploy,同時將範例應用程式傳送至兩個目標 (平行部署),並使用三種不同方法,將不同參數值傳遞至每個算繪的資訊清單或服務定義。
在本快速入門導覽課程中,您將執行下列操作:
建立兩個 GKE 叢集或兩個 Cloud Run 服務。
您也可以使用 GKE 連結的叢集,但本快速入門導覽課程只會使用 GKE 和 Cloud Run。
建立 Skaffold 設定,以及 Kubernetes 資訊清單或 Cloud Run 服務定義。
兩個子目標的資訊清單或服務定義會相同,但在部署時,每個子目標的已算繪資訊清單或服務定義,會針對本快速入門指南中設定的特定參數,採用不同的值。
定義 Cloud Deploy 推送管道和部署目標。
在三個不同位置定義部署參數:
- 在管道進展中
- 子目標
- 在指令列中建立發布版本時
建立發布版本,例項化推送管道,這會自動平行部署至兩個目標。
在 Google Cloud 控制台中查看「控制器推出作業」和子項推出作業。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 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" - 為特定執行階段新增開發人員角色。
- 如果是 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
- 首先,請新增
如果您已安裝 CLI,請確認您使用的是最新版本:
gcloud components update
建立執行階段環境
如果您要部署至 Cloud Run,可以略過這個指令。
如果是 GKE,請建立兩個叢集:deploy-params-cluster-prod1
和 deploy-params-cluster-prod2,並採用預設設定。叢集的 Kubernetes API 端點必須可從公開網際網路連上網路。根據預設,外部可存取 GKE 叢集。
gcloud container clusters create-auto deploy-params-cluster-prod1 \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto deploy-params-cluster-prod2 \
--project=PROJECT_ID \
--region=us-west1
準備 Skaffold 設定和資訊清單
Cloud Deploy 會使用 Skaffold 提供詳細資料,說明要部署的內容,以及如何為個別目標正確部署。
在本快速入門導覽課程中,您會建立 skaffold.yaml 檔案,識別要用於部署範例應用程式的 Kubernetes 資訊清單或 Cloud Run 服務定義。
開啟終端機視窗。
建立新目錄並前往該目錄。
GKE
mkdir deploy-params-gke-quickstart cd deploy-params-gke-quickstartCloud Run
mkdir deploy-params-run-quickstart cd deploy-params-run-quickstart建立名為
skaffold.yaml的檔案,並在當中加入下列內容:GKE
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - kubernetes.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}這個檔案是基本的 Skaffold 設定。在本快速入門導覽課程中,您將建立檔案。但您也可以讓 Cloud Deploy 為您建立一個,適用於簡單的非正式版應用程式。
如要進一步瞭解這個檔案,請參閱
skaffold.yaml參考資料。建立應用程式的定義,也就是 Cloud Run 的服務定義或 GKE 的 Kubernetes 資訊清單。
GKE
建立名為
kubernetes.yaml的檔案,並在當中加入下列內容:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 1 # from-param: ${replicaCount} selector: matchLabels: app: my-app template: metadata: labels: app: my-app annotations: commit: defaultShaValue # from-param: ${git-sha} spec: containers: - name: nginx image: my-app-image env: - name: envvar1 value: default1 # from-param: ${application_env1} - name: envvar2 value: default2 # from-param: ${application_env2}這個檔案是 Kubernetes 資訊清單,會套用至叢集以部署應用程式。要部署的容器映像檔會在此處設為預留位置
my-app-image,並在您建立版本時替換為特定映像檔。Cloud Run
建立名為
service.yaml的檔案,並在當中加入下列內容:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-parallel-run-service spec: autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances} selector: matchLabels: app: my-app template: metadata: annotations: commit: defaultShaValue # from-param: ${git-sha} spec: containers: - image: my-app-image env: - name: envvar1 value: defaultValue1 # from-param: ${application_env1} - name: envvar2 value: defaultValue2 # from-param: ${application_env2}這個檔案是基本的 Cloud Run 服務定義,用於部署應用程式。要部署的容器映像檔在此設為預留位置
my-app-image,當您建立版本時,系統會將其替換為特定映像檔。
建立推送管道和目標
您可以在一個或多個檔案中定義管道和目標。在本快速入門導覽課程中,我們會建立單一檔案。
建立推送管道和目標定義:
GKE
在
deploy-params-gke-quickstart目錄中建立新檔案:clouddeploy.yaml,並加入下列內容:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-params-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: params-prod-multi deployParameters: - values: replicaCount: "2" # Apply the deploy parameter replicaCount: "2" to the target with this label matchTargetLabels: label1: label1 - values: replicaCount: "3" # Apply the deploy parameter replicaCount: "3" to the target with this label matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-multi description: production clusters multiTarget: targetIds: [params-prod-a, params-prod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-a labels: label1: label1 description: production cluster 1 deployParameters: application_env1: "sampleValue1" gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-params-cluster-prod1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-b labels: label2: label2 description: production cluster 2 deployParameters: application_env2: "sampleValue2" gke: cluster: projects/PROJECT_ID/locations/us-west1/clusters/deploy-params-cluster-prod2Cloud Run
在
deploy-params-run-quickstart目錄中建立新檔案:clouddeploy.yaml,並加入下列內容:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-params-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: params-prod-multi deployParameters: - values: minInstances: "2" # Apply the deploy parameter minInstances: "2" to the target with this label matchTargetLabels: label1: label1 - values: minInstances: "3" # Apply the deploy parameter minInstances: "3" to the target with this label matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-multi description: production clusters multiTarget: targetIds: [params-prod-a, params-prod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-a labels: label1: label1 description: production cluster 1 deployParameters: application_env1: "sampleValue1" run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-b labels: label2: label2 description: production cluster 2 deployParameters: application_env2: "sampleValue2" run: location: projects/PROJECT_ID/locations/us-west1向 Cloud Deploy 服務註冊管道和目標:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID您現在有一個管道,其中包含一個由兩個 GKE 或 Cloud Run 目標組成的多重目標,可供您部署應用程式。
確認管道和目標:
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看可用推送管道的清單。
畫面會顯示剛才建立的推送管道。請注意,即使您在
clouddeploy.yaml檔案中設定了三個目標 (一個多部署目標和兩個子目標),「目標」資料欄中仍只會列出一個目標。
請注意,列出的唯一目標是多重目標
params-prod-multi。不會顯示子目標。
建立發布版本
版本是代表部署變更的中央 Cloud Deploy 資源。推送管道會定義該版本的生命週期。如要進一步瞭解該生命週期,請參閱「Cloud Deploy 服務架構」。
GKE
從 deploy-gke-parallel-quickstart 目錄執行下列指令,建立代表要部署容器映像檔的 release 資源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-params-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
--deploy-parameters="git-sha=f787cac"
請注意 --images= 旗標,您可以使用這個旗標,將資訊清單中的預留位置 (my-app-image) 換成符合 SHA 資格的特定圖片。Google 建議您以這種方式將資訊清單範本化,並在建立發布版本時使用 SHA 合格的映像檔名稱。
Cloud Run
從 deploy-run-parallel-quickstart 目錄執行下列指令,建立代表要部署容器映像檔的 release 資源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-params-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \
--deploy-parameters="git-sha=f787cac"
請注意 --images= 旗標,您可以使用這個旗標,將服務定義中的預留位置 (my-app-image) 替換為符合 SHA 資格的特定映像檔。Google 建議您以這種方式為服務和工作定義建立範本,並在建立發布版本時使用 SHA 合格的映像檔名稱。
與往常一樣,建立版本時,系統會自動為管道中的第一個目標建立推出作業 (除非使用 --to-target= 指定特定目標)。在本快速入門中,這個目標是多重目標,因此 rollout 是兩個子目標的「控制器推出作業」,且推送管道中沒有後續目標。也就是說,建立推出作業後,應用程式就會部署到所有地方。
在 Google Cloud 控制台中查看結果
您已建立發布版本,且系統已建立控制器推出作業和子項推出作業,這些子項推出作業現在會部署 (或正在部署) 到各自的 GKE 叢集或 Cloud Run 服務。
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送 pipeline) 頁面,查看「my-parallel-demo-app-1」推送 pipeline。
按一下推送管道名稱「my-parallel-demo-app-1」。
管道圖表會顯示應用程式的部署狀態。由於管道中只有一個階段,因此視覺化內容只會顯示一個節點。

發行內容會列在「推送 pipeline 詳細資料」下方的「發行內容」分頁中。
按一下發行內容名稱
test-release-001。推出版本會顯示在「推出版本」下方。您可以點選推出作業來查看詳細資料,包括部署記錄。

在「版本詳細資料」下方,選取「構件」分頁標籤。
「部署參數」表格會列出您在資訊清單中設定的所有參數,以及您為這些參數提供的值:
GKE

Cloud Run

除了參數和值之外,表格還會顯示每個參數適用的目標。
在「版本檢查工具」欄中,按一下任一目標的「查看構件」。
按一下「顯示差異」,然後選取一個目標的
params-prod-a,以及另一個目標的params-prod-b。系統會顯示差異,比較兩個目標的算繪資訊清單,包括您指定的值:
GKE

Cloud Run

清除所用資源
為了避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請按照下列步驟操作。
刪除 GKE 叢集或 Cloud Run 服務:
GKE
gcloud container clusters delete deploy-params-cluster-prod1 --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete deploy-params-cluster-prod2 --region=us-west1 --project=PROJECT_IDCloud Run
gcloud run services delete my-parallel-run-service --region=us-central1 --project=PROJECT_ID \ && gcloud run services delete my-parallel-run-service --region=us-west1 --project=PROJECT_ID刪除推送管道、多部署目標、子目標、版本和推出項目:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID刪除 Cloud Deploy 建立的 Cloud Storage bucket。
一個結尾是
_clouddeploy,另一個是[region].deploy-artifacts.[project].appspot.com。
大功告成,您已經完成本快速入門導覽課程!