本文說明如何使用部署政策,限制手動或自動執行交付管道動作。
部署政策是 Cloud Deploy 資源,可用於限制對所選發布管道或目標 (或所有管道或目標) 採取的手動或自動動作。
哪些行為會受到限制?
您可以建立部署政策,限制或禁止 Cloud Deploy 對推出作業執行特定動作。舉例來說,政策可以禁止在指定時間範圍內,為特定發布管道建立推出作業。舉例來說,你可能會使用這項屬性設定季節性限制。
政策的評估和執行方式
無論是手動或自動執行的動作,Cloud Deploy 都會執行下列作業:
檢查身分與存取權管理權限。
如果使用者或服務帳戶沒有足夠的 IAM 權限,系統不會採取任何動作,也不需要評估部署政策。
檢查目標或放送管道是否有適用政策,如有則評估政策。
Cloud Deploy 會評估採取的動作,判斷是否適用這項規則。
也就是說,動作類型和呼叫端是否符合政策規定?
Cloud Deploy 會檢查為政策定義的日期和時間範圍,確認政策在要求時是否生效。
如果政策生效,且規則適用於放送管道或目標和動作,系統就會強制執行該規則並封鎖動作。
需求和限制
每項政策至少須有一個選取器。
每項政策至少須有一項規則。
部署政策中的所有規則 ID 均不得重複。
每項規則至少須有一個
timeWindows,且該timeWindows內必須有oneTimeWindows或weeklyWindows。如要進一步瞭解如何使用時間區塊,請參閱「日期和時間」。
每個專案/位置最多只能有 1,000 項部署政策。
必要的身分與存取權管理角色和權限
除了執行任何 Cloud Deploy 交付管道,以及執行受政策限制的工作所需的權限外,您還需要下列權限,才能對政策資源執行特定作業:
clouddeploy.deployPolicies.createclouddeploy.deployPolicies.deleteclouddeploy.deployPolicies.getclouddeploy.deployPolicies.listclouddeploy.deployPolicies.updateclouddeploy.deployPolicies.override
這些權限包含在 roles/clouddeploy.policyAdmin 角色中。
此外,roles/clouddeploy.policyOverrider 角色也包含 .override 權限。
建立部署政策
建立部署政策資源的步驟如下:
建立含有部署政策設定的 YAML 檔案。
設定包含標頭,可將資源識別為部署政策。必須提供
name。apiVersion: deploy.cloud.google.com/v1 kind: DeployPolicy metadata: name: description:新增政策適用的傳送管道和目標參照 (
selectors)。如要進一步瞭解政策選取器和設定方式,請參閱「部署政策選取器」和「設定檔結構定義參考資料」。
新增一或多項政策
rules。每項規則都會說明限制,以及強制執行限制的情況。如要進一步瞭解政策規則和設定方式,請參閱「部署政策規則」和「設定架構參考資料」。
套用該檔案來建立政策:
gcloud deploy apply --file=FILENAME \ --region=REGION \ --project=PROJECT_ID其中
FILENAME是包含DeployPolicy定義的 YAML 檔案名稱,REGION是要建立部署政策資源的區域,PROJECT_ID則是要建立資源的專案。
現在,系統會根據 deploy-policy 資源中的規則,限制參照的推送管道或目標。
部署政策選取器
部署政策中定義的選取器設定,會決定特定規則影響的放送管道和目標。
選取器是在部署政策設定的 selectors 節中定義,做為頂層屬性:
selectors:
- deliveryPipeline:
id:
labels:
target:
id:
labels:
在這個設定 YAML 中,deliveryPipeline.id 會採用傳送管道的名稱,而 target.id 則會採用目標的名稱 (在這兩種情況下,都是 metadata.name)。
您可以使用 id: * 選取所有發布管道或所有目標。請注意,* 是選取所有項目的特殊欄位值,系統不支援任意萬用字元。您也可以使用標籤來比對推送管道或目標,或兩者皆比對。
在指定選取器中,項目會以 AND 運算子合併。多個選取器會以 OR 運算子連結。 也就是說,如要讓特定請求受到政策限制,該請求必須適用於至少一個選取器。但要求必須符合選取器中的所有項目。
部署政策規則
每項部署政策都包含一或多個政策規則,這些規則會定義所選發布管道或目標中受限制的動作。規則也會定義套用規則的條件。
可用的規則如下:
rolloutRestriction
rolloutRestriction 規則會禁止對所選發布管道使用的指定目標執行指定的發布動作。這項規則會使用時間範圍,定義何時無法為所選推送管道和目標建立推出作業。如要瞭解如何在部署政策規則中指定日期和時間,請參閱「日期和時間」。
規則生效期間,系統會限制下列動作:
ADVANCE無法推進推出階段。
APPROVE無法核准宣傳推出作業。
CANCEL推出作業無法取消。
CREATE無法建立推出作業。如果政策禁止這項操作,您可以建立發布版本,但該版本不會啟動推出作業。
IGNORE_JOB工作無法忽略。
RETRY_JOB工作無法重試。
ROLLBACK推出後就無法復原。
TERMINATE_JOBRUN無法終止工作執行作業
如要瞭解這項規則的 YAML 結構,請參閱設定結構定義參考資料。
rolloutRestriction 規則中的日期和時間
您可以設定日期和時間區塊,指定部署政策生效的重複和非重複時間範圍。
以下是日期和時間的表示規定:
日期格式為
yyyy-mm-dd。表示一天中的時間時,一天的開始是
00:00,一天的結束是24:00。如果是
oneTimeWindows,日期必須包含時間。如果是weeklyWindows,您可以省略一天中的時間。但如果您加入startTime,就必須加入endTime,反之亦然。舉例來說,如果只在星期日暫停,設定如下:
- daysOfWeek: [SUNDAY] startTime: "00:00" endTime: "24:00"你也可以採取下列做法:
- daysOfWeek: [SUNDAY]但不是這個:
- daysOfWeek: [SUNDAY] startTime: "00:00"您必須在
timeWindows節中加入時區。例如:
timeZone: America/New_York。
非重複時間範圍
非重複時間範圍會在特定日期和時間開始及結束。您可以在任何要限制推出的時間區塊使用這項功能。
使用 oneTimeWindows 節設定非重複時間範圍。
重複時間範圍
重複時間範圍是指您要限制推出動作的重複時間區塊。舉例來說,您可以使用這項功能,限制在週末推出版本。
重複時間範圍是使用 weeklyWindows 節設定。
範例
本節提供幾個範例,說明如何使用日期和時間設定部署政策的強制執行時間。
年度凍結
如果想在一年中的特定時間暫停推出,可以設定oneTimeWindows封鎖oneTimeWindow來達成。如果日期每年都相同,您仍需使用多個封鎖。
下列 YAML 顯示一次性 (非重複) 時間範圍,用於強制執行年度凍結的部署政策:
timeWindows:
timeZone: "America/New_York"
oneTimeWindows:
- start: "2024-12-22 17:00"
end: "2025-01-02 09:00"
這個 YAML 描述的時間範圍為 2024 年 12 月 22 日下午 5 點至 2025 年 1 月 2 日上午 9 點。
週末重複凍結
下列 YAML 顯示重複的時間範圍,用於強制執行部署政策,限制在週末推出版本 (週五下午 5 點至週一上午 9 點):
timeWindows:
timeZone: "America/New_York"
weeklyWindows:
- daysOfWeek: [FRIDAY]
startTime: "17:00"
endTime: "24:00"
- daysOfWeek: [SATURDAY, SUNDAY]
startTime: "00:00"
endTime: "24:00"
- daysOfWeek: [MONDAY]
startTime: "00:00"
endTime: "09:00"
更新部署政策
更新部署政策的步驟如下:
編輯政策設定 YAML。
如果您是使用 Google Cloud 控制台建立政策,請在「部署政策詳細資料」頁面選取「YAML」分頁,即可取得 YAML 設定。然後將該文字複製到本機檔案並編輯。
套用該檔案來更新政策:
gcloud deploy apply --file=FILENAME \ --region=REGION \ --project=PROJECT_ID這會使用新設定更新部署政策資源。
由於系統會在嘗試執行受限動作時評估部署政策,因此針對所有 Cloud Deploy 資源執行的這類動作,都會受到更新後政策的約束。也就是說,先前限制的殘餘部分已完全清除。舉例來說,假設您在 12 月整月都設有 restrictRollouts 封鎖,並在 12 月 14 日更新政策,將限制結束日期設為 12 月 15 日,則 12 月 15 日之後就不會再封鎖推出作業。
覆寫部署政策
如有需要,您可以覆寫部署政策。舉例來說,如果正式環境中的部署作業發生問題,需要復原,但部署政策禁止任何推出作業,您可以覆寫該政策,以便復原錯誤的推出作業。
如要覆寫部署政策,您必須具備 clouddeploy.deployPolicies.override IAM 權限。
您可以透過 gcloud CLI 或使用Google Cloud 控制台,覆寫政策:
主控台
在 Google Cloud 控制台中,嘗試執行遭政策禁止的動作。
系統會顯示對話方塊,指出部署政策禁止這項操作。這個對話方塊會提供連結,連往禁止這項操作的具體政策。
在提供的文字欄位中輸入政策名稱,然後按一下「嘗試覆寫政策」。
如果您有權限可覆寫政策,Cloud Deploy 現在會執行該動作。
gcloud CLI
如要使用 gcloud CLI 覆寫部署政策,請將 --override-deploy-policies 新增至任何會因該政策而遭到禁止的動作指令。舉例來說,下列指令會推送版本,並覆寫特定部署政策,否則該政策會禁止推送:
gcloud deploy releases promote --release=my-release-001 \
--project=my-policy-testing-project \
--region=us-central1 \
--delivery-pipeline=my-pipeline \
--to-target=prod-target \
--override-deploy-policies=my-deploy-policy
刪除部署政策
如要刪除部署政策,請按照下列步驟操作:
主控台
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Deploy policies」(部署政策) 頁面。
這個頁面會列出目前專案中可用的部署政策 (如有)。
選取要刪除的政策的「動作」 按鈕,然後按一下「刪除部署政策」。
輸入部署政策名稱以確認刪除,然後按一下「確認」。
政策已刪除,您現在可以執行政策限制的任何動作。
gcloud CLI
如要使用 gcloud CLI 刪除部署政策,請執行下列指令:
gcloud deploy deploy-policies delete \
--project=[PROJECT] \
--region=[REGION] \
[POLICY_NAME]
更改下列內容:
[POLICY_NAME]政策名稱,如政策設定檔中所定義。
[PROJECT]您建立部署政策的 Google Cloud 專案 ID。
[REGION]您建立部署政策的區域。
刪除部署政策資源後,受影響的發布管道和目標就不再受該政策約束,除非受到其他部署政策影響,否則不會受到限制。
記錄部署政策
評估部署政策時,系統會針對下列動作建立平台記錄項目:
政策評估
當系統評估要求並發現違反政策時,就會寫入平台記錄。 如果要求違反政策,但政策已暫停或遭到覆寫,因此要求獲得允許,系統也會寫入記錄。要求獲得核准時,系統不會寫入記錄,因為這時並未違反政策。
部署政策資源變更時,Pub/Sub 通知失敗。
後續步驟
如要進一步瞭解如何設定部署政策,請參閱「設定檔結構定義」。