使用政策限制部署行為

本文說明如何使用部署政策,限制手動或自動執行交付管道動作。

部署政策是 Cloud Deploy 資源,可用於限制對所選發布管道或目標 (或所有管道或目標) 採取的手動或自動動作。

哪些行為會受到限制?

您可以建立部署政策,限制或禁止 Cloud Deploy 對推出作業執行特定動作。舉例來說,政策可以禁止在指定時間範圍內,為特定發布管道建立推出作業。舉例來說,你可能會使用這項屬性設定季節性限制。

政策的評估和執行方式

無論是手動或自動執行的動作,Cloud Deploy 都會執行下列作業:

  1. 檢查身分與存取權管理權限。

    如果使用者或服務帳戶沒有足夠的 IAM 權限,系統不會採取任何動作,也不需要評估部署政策。

  2. 檢查目標或放送管道是否有適用政策,如有則評估政策。

    • Cloud Deploy 會評估採取的動作,判斷是否適用這項規則。

      也就是說,動作類型和呼叫端是否符合政策規定?

    • Cloud Deploy 會檢查為政策定義的日期和時間範圍,確認政策在要求時是否生效。

    • 如果政策生效,且規則適用於放送管道或目標和動作,系統就會強制執行該規則並封鎖動作。

需求和限制

  • 每項政策至少須有一個選取器。

  • 每項政策至少須有一項規則。

    部署政策中的所有規則 ID 均不得重複。

  • 每項規則至少須有一個 timeWindows,且該 timeWindows 內必須有 oneTimeWindowsweeklyWindows

    如要進一步瞭解如何使用時間區塊,請參閱「日期和時間」。

  • 每個專案/位置最多只能有 1,000 項部署政策。

必要的身分與存取權管理角色和權限

除了執行任何 Cloud Deploy 交付管道,以及執行受政策限制的工作所需的權限外,您還需要下列權限,才能對政策資源執行特定作業:

  • clouddeploy.deployPolicies.create
  • clouddeploy.deployPolicies.delete
  • clouddeploy.deployPolicies.get
  • clouddeploy.deployPolicies.list
  • clouddeploy.deployPolicies.update
  • clouddeploy.deployPolicies.override

這些權限包含在 roles/clouddeploy.policyAdmin 角色中。 此外,roles/clouddeploy.policyOverrider 角色也包含 .override 權限。

建立部署政策

建立部署政策資源的步驟如下:

  1. 建立含有部署政策設定的 YAML 檔案。

    設定包含標頭,可將資源識別為部署政策。必須提供 name

     apiVersion: deploy.cloud.google.com/v1
     kind: DeployPolicy
     metadata:
       name: 
     description: 
    
  2. 新增政策適用的傳送管道和目標參照 (selectors)。

    如要進一步瞭解政策選取器和設定方式,請參閱「部署政策選取器」和「設定檔結構定義參考資料」。

  3. 新增一或多項政策 rules

    每項規則都會說明限制,以及強制執行限制的情況。如要進一步瞭解政策規則和設定方式,請參閱「部署政策規則」和「設定架構參考資料」。

  4. 套用該檔案來建立政策:

    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 規則會禁止對所選發布管道使用的指定目標執行指定的發布動作。這項規則會使用時間範圍,定義何時無法為所選推送管道和目標建立推出作業。如要瞭解如何在部署政策規則中指定日期和時間,請參閱「日期和時間」。

規則生效期間,系統會限制下列動作:

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"

更新部署政策

更新部署政策的步驟如下:

  1. 編輯政策設定 YAML。

    如果您是使用 Google Cloud 控制台建立政策,請在「部署政策詳細資料」頁面選取「YAML」分頁,即可取得 YAML 設定。然後將該文字複製到本機檔案並編輯。

  2. 套用該檔案來更新政策:

    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 控制台,覆寫政策:

主控台

  1. 在 Google Cloud 控制台中,嘗試執行遭政策禁止的動作。

    系統會顯示對話方塊,指出部署政策禁止這項操作。這個對話方塊會提供連結,連往禁止這項操作的具體政策。

  2. 在提供的文字欄位中輸入政策名稱,然後按一下「嘗試覆寫政策」

    如果您有權限可覆寫政策,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

刪除部署政策

如要刪除部署政策,請按照下列步驟操作:

主控台

  1. 在 Google Cloud 控制台中,前往 Cloud Deploy 的「Deploy policies」(部署政策) 頁面。

    開啟「部署政策」頁面

    這個頁面會列出目前專案中可用的部署政策 (如有)。

  2. 選取要刪除的政策的「動作」 按鈕,然後按一下「刪除部署政策」

  3. 輸入部署政策名稱以確認刪除,然後按一下「確認」

    政策已刪除,您現在可以執行政策限制的任何動作。

gcloud CLI

如要使用 gcloud CLI 刪除部署政策,請執行下列指令:

 gcloud deploy deploy-policies delete \
    --project=[PROJECT] \
    --region=[REGION] \
    [POLICY_NAME]

更改下列內容:

  • [POLICY_NAME]

    政策名稱,如政策設定檔中所定義。

  • [PROJECT]

    您建立部署政策的 Google Cloud 專案 ID。

  • [REGION]

    您建立部署政策的區域。

刪除部署政策資源後,受影響的發布管道和目標就不再受該政策約束,除非受到其他部署政策影響,否則不會受到限制。

記錄部署政策

評估部署政策時,系統會針對下列動作建立平台記錄項目:

  • 政策評估

    當系統評估要求並發現違反政策時,就會寫入平台記錄。 如果要求違反政策,但政策已暫停或遭到覆寫,因此要求獲得允許,系統也會寫入記錄。要求獲得核准時,系統不會寫入記錄,因為這時並未違反政策。

  • 部署政策資源變更時,Pub/Sub 通知失敗。

後續步驟