KubernetesManifest@0 - 部署到 Kubernetes v0 任务

在生成或发布管道中使用 Kubernetes 清单任务,使用 Helm 图表制作清单并将其部署到 Kubernetes 群集。

语法

# Deploy to Kubernetes v0
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@0
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #kubernetesServiceConnection: # string. Required when action != bake. Kubernetes service connection. 
    #namespace: # string. Namespace. 
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
    #dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file. 
    #helmChart: # string. Required when action = bake && renderType = helm. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides. 
    #kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path. 
    #resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
    #resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path. 
    #kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind. 
    #name: # string. Required when action = scale || resourceToPatch = name. Name. 
    #replicas: # string. Required when action = scale. Replica count. 
    #mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
    #arguments: # string. Optional. Use when action = delete. Arguments. 
    #patch: # string. Required when action = patch. Patch. 
    #secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
    #secretName: # string. Optional. Use when action = createSecret. Secret name. 
    #secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments. 
    #dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection. 
    #rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.
# Deploy Kubernetes manifests v0
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@0
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #kubernetesServiceConnection: # string. Required when action != bake. Kubernetes service connection. 
    #namespace: 'default' # string. Required when action != bake. Namespace. Default: default.
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm2' # 'helm2'. Optional. Use when action = bake. Render Engine. Default: helm2.
    #helmChart: # string. Required when action = bake && renderType = helm2. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm2. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm2. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm2. Overrides. 
    #resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
    #resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path. 
    #kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind. 
    #name: # string. Required when action = scale || resourceToPatch = name. Name. 
    #replicas: # string. Required when action = scale. Replica count. 
    #mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
    #arguments: # string. Optional. Use when action = delete. Arguments. 
    #patch: # string. Required when action = patch. Patch. 
    #secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
    #secretName: # string. Optional. Use when action = createSecret. Secret name. 
    #secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments. 
    #dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection.

输入

action - 行动
string. 允许的值:bakecreateSecret (创建机密) 、、deletedeploypatchpromotescalereject、 。 默认值:deploy

指定要执行的操作。


kubernetesServiceConnection - Kubernetes 服务连接
string. 当 action != bake 时,需要此选项。

指定 Kubernetes 服务连接


namespace - 命名 空间
string.

使用 标志指定命令的 –namespace 命名空间。 如果未提供命名空间,则命令将在默认命名空间中运行。


namespace - 命名 空间
string. 当 action != bake 时,需要此选项。 默认值:default

使用 标志指定命令的 –namespace 命名空间。 如果未提供命名空间,则命令将在默认命名空间中运行。


strategy - 策略
string. 可选。 在 时 action = deploy || action = promote || action = reject使用 。 允许的值:canarynone。 默认值:none

指定在操作或deploy操作之前promotereject的操作中使用的部署策略。 目前, canary 是唯一可接受的部署策略。


trafficSplitMethod - 流量拆分方法
string. 可选。 在 时 strategy = canary使用 。 允许的值:podsmi。 默认值:pod

对于 值 smi,流量拆分百分比是在请求级别使用服务网格完成的。 服务网格必须由群集管理员设置。此任务处理 SMI TrafficSplit 对象的业务流程。

对于 值 pod,如果没有服务网格,则无法在请求级别拆分百分比。 相反,百分比输入用于计算基线和金丝雀的副本。 计算是在稳定变量的输入清单中指定的副本百分比。


percentage - 百分比
string. 当 strategy = Canary && action = deploy 时,需要此选项。 默认值:0

用于计算清单文件中包含的工作负荷的基线变体副本和金丝雀变体副本数的百分比。

对于指定的百分比输入,计算:

(百分比 × 副本数) / 100

如果结果不是整数,则创建基线和金丝雀变体时,将使用结果的数学下限。

例如,假设部署 hello-world 在输入清单文件中,并且以下行位于任务输入中:

replicas: 4
strategy: canary
percentage: 25

在这种情况下,使用一个副本 (replica) 创建部署 hello-world-baselinehello-world-canary 。 基线变体是使用与稳定版本相同的映像和标记创建的,稳定版本是部署前的四副本 (replica) 变体。 金丝雀变体是使用与新部署的更改对应的映像和标记创建的。


baselineAndCanaryReplicas - 基线和金丝雀副本
string. 当 strategy = Canary && action = deploy && trafficSplitMethod = SMI 时,需要此选项。 默认值:1

将 设置为 trafficSplitMethodsmi时,流量拆分百分比在服务网格平面中受控制。 可以独立于流量拆分控制 Canary 和基线变体的实际副本数。

例如,假设输入部署清单为稳定变量指定 30 个副本。 此外,假定为任务指定以下输入:

strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1

在这种情况下,稳定变体接收 80% 的流量,而基线和金丝雀变体分别接收指定 20% 的一半。 基线和金丝雀变体各不接收三个副本。 它们接收指定数量的副本,这意味着它们分别接收一个副本 (replica) 。


manifests - 体现
string. 当 action = deploy || action = promote || action = reject 时,需要此选项。

指定要用于部署的清单文件的路径。 每行表示单个路径。 文件匹配模式是每行的可接受值。


containers - 容器
string. 可选。 在 时 action = deploy || action = promote || action = bake使用 。

指定要用于清单文件上的替换的图像的完全限定资源 URL。 URL contosodemo.azurecr.io/helloworld:test 是一个示例。


containers - 容器
string. 可选。 在 时 action = deploy || action = promote使用 。

指定要用于清单文件上的替换的图像的完全限定 URL。 此输入以换行符分隔的形式接受多个项目替换的规范。 下面是一个示例:

containers: |
  contosodemo.azurecr.io/foo:test1
  contosodemo.azurecr.io/bar:test2

在此示例中,在输入清单文件的图像字段中搜索对 和 contosodemo.azurecr.io/bar 的所有引用contosodemo.azurecr.io/foo。 对于找到的每个匹配项,标记 test1test2 将替换匹配的引用。


imagePullSecrets - ImagePullSecrets
string. 可选。 在 时 action = deploy || action = promote使用 。

指定多行输入,其中每行都包含已在群集中设置的 Docker 注册表机密的名称。 对于在输入清单文件中找到的工作负荷,每个机密名称都会在 下 imagePullSecrets 添加。


renderType - 呈现引擎
string. 可选。 在 时 action = bake使用 。 允许的值:helmkomposekustomize。 默认值:helm

指定用于生成清单文件的呈现类型。


renderType - 呈现引擎
string. 可选。 在 时 action = bake使用 。 允许的值: helm2 (Helm 2) 。 默认值:helm2

指定用于生成清单文件的呈现类型。


dockerComposeFile - docker compose 文件的路径
string. 当 action = bake && renderType = kompose 时,需要此选项。

指定 docker-compose 文件路径。


helmChart - Helm 图表
string. 当 action = bake && renderType = helm 时,需要此选项。

指定要烘焙的 Helm 图表路径。


helmChart - Helm 图表
string. 当 action = bake && renderType = helm2 时,需要此选项。

指定要烘焙的 Helm 图表路径。


releaseName - Helm 发布名称
string. 可选。 在 时 action = bake && renderType = helm使用 。

指定要使用的 Helm 版本名称。


releaseName - Helm 发布名称
string. 可选。 在 时 action = bake && renderType = helm2使用 。

指定要使用的 Helm 版本名称。


overrideFiles - 替代文件
string. 可选。 在 时 action = bake && renderType = helm使用 。

指定接受替代文件路径的多行输入。 生成 Helm 图表中的清单文件时,将使用这些文件。


overrideFiles - 替代文件
string. 可选。 在 时 action = bake && renderType = helm2使用 。

指定接受替代文件路径的多行输入。 生成 Helm 图表中的清单文件时,将使用这些文件。


overrides - 重写
string. 可选。 在 时 action = bake && renderType = helm使用 。

指定要设置的替代值。


overrides - 重写
string. 可选。 在 时 action = bake && renderType = helm2使用 。

指定在烘焙使用 Helm 的清单文件时通过命令行开关 --set 使用的其他替代值。

以 格式key:value将替代值指定为key-value对。 如果使用多个重写 key-value 对,请在单独的行中指定每个 key-value 对。 使用换行符作为不同 key-value 对之间的分隔符。


kustomizationPath - 自定义路径
string. 可选。 在 时 action = bake && renderType = kustomize使用 。

指定参数,该参数必须是包含该文件的目录的路径,或具有指定相对于存储库根的路径后缀 same 的 git 存储库 URL。


resourceToPatch - 要修补的资源
string. 当 action = patch 时,需要此选项。 允许的值:filename。 默认值:file

指示以下修补方法之一:

  • 清单文件标识要修补的对象。
  • 单个对象按种类和名称标识为修补程序目标。

可接受的值为 filename


resourceFileToPatch - 文件路径
string. 当 action = patch && resourceToPatch = file 时,需要此选项。

指定用于修补程序的文件的路径。


kind - 种类
string. 当 action = scale || resourceToPatch = name 时,需要此选项。 允许的值:deploymentreplicasetstatefulset

指定 K8s 对象的类型,例如 deploymentreplicaSet


name - 名字
string. 当 action = scale || resourceToPatch = name 时,需要此选项。

指定 K8s 对象的名称。


replicas - 副本计数
string. 当 action = scale 时,需要此选项。

指定要缩放到的副本数。


mergeStrategy - 合并策略
string. 当 action = patch 时,需要此选项。 允许的值:jsonmergestrategic。 默认值:strategic

指定要提供的修补程序的类型。


arguments - 参数
string. 可选。 在 时 action = delete使用 。

指定命令的参数 kubectl delete 。 例如: arguments: deployment hello-world foo-bar


patch - 补丁
string. 当 action = patch 时,需要此选项。

指定修补程序的内容。


secretType - 机密类型
string. 当 action = createSecret 时,需要此选项。 允许的值:dockerRegistrygeneric。 默认值:dockerRegistry

创建或更新泛型或 docker imagepullsecret。 指定 dockerRegistry 以创建或更新 imagepullsecret 所选注册表的 。 imagePullSecret是一种将包含容器注册表密码的机密传递给 Kubelet 的方法,以便它可以代表 Pod 拉取专用映像。


secretName - 机密名称
string. 可选。 在 时 action = createSecret使用 。

指定机密的名称。 可以在 Kubernetes YAML 配置文件中使用此机密名称。


secretArguments - 参数
string. 可选。 在 时 action = createSecret && secretType = generic使用 。

指定要在机密中插入的键和文本值。 例如, --from-literal=key1=value1--from-literal=key2="top secret"


dockerRegistryEndpoint - Docker 注册表服务连接
string. 可选。 在 时 action = createSecret && secretType = dockerRegistry使用 。

指定用于在群集中创建 Docker 注册表机密的指定服务连接的凭据。 然后, imagePullSecrets 字段下的清单文件可以引用此机密的名称。


rolloutStatusTimeout - 推出状态超时
string. 可选。 在 时 action = deploy || action = patch || action = scale || action = promote使用 。 默认值:0

指定结束 watch on rollout 状态之前 () 等待的时间长度(以秒为单位)。


任务控件选项

除任务输入外,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性

输出变量

此任务定义以下 输出变量,可在下游步骤、作业和阶段中使用。

manifestsBundle
指定由烘焙操作创建的清单捆绑包的位置。

注解

注意

有一个更新版本的此任务可用,该任务使用 属性以不同方式 connectionType 提供针对 Kubernetes 群集的额外支持。 有关详细信息,请参阅 KubernetesManifest@1KubernetesManifest@1服务连接说明

在生成或发布管道中使用 Kubernetes 清单任务来烘焙清单并将其部署到 Kubernetes 群集。

此任务支持以下各项:

  • 项目替换:部署操作采用容器映像列表作为输入,你可以指定这些映像及其标记和摘要。 在将应用程序应用到群集之前,相同的输入将替换为非模板化清单文件。 此替换可确保群集节点拉取正确版本的映像。

  • 清单稳定性:检查已部署的 Kubernetes 对象的推出状态。 将稳定性检查合并在一起,以确定任务状态是成功还是失败。

  • 可跟踪性注释:批注将添加到已部署的 Kubernetes 对象,以叠加可跟踪性信息。 支持以下批注:

    • azure-pipelines/org
    • azure-pipelines/project
    • azure-pipelines/pipeline
    • azure-pipelines/pipelineId
    • azure-pipelines/execution
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • 机密处理:该 createSecret 操作允许使用 Docker 注册表服务连接创建 Docker 注册表机密。 它还允许使用纯文本变量或机密变量创建通用机密。 在部署到群集之前,可以将 secrets 输入与 操作一起使用, deploy 以使用适当的 imagePullSecrets 值扩充输入清单文件。

  • 烘焙清单:任务 bake 操作允许将模板烘焙到 Kubernetes 清单文件中。 该操作使用 Helm、Compose 和 Kustomize 等工具。 通过烘焙,这些 Kubernetes 清单文件可用于部署到群集。

  • 部署策略:选择 canary 具有 deploy 操作的策略会导致创建后缀为 -baseline-canary的工作负荷名称。 该任务支持两种流量拆分方法:

    • 服务网格接口服务网格接口 (SMI) 抽象允许使用 和 IstioLinkerd服务网格提供程序进行配置。 Kubernetes 清单任务在部署策略的生命周期内将 SMI TrafficSplit 对象映射到稳定、基线和金丝雀服务。

      基于服务网格并使用此任务的 Canary 部署更准确。 此准确性取决于服务网格提供程序如何实现基于百分比的精细流量拆分。 服务网格使用注入 Pod 的服务注册表和挎斗容器。 此注入与应用程序容器一起发生,以实现精细的流量拆分。

    • 没有服务网格的 Kubernetes:在没有服务网格的情况下,可能无法在请求级别获得所需的确切百分比拆分。 但是,可以通过使用稳定变体旁边的基线和金丝雀变体来执行金丝雀部署。

      当满足选择器标签约束时,服务会将请求发送到所有三个工作负载变体的 Pod。 Kubernetes 清单在创建基线和 Canary 变体时遵循这些请求。 此路由行为实现了仅将总请求的一部分路由到金丝雀的预期效果。

    通过在发布管道中使用 手动干预任务 或 YAML 管道中的 延迟任务 来比较基线和金丝雀工作负载。 在使用任务的提升或拒绝操作之前进行比较。

部署操作

以下 YAML 代码是使用清单文件部署到 Kubernetes 命名空间的示例:

steps:
- task: KubernetesManifest@0
  displayName: Deploy
  inputs:
    kubernetesServiceConnection: someK8sSC1
    namespace: default
    manifests: |
      manifests/deployment.yml
      manifests/service.yml
    containers: |
      foo/demo:$(tagVariable1)
      bar/demo:$(tagVariable2)
    imagePullSecrets: |
      some-secret
      some-other-secret

在上面的示例中,任务尝试在清单文件的图像字段中查找图像 foo/demobar/demo 匹配项。 对于找到的每个匹配项,或 tagVariable2 的值tagVariable1将作为标记追加到映像名称中。 还可以在容器输入中指定用于项目替换的摘要。

注意

虽然可以使用与部署策略相关的 YAML 输入创作 deploypromotereject 操作,但目前对生成管道不支持手动干预任务。

对于发布管道,建议按以下顺序使用与部署策略相关的操作和输入:

  1. 使用 strategy: canarypercentage: $(someValue)指定的部署操作。
  2. 手动干预任务,以便可以暂停管道并将基线变体与 Canary 变体进行比较。
  3. 在恢复手动干预任务时运行的提升操作,在拒绝手动干预任务时运行拒绝操作。

创建机密操作

以下 YAML 代码演示了使用 Docker 注册表 服务连接创建 Docker 注册表机密的示例:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: dockerRegistry
    secretName: foobar
    dockerRegistryEndpoint: demoACR
    kubernetesServiceConnection: someK8sSC
    namespace: default

此 YAML 代码演示通用机密的示例创建:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: generic
    secretName: some-secret
    secretArguments: --from-literal=key1=value1
    kubernetesServiceConnection: someK8sSC
    namespace: default

烘焙操作

以下 YAML 代码是从 Helm 图表中烘焙清单文件的示例。 请注意第一个任务中名称输入的用法。 稍后从部署步骤中引用此名称,用于指定烘焙步骤生成的清单的路径。

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Helm chart
  inputs:
    action: bake
    helmChart: charts/sample
    overrides: 'image.repository:nginx'

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: someK8sSC
    namespace: default
    manifests: $(bake.manifestsBundle)
    containers: |
      nginx: 1.7.9

注意

若要直接使用 Helm 管理发布和回滚,请参阅 打包和部署 Helm 图表任务

Kustomize 示例

以下 YAML 代码是使用 Kustomize kustomization.yaml 生成的包含文件的烘焙清单文件的示例。

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from kustomization path
  inputs:
    action: bake
    renderType: kustomize
    kustomizationPath: folderContainingKustomizationFile

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

Kompose 示例

以下 YAML 代码是使用 Kompose 生成的烘焙清单文件的示例,Kompose 是 Docker Compose 的转换工具。

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Docker Compose
  inputs:
    action: bake
    renderType: kompose
    dockerComposeFile: docker-compose.yaml

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

缩放操作

以下 YAML 代码显示了缩放对象的示例:

steps:
- task: KubernetesManifest@0
  displayName: Scale
  inputs: 
    action: scale
    kind: deployment
    name: bootcamp-demo
    replicas: 5
    kubernetesServiceConnection: someK8sSC
    namespace: default

修补操作

以下 YAML 代码显示了对象修补的示例:

steps:
- task: KubernetesManifest@0
  displayName: Patch
  inputs: 
    action: patch
    kind: pod
    name: demo-5fbc4d6cd9-pgxn4
    mergeStrategy: strategic
    patch: '{"spec":{"containers":[{"name":"demo","image":"foobar/demo:2239"}]}}'
    kubernetesServiceConnection: someK8sSC
    namespace: default

删除操作

此 YAML 代码显示删除对象的示例:

steps:
- task: KubernetesManifest@0
  displayName: Delete
  inputs:
    action: delete
    arguments: deployment expressapp
    kubernetesServiceConnection: someK8sSC
    namespace: default

故障排除

我的 Kubernetes 群集位于防火墙后面,而我使用的是托管代理。 我该如何部署到此群集?

通过允许托管代理的 IP 地址,你可以授予托管代理通过防火墙进行访问的权限。 有关更多详细信息,请参阅代理 IP 范围

在 Canary 部署的情况下,对稳定和变体服务路由的请求是如何工作的?

Kubernetes 中 pod 和服务之间的标签选择器关系允许设置部署,以便单个服务将请求路由到稳定变体和 Canary 变体。 Kubernetes 清单任务 将此用于 Canary 部署。

如果任务包含 和 strategy: canaryaction: deploy输入,则对于输入清单文件中定义的每个工作负载 (Deployment、ReplicaSet、Pod、...) ,-baseline则会创建部署的 和 -canary 变体。 在此示例中,输入清单文件中有一个部署 sampleapp ,在管道的运行编号 22 完成后,此名为 sampleapp 的部署的稳定变体将部署在群集中。 在后续运行 (在本例中运行编号 23) ,Kubernetes 清单任务使用 action: deploystrategy: canary 将导致创建 sampleapp-baseline 和 sampleapp-canary 部署,其副本数由任务输入的 percentage 乘积决定,其最终稳定变体 sampleapp 的值根据输入清单文件确定。

不包括副本数,基线版本具有与稳定变体相同的配置,而 Canary 版本具有当前运行 (引入的新更改,在这种情况下,运行编号 23) 。 如果在上述步骤之后在管道中设置了手动干预,则有机会暂停管道,以便管道管理员可以评估基线和金丝雀版本的关键指标,并决定金丝雀更改是否安全且适合完全推出。

action: promote Kubernetes 清单任务的 和 strategy: canaryaction: rejectstrategy: canary 输入可以分别用于提升或拒绝 Canary 更改。 请注意,在这两种情况下,在此步骤结束时,只会在群集中部署输入清单文件中声明的工作负载的稳定变体,同时清理临时基线和 Canary 版本。

要求

要求 说明
管道类型 YAML、经典版本、经典版本
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
可设置的变量 任意
代理版本 所有支持的代理版本。
任务类别 部署