使用部署政策限制推出作業
本快速入門導覽課程說明如何防止 Cloud Deploy 在指定時間內將推出內容發布至目標,以及如何覆寫該限制。
在本快速入門導覽課程中,您將完成下列事項:
建立 Skaffold 設定和 Kubernetes 資訊清單或 Cloud Run 服務定義,指定要部署的 (預先建構) 容器映像檔。
定義 Cloud Deploy 推送管道和一個部署目標,指向一個 GKE 叢集或 Cloud Run 服務。
這個管道只包含一個階段,適用於一個目標。
為目標設定部署政策。
這項政策會定義日期範圍,禁止在該範圍內向目標推出版本。
建立版本。
通常建立版本時,Cloud Deploy 會為推送管道進度中的第一個目標建立推出作業。在本例中,由於政策禁止部署至目標,因此系統不會為該目標建立推出作業。
在 Google Cloud 控制台中查看結果。
由於這項政策,您不會看到版本的推出作業,且推送管道的視覺化內容中也沒有待處理的動作。
覆寫部署政策。
這項覆寫作業會導致 Cloud Deploy 現在為目標建立推出作業。
在 Google Cloud 控制台中查看結果。
由於政策已遭到覆寫,您會看到推出作業正在進行中 (或已完成,如果時間已過)。
事前準備
- 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.
-
Install the 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.
-
Install the 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
開啟終端機視窗。
建立新目錄並前往該目錄。
mkdir deploy-policy-quickstart cd deploy-policy-quickstart
建立名為
skaffold.yaml
的檔案,並在當中加入下列內容:GKE
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {}
Cloud Run
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}
這個檔案是基本的 Skaffold 設定。在本快速入門導覽課程中,您會建立檔案。但您也可以讓 Cloud Deploy 為您建立一個,適用於基本、非正式版應用程式。
如要進一步瞭解這個設定檔,請參閱
skaffold.yaml
參考資料。為應用程式建立資訊清單,也就是 Cloud Run 的服務定義或 GKE 的 Kubernetes 資訊清單。
GKE
建立名為
k8s-pod.yaml
的檔案,並在當中加入下列內容:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-image
這個檔案是基本的 Kubernetes 資訊清單,會套用至叢集以部署應用程式。要部署的容器映像檔在此設為預留位置
my-app-image
,您建立版本時,會將其替換為特定映像檔。Cloud Run
建立名為
service.yaml
的檔案,並在當中加入下列內容:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-deploy-policy-run-service spec: template: spec: containers: - image: my-app-image
這個檔案是基本的 Cloud Run 服務定義,用於部署應用程式。要部署的容器映像檔在此設定為預留位置
my-app-image
,當您建立版本時,會以特定映像檔取代。建立推送管道和目標定義:
GKE
在
deploy-policy-quickstart
目錄中建立新檔案:clouddeploy.yaml
,並加入下列內容:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
Cloud Run
在
deploy-policy-quickstart
目錄中建立新檔案:clouddeploy.yaml
,並加入下列內容:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production Run service run: location: projects/PROJECT_ID/locations/us-central1
向 Cloud Deploy 服務註冊管道和目標資源:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
現在您有一個推送管道,其中包含一個目標。
確認管道和目標:
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看可用推送管道的清單。
您剛建立的推送管道會顯示在「目標」欄中,並列出一個目標。
在您建立推送管道和目標的同一個目錄中,建立名為
deploypolicy.yaml
的新檔案,並在當中加入下列內容:apiVersion: deploy.cloud.google.com/v1 description: Restrict all rollouts in the deploy-policy-pipeline resource for the next ten years kind: DeployPolicy metadata: name: quickstart-deploy-policy selectors: - deliveryPipeline: id: 'deploy-policy-pipeline' rules: - rolloutRestriction: id: no-rollouts timeWindows: timeZone: America/New_York oneTimeWindows: - start: 2024-01-01 00:00 end: 2034-01-01 24:00
這項政策將於 2024 年 1 月 1 日起生效,並禁止推出 10 年。這並非實際政策,只是為了本快速入門導覽課程而設定,確保您建立發行內容時,政策已就位。
向 Cloud Deploy 服務註冊部署政策資源:
gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
確認部署政策:
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Deploy policies」(部署政策) 頁面,即可查看可用政策清單。
畫面會顯示您剛才建立的部署政策。
在 Google Cloud 控制台中,再次前往 Cloud Deploy 的「Delivery pipelines」(推送 pipeline) 頁面,查看推送 pipeline (
deploy-policy-pipeline
)。按一下推送管道的名稱 (
deploy-policy-pipeline
)。管道視覺化會顯示應用程式的部署狀態。在本例中,由於政策遭到覆寫,因此系統已建立推出作業,且作業成功。
發行內容會列在「推送 pipeline 詳細資料」下方的「發行內容」分頁中。
刪除 GKE 叢集或 Cloud Run 服務:
GKE
gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
Cloud Run
gcloud run services delete my-deploy-policy-run-service --region=us-central1 --project=PROJECT_ID
刪除部署政策:
gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
刪除推送管道、目標、版本和推出項目:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
刪除 Cloud Deploy 建立的兩個 Cloud Storage bucket。
如果您已安裝 Google Cloud CLI,請確認您執行的是最新版本:
gcloud components update
建立執行階段環境
如果您要部署至 Cloud Run,可以略過這個指令。
如果是 GKE,請建立一個叢集:quickstart-cluster-qsprod
。
叢集的 Kubernetes API 端點必須可從公開網際網路連上網路。根據預設,GKE 叢集可從外部存取。
gcloud container clusters create-auto quickstart-cluster-qsprod \
--project=PROJECT_ID \
--region=us-central1
準備 Skaffold 設定和應用程式資訊清單
Cloud Deploy 會使用 Skaffold 提供詳細資料,說明要部署的內容,以及如何將內容部署至目標。
在本快速入門導覽課程中,您將建立 skaffold.yaml
檔案,其中會識別用於部署範例應用程式的 Kubernetes 資訊清單。
建立推送管道和目標
您可以在一個檔案或多個檔案中定義發布管道和目標。在本快速入門導覽課程中,您將建立同時包含這兩者的單一檔案。
建立部署政策
您可以在與交付管道和目標相同的檔案中定義部署政策,也可以在個別檔案中定義。在本快速入門導覽課程中,我們會分別定義。
建立發布版本
「版本」是 Cloud Deploy 的核心資源,代表要部署的變更。推送 pipeline 會定義該版本的生命週期。如要進一步瞭解該生命週期,請參閱 Cloud Deploy 服務架構。
GKE
從 deploy-policy-quickstart
目錄執行下列指令,建立版本:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
請注意 --images=
旗標,您可以使用這個旗標,在資訊清單或服務定義中,將預留位置 (my-app-image
) 替換為符合 SHA 資格的特定映像檔。Google 建議您以這種方式將資訊清單範本化,並在建立發布版本時使用 SHA 合格的映像檔名稱。
Cloud Run
從 deploy-policy-quickstart
目錄執行下列指令,建立版本:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
請注意 --images=
旗標,您可以使用這個旗標,在資訊清單或服務定義中,將預留位置 (my-app-image
) 替換為符合 SHA 資格的特定映像檔。Google 建議您以這種方式將資訊清單範本化,並在建立發布版本時使用 SHA 合格的映像檔名稱。
在正常情況下,使用這項指令建立版本時,Cloud Deploy 會為第一個目標建立推出作業。在本例中,由於推出作業受到部署政策限制,因此系統不會建立任何推出作業。指令列會顯示錯誤訊息:
ERROR: (gcloud.deploy.releases.create) A create-rollout attempt was blocked by the "quickstart-deploy-policy"
policy. Target: "prod-target", Delivery pipeline: "deploy-policy-pipeline", policy rule: "no-rollouts"
覆寫政策限制
如要部署遭部署政策封鎖的範例應用程式,您需要覆寫該政策。如要這麼做,請針對這個版本建立新的推出作業,這次請加入 --override-deploy-policies
選項:
GKE
從 deploy-policy-quickstart
目錄執行下列指令,建立版本:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Cloud Run
從 deploy-policy-quickstart
目錄執行下列指令,建立版本:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
由於您加入了 --override-deploy-policies=quickstart-deploy-policy
,且您擁有 roles/clouddeploy.policyAdmin
角色,因此 Cloud Deploy 會忽略您建立的部署政策,並為 prod-target
建立推出作業。
在 Google Cloud 控制台中查看結果
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本頁所用資源的費用,請按照下列步驟操作。
大功告成,您已經完成本快速入門導覽課程!