設定結構定義參照

Cloud Deploy 設定檔會定義交付管道、要部署的目標,以及這些目標的進度

交付管道設定檔可以包含目標定義,也可以位於個別檔案中。按照慣例,同時包含推送 pipeline 設定和目標設定的檔案稱為 clouddeploy.yaml,不含目標的 pipeline 設定則稱為 delivery-pipeline.yaml。但您可以隨意命名這些檔案。其他資源定義 (例如自動化部署政策) 也可以與傳送管道或目標定義位於同一個檔案中。

瞭解使用方式

Cloud Deploy 主要使用兩個設定檔:

這些可以是個別檔案,也可以在同一個檔案中設定傳送管道和目標。

推送管道設定檔的結構

以下是推送管道設定的結構,包括目標定義的屬性。部分目標屬性未列在此。 如要瞭解所有目標設定屬性,請參閱目標定義

# Delivery pipeline config
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name:
 annotations:
 labels:
description:
suspended:
serialPipeline:
 stages:
 - targetId:
   profiles: []
# Deployment strategies
# One of:
#   standard:
#   canary:
# See the strategy section in this document for details.
   strategy:
     standard:
       verify:
       predeploy:
         actions: []
       postdeploy:
         actions: []
   deployParameters:
   - values:
     matchTargetLabels:
 - targetId:
   profiles: []
   strategy:
   deployParameters:
---

# Target config
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name:
 annotations:
 labels:
description:
multiTarget:
 targetIds: []
deployParameters:
requireApproval:
#
# Runtimes
# one of the following runtimes:
gke:
 cluster:
 dnsEndpoint:
 internalIp:
 proxyUrl:
#
# or:
anthosCluster:
 membership:
#
# or:
run:
 location:
#
# or:
customTarget:
  customTargetType:
#
# (End runtimes. See documentation in this article for more details.)
#
executionConfigs:
- usages:
  - [RENDER | PREDEPLOY | DEPLOY | VERIFY | POSTDEPLOY]
  workerPool:
  serviceAccount:
  artifactStorage:
  executionTimeout:
  verbose:
---

# Custom target type config
apiVersion: deploy.cloud.google.com/v1
kind: CustomTargetType
metadata:
  name:
  annotations:
  labels:
description:
customActions:
  renderAction:
  deployAction:
  includeSkaffoldModules:
    - configs:
    # either:
    googleCloudStorage:
      source:
      path:
    # or:
    git:
      repo:
      path:
      ref:
---

# Automation config
apiVersion: deploy.cloud.google.com/v1
kind: Automation
metadata:
  name:
  labels:
  annotations:
description:
suspended:
serviceAccount:
selector:
- target:
    id:
    # or
    labels:
rules:
- [RULE_TYPE]:
  name:
  [RULE-SPECIFIC_CONFIG]

這個 YAML 包含三個主要元件:

  • 主要推送管道和進度

    設定檔可包含任意數量的管道定義。

  • 目標定義

    為求簡潔,這個範例只顯示一個目標,但目標數量不限。此外,目標也可以定義在個別檔案中。

  • 自訂目標類型定義

    自訂目標需要自訂目標類型定義。與目標和自動化功能一樣,自訂目標類型可以在與放送管道相同或不同的檔案中定義。

  • 自動化定義

    您可以在與發布管道和目標相同的檔案中,或在個別檔案中,建立任何部署自動化程序。為求簡單,這裡只顯示一個 Automation,但您可以視需要建立任意數量。

本文件其他部分會定義這些元件。

管道定義和進度

除了管道中繼資料 (例如 name),主要管道定義還包含部署順序中目標的參照清單。也就是說,列出的第一個目標是第一個部署目標。部署至該目標後,推送版本會部署至清單中的下一個目標。

以下是放送管道的設定屬性,不包括目標定義。

metadata.name

name 欄位會採用字串,且每個專案和位置都不得重複。

metadata.annotationsmetadata.labels

推送管道設定可以包含註解和標籤。管道註冊後,註解和標籤會與交付管道資源一併儲存。

詳情請參閱「使用 Cloud Deploy 的標籤和註解」。

description

說明這個推送管道的任意字串。這個說明會顯示在 Google Cloud 控制台的推送管道詳細資料中。

suspended

布林值,如果為 true,則暫停發布管道,因此無法用於建立、宣傳、復原或重新部署發布內容。此外,如果推送管道已暫停,您就無法核准或拒絕透過該管道建立的推出作業。

預設為 false

serialPipeline

定義連續推送管道的開頭。這是必要節。

stages

這份清單內含已設定這個推送管道要部署的所有目標。

清單必須按照你想要的遞送順序排列。舉例來說,如果您有 devstagingproduction 這三個目標,請依序列出,這樣第一次部署就會到 dev,最後一次部署則會到 production

將每個 stages.targetId 欄位填入對應目標定義中的 metadata.name 欄位值。在 targetId 底下,請加入 profiles

serialPipeline:
 stages:
 - targetId:
   profiles: []
   strategy:
     standard:
       verify:

targetId

識別要用於推送管道這個階段的特定目標。 這個值是目標定義中的 metadata.name 屬性。

設為 true 可在目標上啟用部署驗證strategy.standard.verify如果未指定部署策略,系統會使用 standard 部署策略,並將驗證設為 false

profiles

skaffold.yaml 中取得零或多個 Skaffold 設定檔名稱的清單。 Cloud Deploy 會在建立版本時使用 skaffold render 設定檔。使用單一設定檔時,Skaffold 設定檔可讓您在目標之間變更設定。

strategy

包括用於指定部署策略的屬性。系統支援下列策略:

  • standard:

    應用程式會完整部署至指定目標。

    這是預設部署策略。如果省略 strategy,Cloud Deploy 會使用 standard 部署策略。

  • canary:

    初期測試部署中,您會逐步部署應用程式的新版本,並以百分比為增量,取代已執行的版本 (例如 25%、50%、75%,然後完全取代)。

部署策略是依目標定義,舉例來說,您可能為 prod 目標採用 Canary 策略,但為其他目標採用標準策略 (未指定 strategy)。

詳情請參閱「使用部署策略」。

strategy 設定

本節會針對每個支援的執行階段,顯示 strategy 的設定元素。

標準部署策略

標準策略只包含下列元素:

strategy:
  standard:
    verify: true|false

verify 屬性為選用項目。預設值為 false,表示產生的推出作業不會有驗證階段。

如果是標準部署策略,可以省略 strategy 元素。

初期測試部署策略

以下各節說明如何為 Cloud Deploy 支援的每個執行階段,設定灰度發布策略。

針對 Cloud Run 目標
strategy:
  canary:
    runtimeConfig:
      cloudRun:
        automaticTrafficControl: true | false
    canaryDeployment:
      percentages: [PERCENTAGES]
      verify: true | false
適用於 GKE 和 GKE Enterprise 目標

下列 YAML 顯示如何使用以服務為基礎的網路,為 GKE 或 GKE Enterprise 目標設定部署策略:

      canary:
        runtimeConfig:
          kubernetes:
            serviceNetworking:
              service: "SERVICE_NAME"
              deployment: "DEPLOYMENT_NAME"
              disablePodOverprovisioning: true | false
        canaryDeployment:
          percentages: [PERCENTAGES]
          verify: true | false

下列 YAML 顯示如何使用 Gateway API,為 GKE 或 GKE Enterprise 目標設定部署策略:

      canary:
        runtimeConfig:
          kubernetes:
            gatewayServiceMesh:
              httpRoute: "HTTP_ROUTE_NAME"
              service: "SERVICE_NAME"
              deployment: "DEPLOYMENT_NAME"
              routeUpdateWaitTime: "WAIT_TIME"
              routeDestinations:
                destinationIds: ["KEY"]
                propagateService: [true|false]
        canaryDeployment:
          percentages: ["PERCENTAGES"]
          verify: true | false

請注意,在本例中,routeUpdateWaitTime 這是因為 Gateway API 會使用 HTTPRoute 資源分割流量,有時傳播對 HTTPRoute 所做的變更時會發生延遲。在這種情況下,要求可能會遭到捨棄,因為流量會傳送至無法使用的資源。如果發現有延遲,可以使用 routeUpdateWaitTime 讓 Cloud Deploy 在套用 HTTPRoute 變更後等待。

下列 YAML 顯示如何設定自訂 Canary 部署策略 (適用於服務網路Gateway APICloud Run),或自訂自動 Canary 部署策略 (適用於服務網路Gateway APICloud Run)。自訂初期測試會省略 runtimeConfig 部分的執行階段專屬設定,但自動和自訂自動初期測試設定會納入這類設定。##

strategy:
       canary:
         # Runtime configs are configured as shown in the
         # Canary Deployment Strategy section of this document.
         runtimeConfig:

         # Manual configuration for each canary phase
         customCanaryDeployment:
           - name: "PHASE1_NAME"
             percent: PERCENTAGE1
             profiles: [ "PROFILE1_NAME" ]
             verify: true | false
           - 
           - name: "stable"
             percent: 100
             profiles: [ "LAST_PROFILE_NAME" ]
             verify: true|false

verify

選用布林值,指出是否支援這個目標的部署作業驗證。預設值為 false

啟用部署驗證時,skaffold.yaml 中也需要 verify。如果未提供這項屬性,驗證工作就會失敗。

deployParameters

使用部署參數時,可指定鍵/值組合,將值傳遞至符合標籤目標的資訊清單。

您也可以在目標中加入這項設定。

在推送管道上設定的部署作業參數會使用標籤來比對目標:

deployParameters:
- values:
    someKey: "value1"
  matchTargetLabels:
    label1: firstLabel
- values:
    someKey: "value2"
  matchTargetLabels:
    label2: secondLabel

在本例中,鍵有兩個值,且每個值都有標籤。如果目標有相符的標籤,這個值就會套用至該目標的資訊清單。

predeploy」和「postdeploy」工作

您可藉此參照個別定義的自訂動作 (位於 skaffold.yaml 中),在部署作業 (predeploy) 之前和驗證作業 (如有) 之後執行。如果沒有驗證作業,則會在部署作業之後執行部署後作業。postdeploy

部署掛鉤會在 strategy.standardstrategy.canary 下方設定,如下所示:

serialPipeline:
  stages:
  - targetId: 
    strategy:
      standard:
        predeploy:
          actions: [ACTION_NAME]
        postdeploy:
          actions: [ACTION_NAME]

其中 ACTION_NAME 是在 skaffold.yaml 中為 customActions.name 設定的名稱。

您可以在任何策略 (例如 standardcanary) 下設定 predeploypostdeploy 工作。

如要進一步瞭解如何設定及使用部署前和部署後掛鉤,請參閱「在部署前後執行掛鉤」。

目標定義

您可以將目標定義納入傳送管道定義檔,也可以在另一個檔案中指定目標。您可以在專案中重複使用目標名稱,但名稱在放送管道中不得重複。

您可以在多個發布管道之間重複使用目標。不過,您只能在單一推送管道的進度中參照目標一次。

另請參閱:自訂目標類型定義

適用於 GKE 目標

下列 YAML 顯示如何設定部署至 GKE 叢集的目標:

     apiVersion: deploy.cloud.google.com/v1
     kind: Target
     metadata:
      name:
      annotations:
      labels:
     description:
     deployParameters:
     multiTarget:
      targetIds: []

     requireApproval:
     gke:
      cluster: projects/[project_name]/locations/[location]/clusters/[cluster_name]
      dnsEndpoint:
      internalIp:
      proxyUrl:

     associatedEntities:
       [KEY]:
         gkeClusters:
         - cluster: projects/[project_name]/locations/[location]/clusters/[cluster_name]
           dnsEndpoint: [true|false]
           internalIp: [true|false]
           proxyUrl:

     executionConfigs:
     - usages:
       - [RENDER | PREDEPLOY | DEPLOY | VERIFY | POSTDEPLOY]
       workerPool:
       serviceAccount:
       artifactStorage:
       executionTimeout:
       verbose:

metadata.name

這個目標的名稱。此名稱不得重複。

metadata.annotationsmetadata.labels

目標設定支援 Kubernetes 註解標籤,但 Cloud Deploy 並未強制要求。

註解和標籤會與目標資源一併儲存。詳情請參閱搭配 Cloud Deploy 使用標籤和註解

description

這個欄位會採用任意字串,說明這個目標的用途。

deployParameters

您可以在任何目標上加入部署參數和值。這些值會在算繪後,指派給資訊清單中的對應鍵。

deployParameters 節會採用鍵/值組合,如下所示:

deployParameters:
  someKey: "someValue"
  someOtherKey: "someOtherValue"

如果您在多重目標上設定部署參數,系統會將值指派給所有多重目標的子目標資訊清單。

multiTarget.targetIds: []

這個屬性為選用屬性,用於設定多重目標,以進行平行部署

值是以半形逗號分隔的子目標清單。子項目標會設定為一般目標,且不包含這項 multiTarget 屬性。

requireApproval

是否需要手動核准才能推送至這個目標。可以是 truefalse

這是選用屬性。預設為 false

設定平行部署時,您只需要在多重目標上要求核准,不必在子目標上要求核准。

gke

僅適用於 GKE 叢集,用於識別應用程式部署位置的叢集資源路徑:

gke:
  cluster: projects/[project_name]/locations/[location]/clusters/[cluster_name]
  • project_name

    叢集所在的 Google Cloud 專案。

  • location

    叢集所在位置。例如,us-central1。叢集也可以是區域叢集 (us-central1-c)。

  • cluster_name

    叢集名稱,與Google Cloud 控制台的叢集清單中顯示的名稱相同。

範例如下:

gke:
  cluster: projects/cd-demo-01/locations/us-central1/clusters/prod

設定多目標時,請省略 gke 屬性。GKE 叢集改為在對應的子目標中設定。

如需執行環境屬性的說明,請參閱本文中的 executionConfigs。如要瞭解如何將 HTTPRoute 部署至替代的非目標叢集,請參閱將 HTTPRoute 部署至其他叢集

dnsEndpoint

設為 true 時,Cloud Deploy 會使用 DNS 端點連線至 GKE 叢集,而非預設端點 (可能是公開 IP、私人 IP 或 DNS 端點,視叢集設定而定)。

這個選項無法與 internalIp 選項同時使用。

internalIp

設為 true 時,Cloud Deploy 會使用私人 IP 位址連線至 GKE 叢集,而非預設端點 (可能是公開 IP、私人 IP 或 DNS 端點,視叢集設定而定)。

這個選項無法與 dnsEndpoint 選項同時使用。因為 dnsEndpoint 的網路設定簡單許多,我們建議改用這個方法

proxyUrl

如果您透過 HTTP Proxy 存取叢集,請在此提供 proxyUrl 屬性。這個值是 Proxy 的網址,連線至叢集時會傳遞至 kubectl

針對 Cloud Run 目標

下列 YAML 顯示如何設定部署至 Cloud Run 服務的目標:

     apiVersion: deploy.cloud.google.com/v1
     kind: Target
     metadata:
      name:
      annotations:
      labels:
     description:
     multiTarget:
      targetIds: []

     requireApproval:
     run:
      location: projects/[project_name]/locations/[location]

     executionConfigs:
     - usages:
       - [RENDER | PREDEPLOY|  DEPLOY | VERIFY | POSTDEPLOY]
       workerPool:
       serviceAccount:
       artifactStorage:
       executionTimeout:
       verbose:

metadata.name

這個目標的名稱。每個區域的名稱不得重複。

metadata.annotationsmetadata.labels

目標設定支援註解和標籤,但 Cloud Deploy 並不要求這些項目。

註解和標籤會與目標資源一併儲存。詳情請參閱搭配 Cloud Deploy 使用標籤和註解

description

這個欄位會採用任意字串,說明這個目標的用途。

multiTarget.targetIds: []

這個屬性為選用屬性,用於設定多重目標,以進行平行部署

值是以半形逗號分隔的子目標清單。子項目標會設定為一般目標,且不包含這項 multiTarget 屬性。

requireApproval

是否需要手動核准才能推送至這個目標。可以是 truefalse

這是選用屬性。預設為 false

設定平行部署時,您只需要核准多重目標,不必核准子目標。

run

僅適用於 Cloud Run 服務,服務的建立位置:

run:
  location: projects/[project_name]/locations/[location]
  • project_name

    服務所在的 Google Cloud 專案。

  • location

    服務的所在位置。例如 us-central1

設定 [多重目標] 時,請省略 run 屬性。Cloud Run 服務的位置改為在對應的子項目標中設定。

如需執行環境屬性的說明,請參閱本文中的executionConfigs

適用於 GKE Enterprise 目標

部署至 GKE 叢集的目標設定與GKE 目標的設定類似,但屬性是 anthosCluster.membership,而非 gke.cluster,資源路徑也不同,且不適用特定連線方法 (dnsEndpointinternalIp)。

anthosCluster:
  membership: projects/[project_name]/locations/global/memberships/[membership_name]
  • project_name

    GKE Enterprise 叢集所在的 Google Cloud 專案。

  • /location/global/

    叢集的註冊位置。global,適用於所有情況。

  • membership_name

    GKE Enterprise 叢集成員資格的名稱。

範例如下:

anthosCluster:
  membership: projects/cd-demo-01/locations/global/memberships/prod

設定 [多重目標] 時,請省略 anthosCluster 屬性。GKE Enterprise 叢集改為在對應的子目標中設定。

如要進一步瞭解如何部署至 GKE 叢集,請參閱「部署至 Anthos 使用者叢集」。

自訂目標

自訂目標的設定與所有其他目標類型類似,但不會包含 gke 節、run 節或 anthosCluster 節。

自訂目標則包含 customTarget 節:

customTarget:
  customTargetType: [CUSTOM_TARGET_TYPE_NAME]

其中 CUSTOM_TARGET_TYPE_NAME 是您在自訂目標類型定義中使用的名稱。

範例如下:

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: sample-env
customTarget:
  customTargetType: basic-custom-target

executionConfigs

一組欄位,用於指定這個目標的非預設執行環境

  • usages

    RENDERDEPLOY,或兩者皆是,加上 PREDEPLOYVERIFYPOSTDEPLOY (如果目標驗證部署掛鉤已啟用)。這些值會指出要使用這個執行環境,對這個目標執行哪些作業。如要指出預先部署掛鉤、算繪、部署、後期部署掛鉤和驗證作業應使用自訂執行環境,請按照下列方式設定:

    usages:
    - RENDER
    - PREDEPLOY
    - DEPLOY
    - VERIFY
    - POSTDEPLOY
    

    如果管道階段已啟用驗證,且您未在 usages 節中指定 VERIFY,Cloud Deploy 會使用預設執行環境進行驗證。前置部署和後置部署掛鉤的運作方式相同。

    不過,如果 RENDERDEPLOY 有自訂執行環境,則必須VERIFYPREDEPLOYPOSTDEPLOY 指定一個執行環境 (如果這些環境已在推送管道中設定)。VERIFYPREDEPLOY,而 POSTDEPLOY 可以與 RENDERDEPLOY 位於同一個 usages,也可以位於不同的 usages

    除非 RENDERDEPLOY 是在相同或個別的自訂執行環境中指定,否則無法指定 usages.VERIFYusages.PREDEPLOYusages.POSTDEPLOY

  • workerPool

    要使用的工作站集區設定。這會採用資源路徑,識別要用於這個目標的 Cloud Build 工作站集區。例如:

    projects/p123/locations/us-central1/workerPools/wp123

    如要使用預設的 Cloud Build 集區,請省略這個屬性。

    指定目標可以有兩個 workerPool (一個用於 RENDER,另一個用於 DEPLOY)。設定預設集區時,您可以指定替代服務帳戶或儲存空間位置,也可以同時指定兩者。

  • serviceAccount

    要用於這項作業的服務帳戶名稱 (RENDERDEPLOY),適用於這個目標。

  • artifactStorage

    要用於這項作業的 Cloud Storage 值區 (RENDERDEPLOY),而非預設值區。

  • executionTimeout

    (選用步驟) 設定 Cloud Build 為 Cloud Deploy 執行的作業逾時時間 (以秒為單位)。預設值為 3600 秒 (1 小時)。
    範例:executionTimeout: "5000s"

  • verbose

    (選用步驟) 如果 true,下列工具的詳細程度會設為 debug

支援的替代語法

本文所述的 executionConfigs 設定為新設定。系統仍支援先前的語法:

executionConfigs:
- privatePool:
    workerPool:
    serviceAccount:
    artifactStorage:
  usages:
  - [RENDER | DEPLOY]
- defaultPool:
    serviceAccount:
    artifactStorage:
  usages:
  - [RENDER | DEPLOY]

設定多部署目標executionConfigs 節時,每個子目標都可以從該多部署目標繼承執行環境

自訂目標類型定義

本節說明用於定義自訂目標類型的欄位。

與標準目標和自動化功能一樣,CustomTargetType 定義可以包含在放送管道定義中,也可以放在個別檔案中。

下列 YAML 顯示如何設定自訂目標類型:

apiVersion: deploy.cloud.google.com/v1
kind: CustomTargetType
metadata:
  name: [CUSTOM_TARGET_TYPE_NAME]
  annotations:
  labels:
description:
customActions:
  renderAction: [RENDER_ACTION_NAME]
  deployAction: [DEPLOY_ACTION_NAME]
  includeSkaffoldModules:
    - configs:
    # either:
    googleCloudStorage:
      source:
      path:
    # or:
    git:
      repo:
      path:
      ref:

其中:

  • [CUSTOM_TARGET_TYPE_NAME]

    這是您為這個自訂目標類型定義指定的任意名稱。在任何使用您定義的自訂目標類型的目標中,都會參照這個名稱的目標定義

  • [RENDER_ACTION_NAME]

    是自訂算繪動作的名稱。這個值是 skaffold.yaml 中定義的 customAction.name

  • [DEPLOY_ACTION_NAME]

    是自訂部署動作的名稱。這個值是 skaffold.yaml 中定義的 customAction.name

  • 如要瞭解 includeSkaffoldModules,請參閱「使用遠端 Skaffold 設定」。

自動化定義

本節說明用於定義 Cloud Deploy automation 資源的欄位。

與目標相同,Automation 定義可納入提交管道定義,或位於個別檔案中。

如要進一步瞭解 Cloud Deploy 中的自動化作業,請參閱自動化說明文件

以下 YAML 顯示如何設定自動化程序。請注意,每個自動化規則的具體內容都不相同。(如要瞭解如何設定可用的自動規則類型,請參閱「使用自動規則」一文)。

apiVersion: deploy.cloud.google.com/v1
kind: Automation
metadata:
  name: [PIPELINE_NAME]/[PURPOSE]
  labels:
  annotations:
description: [DESCRIPTION]
suspended: true | false
serviceAccount: [SERVICE_ACCOUNT_ID]
selector:
  targets:
    -  id: [TARGET_ID]
       labels:
         [LABEL_KEY]:[LABEL_VALUE]

rules:
- [RULE_TYPE]:
    name:[RULE_NAME]
  [RULE-SPECIFIC_CONFIG]

其中:

  • [PIPELINE_NAME]

    與使用這項自動化功能的發布管道中的 metadata.name 值相同。所有自動化作業都專屬於建立時所用的推送軟體更新管道。也就是說,您無法在多個推送管道之間共用自動化作業。

  • [PURPOSE]

    這是這項自動化動作的進一步說明名稱。通常這是自動執行的動作。例如 my-app-pipeline/promote

  • labelsannotations 是要與這項自動化作業建立關聯的任何標籤或註解。

  • [DESCRIPTION]

    這是這項自動化動作的說明 (選填)。

  • suspended

    truefalse,指出這項自動化動作是否有效或已暫停。 如果設為 true,系統就不會使用自動化功能。這項功能有助於測試自動化功能,而不影響放送管道

  • [SERVICE_ACCOUNT_ID]

    這是用來執行自動化的服務帳戶 ID。舉例來說,如果自動化程序使用 promoteReleaseRule,則此服務帳戶會執行發行內容升級作業,因此需要升級發行內容所需的權限

    這項屬性必須有值。Cloud Deploy 不會使用預設服務帳戶執行自動化作業。

    這個服務帳戶必須具備下列權限:

    • actAs 權限,模擬執行服務帳戶。

    • 權限,才能執行自動化作業,例如 clouddeploy.releases.promote 升級版本,或 clouddeploy.rollouts.advance 將推出作業推進至下一個階段。

  • [TARGET_ID]

    這是指使用這項自動化功能的目標 ID。雖然自動化作業會與推送管道建立關聯,但只會在指定目標上執行。

    您可以將此值設為 *,選取放送管道中的所有目標。

  • [LABEL_KEY]:[LABEL_VALUE]

    這是鍵/值組合,可與目標上定義的鍵/值組合比對。這會選取與放送管道相關聯的所有目標,這些目標具有相同的標籤和值。

  • [RULE_TYPE]

    這是用於這項自動化動作的自動化規則名稱。這可以是 promoteReleaseRuletimedPromoteReleaseRuleadvanceRolloutRulerepairRolloutRule。自動化動作可以包含多項規則,包括多個相同的 RULE_TYPE。舉例來說,您可以在同一項自動化作業中設定多項 promoteReleaseRule 規則。瞭解詳情

  • [RULE_NAME]

    規則名稱。此名稱在發布管道中不得重複。這項屬性必須有值。

  • [RULE-SPECIFIC_CONFIG]

    每種支援的自動化類型都有不同的設定。這些設定會顯示在「使用自動規則」中。

部署政策定義

本節說明用於定義部署政策的欄位。

與其他 Cloud Deploy 資源一樣,您可以將 DeployPolicy 定義納入推送管道定義或個別檔案。

下列 YAML 顯示如何設定部署政策:

apiVersion: deploy.cloud.google.com/v1
kind: DeployPolicy
metadata:
  name: [POLICY_NAME]
  annotations: [ANNOTATIONS]
  labels: [LABELS]
description: [DESCRIPTION]
suspended: [true | false]
selectors:
- deliveryPipeline:
    id: [PIPELINE_ID]
    labels:
      [LABEL_KEY]:[LABEL_VALUE]
  target:
    id: [TARGET_ID]
    labels:
      [LABEL_KEY]:[LABEL_VALUE]
rules:
  - [RULE_TYPE]
      [CONFIGS]

其中:

  • [DESCRIPTION]

    是說明這項政策的選用文字。

  • [POLICY_NAME]

    原則的名稱。這個欄位會採用字串,且每個專案和位置都不得重複。這必須是小寫英文字母、數字和連字號,第一個字元須為英文字母,最後一個字元則是英文字母或數字,且最多 63 個字元。這個名稱會做為Google Cloud 控制台中的顯示名稱。

  • [ANNOTATIONS][LABELS]

    政策可包含註解和標籤,這些項目會在政策建立後成為政策資源的一部分。詳情請參閱搭配 Cloud Deploy 使用註解和標籤

  • suspended: [true | false]

    suspended 設為 true 會停用這項政策。

  • [PIPELINE_ID]

    這是要套用這項政策的發布管道 ID。您可以使用 * 表示所有管道。這個 ID 與提交管道中的 metadata.name 屬性相同。

  • [TARGET_ID]

    這是要套用這項政策的目標 ID。您可以使用 * 表示所有目標。這個 ID 與目標上的 metadata.name 屬性相同。

  • [LABEL_KEY]:[LABEL_VALUE]

    這是鍵/值組合,可與傳送管道或目標上定義的鍵/值組合比對。這會選取具有相同標籤和值的所有管道或目標。除了 id 之外,你也可以指定 labels

  • [RULE_TYPE]

    您要設定的特定政策規則類型。唯一有效的值為 rolloutRestriction

  • [CONFIGS]

    您要建立特定政策規則的設定屬性集。本參考資料的後續章節會說明各項可用規則的設定。

部署政策規則

本節說明如何設定各項部署政策規則。

rolloutRestriction

rolloutRestriction 規則可防止 Cloud Deploy 在指定的時間範圍內,對部署政策的 selectors 所指出的推送管道和目標,執行特定作業

以下 YAML 顯示如何設定 rolloutRestriction 規則:

rules:
- rolloutRestriction:
    id: [RULE_ID]
    actions:
    - [ACTIONS]
    invokers:
    - [INVOKERS]
    timeWindows:
      timeZone: [TIMEZONE]
      oneTimeWindows:
      - start: [START_DATE_TIME]
        end: [END_DATE_TIME]
      weeklyWindows:
      - daysOfWeek:
        - [DAY_OF_WEEK]
        - [DAY_OF_WEEK]
        startTime: [START_TIME]
        endTime: [END_TIME]

其中:

  • RULE_ID

    這項規則的 ID。(這是必要資訊)。必須包含小寫英文字母、數字和連字號,開頭須為英文字母,結尾須為英文字母或數字,且最多只能使用 63 個字元。部署政策中的名稱不得重複。

  • ACTIONS

    選用:要限制的推出動作 (政策的一部分)。如果留空,系統會限制所有動作。有效的值包括:

    • ADVANCE

      無法推進推出階段。

    • APPROVE

      無法核准推出促銷活動。

    • CANCEL

      推出作業無法取消。

    • CREATE

      無法建立推出作業。

    • IGNORE_JOB

      工作無法忽略

    • RETRY_JOB

      工作無法重試

    • ROLLBACK

      推出後就無法復原

    • TERMINATE_JOBRUN

      無法終止工作執行作業

  • INVOKERS

    指定叫用者後,系統會根據受限動作是由使用者還是部署自動化程序叫用,篩選政策強制執行作業。有效值如下:

    • USER

      這項動作是由使用者發起。例如,使用 gcloud CLI 指令手動建立推出作業。

    • DEPLOY_AUTOMATION

      Cloud Deploy 的自動化動作

    您可以指定其中一個值或兩個值。如果您未指定任何項目,預設值為兩者。

  • TIMEZONE

    時區 (採用 IANA 格式),用於表示時間範圍。例如:America/New_York。必填。

  • START_DATE_TIME

    對於 oneTimeWindows,這是限制期開始的日期和時間,格式為 "yyyy-mm-dd hh:mm"。如要表示一天開始,請使用 00:00。這是必填欄位。

  • END_DATE_TIME

    對於 oneTimeWindows,這是指限制時間範圍的結束日期和時間,格式為 "yyyy-mm-dd hh:mm"。如要設定一天結束的時間,請使用 24:00。這是必填欄位。

  • DAY_OF_WEEK

    如為 weeklyWindows,則為星期幾,SUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAY。如果將這個欄位留空,系統會比對一週內的所有日期

  • START_TIME

    對於 weeklyWindows,這是指指定星期幾的開始時間。如要加入開始時間,就必須加入結束時間。如要表示一天開始,請使用 00:00

  • END_TIME

    weeklyWindows:指定星期幾的結束時間。如要加入開始時間,就必須加入結束時間。如要結束當天的工作,請使用 24:00

後續步驟