配置架构参考文档

Cloud Deploy 配置文件定义了交付流水线、要部署到的目标以及这些目标的进展

交付流水线配置文件可以包含目标定义,也可以位于一个或多个单独的文件中。按照惯例,包含交付流水线配置和目标配置的文件称为 clouddeploy.yaml,不包含目标的流水线配置称为 delivery-pipeline.yaml。不过,您可以为这些文件指定所需的任意名称。其他资源定义(例如自动化部署政策)也可以与交付流水线或目标定义位于同一文件中。

分门别类 (What goes where)

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:
       predeploy:
         tasks: []
       verify:
         tasks: []
       analysis:
       postdeploy:
         tasks: []
   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 | ANALYSIS]
  workerPool:
  serviceAccount:
  artifactStorage:
  executionTimeout:
  verbose:
---

# Custom target type config
apiVersion: deploy.cloud.google.com/v1
kind: CustomTargetType
metadata:
  name:
  annotations:
  labels:
description:
tasks:
  render:
  deploy:
---

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

此 YAML 有三个主要组成部分:

  • 主要交付流水线和进展

    配置文件可以包含任意数量的流水线定义。

  • 目标定义

    为简单起见,此示例仅显示一个目标,但目标可以是任何数量。此外,目标可以在一个或多个单独的文件中定义。

  • 自定义目标类型定义

    自定义目标需要自定义目标类型定义。与目标和自动化操作一样,自定义目标类型可以在与交付流水线相同的文件中定义,也可以在单独的文件中定义。

  • Automation 定义

    您可以在与交付流水线和目标相同的文件中或在单独的文件中创建任何部署自动化。为简单起见,此处仅显示一个 Automation,但您可以根据需要创建任意数量的 Automation

本文档的其余部分定义这些组成部分。

流水线定义和进展

除了流水线元数据(例如 name)之外,主要流水线定义还包括按部署序列顺序列出的对目标的引用列表。也就是说,列出的第一个目标是第一个部署目标。部署到该目标后,提升版本会部署到列表中的下一个目标。

以下是交付流水线的配置属性,不包括目标定义。

metadata.name

name 字段采用的字符串对于每个项目和位置必须是唯一的。

metadata.annotationsmetadata.labels

交付流水线配置可以包含注释和标签。在注册流水线后,注释和标签会与交付流水线资源一起存储。

如需了解详情,请参阅将标签和注释与 Cloud Deploy 搭配使用

description

描述此交付流水线的任意字符串。此说明显示在 Google Cloud 控制台中的交付流水线详细信息中。

suspended

一个布尔值,如果为 true,则暂停交付流水线,使其无法用于创建、升级、回滚或重新部署版本。此外,如果交付流水线处于暂停状态,您将无法批准或拒绝通过该流水线创建的发布。

默认值为 false

serialPipeline

串行进度交付流水线定义的开头。此 stanza 是必需的。

stages

将此交付流水线配置为要部署到的所有目标的列表。

该列表必须采用所需的交付顺序。例如,如果您具有名为 devstagingproduction 的目标,请按照相同的顺序列出它们,以便您的第一个部署是 dev,最后一个部署是 production

使用相应的目标定义中 metadata.name 字段的值填充每个 stages.targetId 字段。并且在 targetId 下方,包括 profiles

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

targetId

标识要用于交付流水线此阶段的特定目标。该值是目标定义中的 metadata.name 属性。

strategy.standard.verify 设置为 true 可在目标上启用部署验证。如果未指定任何部署策略,则使用 standard 部署策略,并将验证设置为 false

profiles

skaffold.yaml 中获取零个或零个以上 Skaffold 配置文件名称的列表。Cloud Deploy 在创建版本时将配置文件与 skaffold render 搭配使用。借助 Skaffold 配置文件,您可以在使用单个配置文件时更改目标之间的配置。

strategy

包含用于指定部署策略的属性。支持以下策略:

  • standard:

    应用已完全部署到指定目标。

    这是默认的部署策略。如果您省略 strategy,Cloud Deploy 会使用 standard 部署策略。

  • canary:

    Canary 部署中,您可以逐步部署应用的新版本,并以百分比增量(例如,25%、50%、75%,然后完全部署)替换已运行的版本。

部署策略是按目标定义的。例如,您可能为 prod 目标设置了 Canary 策略,但为其他目标设置了标准策略(未指定 strategy)。

如需了解详情,请参阅使用部署策略

strategy 配置

本部分针对每个受支持的运行时显示了 strategy 的配置元素。

标准部署策略

标准策略仅包含以下要素:

strategy:
  standard:
    verify:
      tasks: []
    analysis:

借助 verify 属性,您可以引用一个或多个要执行的任务来验证部署。如果已配置,验证任务将在“deploy”作业完成后立即按顺序运行。

verify 是可选属性。如果未指定,则生成的发布中不会包含任何验证作业。

analysis stanza 是可选的,可与 Cloud Deploy 分析搭配使用。

对于标准部署策略,您可以省略 strategy 元素。

Canary 部署策略

以下部分介绍了 Cloud Deploy 支持的每种运行时的Canary 部署策略的配置。

对于 Cloud Run 目标
strategy:
  canary:
    runtimeConfig:
      cloudRun:
        automaticTrafficControl: true | false
    canaryDeployment:
      percentages: [PERCENTAGES]
      verify:
        tasks: []
      analysis:

对于 Cloud Run 目标,AutomaticTrafficControl 必须为 true,除非您要配置自定义 Canary

对于 GKE 和 GKE 关联集群目标平台

以下 YAML 展示了如何使用基于服务的网络为部署到 GKE 或附加 GKE 集群的目标配置部署策略:

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

以下 YAML 展示了如何使用 Gateway API 为部署到 GKE 或 GKE 附加集群的目标配置部署策略:

      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:
            tasks: []

请注意此示例中的 routeUpdateWaitTime。之所以包含此内容,是因为 Gateway API 使用 HTTPRoute 资源拆分流量,有时传播对 HTTPRoute 所做的更改会延迟。在这种情况下,请求可能会被丢弃,因为流量会发送到不可用的资源。如果您发现此延迟,可以使用 routeUpdateWaitTime 使 Cloud Deploy 在应用 HTTPRoute 更改后等待。

以下 YAML 展示了如何配置自定义 Canary 部署策略(适用于服务联网Gateway APICloud Run)或自定义自动化 Canary 部署策略(适用于服务联网Gateway APICloud Run)。在 runtimeConfig 部分中,特定于运行时的配置在自定义 Canary 中被省略,但在自动化和自定义自动化 Canary 配置中包含。

自定义 Canary 配置

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:
          tasks: []
      - 
      - name: "stable"
        percent: 100
        profiles: [ "LAST_PROFILE_NAME" ]
        analysis: [ANALYSIS_CONFIGS]
        verify:
          tasks: []

verify

verify stanza 可包含在 strategy.standardstrategy.canary.canaryDeploymentstrategy.canary.customCanaryDeployment 中每个阶段下。用于为目标启用部署验证。此 stanza 是可选的;如果省略,则不会针对发布或 Canary 阶段执行验证。

您可以通过以下两种方式之一配置 verify

  • 设置 verify: true

    如果您这样做,还必须在 skaffold.yaml 中配置 verify stanza,如配置 Skaffold 以进行验证中所述。

  • 使用一个或多个任务配置 verify 以进行验证:

    verify:
      tasks: [VERIFY_TASKS]
    

analysis

部署分析(可用于针对 Google Cloud Observability 提醒运行一项或多项检查)是在 strategy stanza 中配置的。如需了解配置详情,请参阅分析定义

deployParameters

允许您指定键值对,以便在使用部署参数时将值传递给标签匹配目标的清单。

您还可以将其包含在目标中。

在交付流水线上设置的部署参数使用标签来匹配目标:

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

在此示例中,为键提供了两个值,并且每个值都有一个标签。该值会应用于具有匹配标签的任何目标的清单。

predeploypostdeploy 作业

部署前钩子和部署后钩子是指在发布中的部署作业之前或之后运行的作业。您可以通过以下两种方式之一定义 predeploy 和 postdeploy 钩子:

预部署作业在发布作业中紧随部署作业之前运行。部署后作业在发布中的所有其他作业(包括验证和分析作业,如果适用)之后运行。

部署钩子在 strategy.standardstrategy.canary 下配置,如下所示:

  • 使用 tasks

    serialPipeline:
      stages:
      - targetId:
        strategy:
          standard:
            predeploy:
              tasks: [PREDEPLOY_TASKS]
            postdeploy:
              tasks: [POSTDEPLOY_TASKS]
    

    其中:

    • PREDEPLOY_TASKS 是您要在预部署钩子中运行的一个或多个任务

    • POSTDEPLOY_TASKS 是您要在部署后钩子中运行的一个或多个任务

  • 使用 actions(和 Skaffold)

    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 | ANALYSIS]
       workerPool:
       serviceAccount:
       artifactStorage:
       executionTimeout:
       verbose:

metadata.name

此目标的名称。此名称在每个区域中必须是唯一的。

metadata.annotationsmetadata.labels之间

目标配置支持 Kubernetes 注释标签,但 Cloud Deploy 不需要它们。

注释和标签与目标资源一起存储。如需了解详情,请参阅将标签和注释与 Cloud Deploy 搭配使用

description

此字段采用任意字符串,用于描述此目标的使用。

deployParameters

您可以在任何目标上添加部署参数以及相应的值。这些值会在渲染后分配给清单中的相应键。

deployParameters stanza 采用键值对,如下所示:

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 部署到其他集群

associatedEntities.[KEY]

在 Canary 配置中,您可以使用此名称来引用 routeDestinations 中的实体。了解详情

dnsEndpoint

如果设置为 true,Cloud Deploy 将使用 DNS 端点(而不是默认端点)连接到 GKE 集群,而默认端点可能是公共 IP、专用 IP 或 DNS 端点,具体取决于集群配置。

此选项不能与 internalIp 选项同时使用。

internalIp

如果设置为 true,Cloud Deploy 将使用专用 IP 地址连接到 GKE 集群,而不是默认端点(可能是公共 IP、专用 IP 或 DNS 端点,具体取决于集群配置)。

此选项不能与 dnsEndpoint 选项同时使用。由于 dnsEndpoint 的网络配置要简单得多,因此我们建议改用该配置

proxyUrl

如果您通过 HTTP 代理访问集群,请在此处提供 proxyUrl 属性。该值是代理的网址,在连接到集群时会传递给 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 | ANALYSIS]
       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 关联集群目标

部署到 GKE 关联集群的目标配置与GKE 目标的目标配置类似,不同之处在于,属性为 anthosCluster.membership 而不是 gke.cluster,资源路径不同,并且不适用特定的连接方法(dnsEndpointinternalIp)。

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

    集群所在的 Google Cloud 项目。

  • /location/global/

    集群注册的位置。global,在所有情况下。

  • membership_name

    集群成员资格的名称。

示例如下:

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

配置 [多目标] 时,请省略 anthosCluster 属性。而是改为在相应的子目标中配置集群。

如需详细了解如何部署到 GKE 关联集群,请参阅部署到 GKE 关联集群

对于自定义目标

自定义目标的配置与其他所有目标类型类似,只是不包含 gke stanza、run stanza 或 anthosCluster stanza。

不过,自定义目标包含一个 customTarget stanza:

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
    - ANALYSIS
    

    如果在流水线阶段启用了验证,并且您未在 usages stanza 中指定 VERIFY,Cloud Deploy 会使用默认的执行环境进行验证。预部署和部署后钩子的工作方式相同。

    不过,如果 RENDERDEPLOY 有自定义执行环境,则您必须VERIFYPREDEPLOYPOSTDEPLOYANALYSIS 指定一个执行环境(如果它们已在交付流水线上配置)。VERIFYPREDEPLOYPOSTDEPLOYANALYSIS 可以与 RENDERDEPLOY 位于同一 usages 中,也可以位于不同的 usages 中。

    除非在同一自定义执行环境或单独的自定义执行环境中指定了 RENDERDEPLOY,否则您无法指定 usages.VERIFYusages.PREDEPLOYusages.POSTDEPLOYusages.ANALYSIS

  • workerPool

    要使用的工作器池的配置。此属性采用资源路径,用于标识要用于此目标的 Cloud Build 工作器池。例如:

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

    如需使用默认 Cloud Build 池,请省略此属性。

    一个给定目标可以有两个 workerPool(一个用于 RENDER,一个用于 DEPLOY)。配置默认池时,您可以指定备用服务账号和/或存储位置。

  • serviceAccount

    用于此目标的操作(RENDERDEPLOY)的服务账号名称。

  • artifactStorage

    为此目标执行此操作(RENDERDEPLOY)使用的 Cloud Storage 存储桶(而非默认存储桶)。

  • 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 stanza 时,每个子目标都可以从该多目标继承执行环境

自定义目标类型定义

本部分介绍了用于定义自定义目标类型的字段

与标准目标和自动化一样,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 配置

Automation 定义

本部分介绍了用于定义 Cloud Deploy 自动化资源的字段。

与目标一样,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]:
    id:[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]

    政策的名称。此字段采用的字符串对于每个项目和位置必须是唯一的。该 ID 只能包含小写字母、数字和连字符,第一个字符必须是字母,最后一个字符必须是字母或数字,且长度不得超过 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]

    是一个键值对,用于与交付流水线或目标上定义的键值对进行匹配。这样会选择具有相同标签和值的所有流水线或目标。您可以指定 labels,也可以指定 labelsid

  • [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

    相应规则的标识符。这是必填项。 必须由小写字母、数字和连字符组成,第一个字符必须是字母,最后一个字符必须是字母或数字,且长度不得超过 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

分析定义

借助 analysis stanza,您可以配置分析作业,以针对 Google Cloud Observability 提醒或其他监控提供商的类似数据运行一项或多项检查,从而根据这些提醒采取行动。

analysis stanza 会因您是为 Google Cloud Observability 配置它,还是为使用自定义分析的其他提供商配置它而有所不同。

analysis 适用于 Google Cloud Observability

analysis stanza 可直接在部署策略配置(strategy.standard.analysis,用于标准策略)中使用。如果您想按阶段配置分析,请使用自定义 Canary (strategy.canary.customCanaryDepolyment.phaseConfigs.phaseId.analysis)。

analysis:
  duration: DURATION
  googleCloud:
    alertPolicyChecks:
    - id: CHECK_ID
      alertPolicies:
      - ALERT_POLICY_NAME
      labels:
        LABEL_KEY: LABEL_VALUE

以下是使用 Google Cloud Observability 时 analysis 的配置属性:

  • 您可以拥有任意数量的 alertPolicyChecks

  • DURATION 是运行分析的时间量,以秒、分钟或小时为单位。此时间到期后,分析将不再受 Google Cloud Observability 发出的提醒影响。例如:200s

    CHECK_ID 是提醒政策检查的唯一 ID。这会显示在分析结果中,适用于每次检查。

  • ALERT_POLICY_NAME 是您在 Google Cloud Observability 中创建的提醒政策的名称。

  • LABEL_KEY 是标签名称,您的检查将使用该标签与 Google Cloud Observability 提醒政策进行匹配。

  • LABEL_VALUE 是要针对每个标签匹配的值。

自定义 analysis

使用自定义检查(针对来自 Google Cloud 可观测性以外的监控提供商的数据)的分析作业。自定义检查使用 task 来指定包含自定义行为的容器,以及要在该容器上运行的命令。

自定义分析的配置如下:

analysis:
  duration: DURATION
  customChecks:
  - id: CHECK_ID
    frequency: FREQUENCY
    task:
      type: container
      image: IMAGE_NAME
      command: [COMMAND]
      args: [ARGS]
      env:
        [VAR: VALUE]
  • DURATION 是运行分析的时间量,以秒、分钟或小时为单位。此时间到期后,分析将不再受监控系统传入的遥测数据影响。例如:200s

  • CHECK_ID 是您为提醒政策检查提供的唯一 ID。这会显示在分析结果中,适用于每次检查。

  • FREQUENCY 指定了运行检查的频率(以秒、分钟或小时为单位)。例如 300s

  • IMAGE_NAME 是映像代码库中容器映像的路径。

  • COMMAND 是要在相应容器上运行的入口点。“/bin/sh”是此处要指定的典型命令,用于调用 shell,您可以在 args 中包含要在该 shell 中运行的命令。

  • ARGS 是要提供给命令的实参列表。如果您的 COMMAND 为“/bin/sh”,那么此处的某个实参将为“-c”,而另一个实参将为您要在调用的 shell 中运行的整个命令。

    后续步骤

  • 详细了解 Cloud Deploy 的工作原理

  • 了解如何为应用设置交付流水线

  • 了解如何管理清单

  • 了解流水线实例,以避免您的版本与交付流水线不匹配。