阶段类型说明
通用类型
预置条件检查
在执行下一步之前检查前置条件,例如检查集群规模或某个阶段的状态,前置条件支持部署流程表达式。
Entity Tags
在 CODING 持续部署的资源实体(应用、集群、服务组、负载均衡器、安全组)中使用 tag。
自定义变量(Evaluate Variables)
添加自定义变量(key/value
键值对),在此阶段的定义的变量可以被下游阶段引用。
从集群中查找镜像
从已部署集群中查找镜像。请确保指定的集群和服务组存在符合查找条件的镜像,否则可能会导致异常。
配置选项说明:
- 云服务(Provider)选择 Kubernetes
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
Namespaces | 是 | 镜像所属的命名空间 |
集群 | 是 | 镜像所属的集群 |
服务组 | 是 | 指定服务组需满足的匹配规则 |
是否只选择已启用的服务组 | 否 | 如果勾选,表示不匹配被禁用的服务组 |
镜像匹配规则 | 否 | 用于匹配镜像的正则表达式,留空表示匹配目标服务组中所有的镜像 |
- 云服务(Provider)选择腾讯云
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
Regions | 是 | 镜像所属的地域 |
集群 | 是 | 镜像所属的集群 |
服务组 | 是 | 指定服务组需满足的匹配规则 |
是否只选择已启用的服务组 | 否 | 如果勾选,表示不匹配被禁用的服务组 |
人工确认
在执行下一步之前等待人工确认。可以在人工确认阶段增加指引说明帮助确认人进行人工确认,或者添加输入选项让用户选择。这些输入选项可以决定下游阶段的执行行为。例如,可以使用 预置条件检查
来确保只有满足特定的条件时才执行相应的阶段。
部署流程
将其他部署流程作为子部署流程执行。您可以执行当前应用的部署流程,也可以执行具有访问权限的其他应用的部署流程。在阶段执行结束前可以选择是否等待子部署流程的执行结果。如果选择等待执行结果,此阶段的状态即为子部署流程的最终执行状态;否则,只要子部署流程开始执行此阶段的状态就会被标记为“成功”。
配置选项说明:
字段 | 是否必填 | 说明 |
---|---|---|
应用 | 是 | 列出所有具体访问权限的应用 |
部署流程 | 是 | 列出应用下所有的部署流程 |
是否等待执行结果 | 否 | 如果选择等待执行结果,此阶段的状态即为子部署流程的最终执行状态;否则,只要子部署流程开始执行此阶段的状态就会被标记为“成功”。 |
等待
等待一定的时间段后继续执行。在部署流程执行过程中可以手动减少等待时间或直接跳过等待。等待时间支持表达式。
Webhook
支持调用外部系统 API 作为部署流程的阶段。
利用指定 Webhook 的目标 URL 和 HTTP 方法,支持自定义 header
和 JSON 格式的 payload。默认情况下,如果 Webhook 调用返回 2XX
或 3XX
表示阶段执行成功,返回 4XX
或 5XX
表示执行失败。Webhook 的 URL、payload 调用的最终状态都会展示在部署流程执行详情中。
用户可以在 URL 字段和 payload 中使用部署流程表达式。当阶段执行完成后,阶段上下文的 Webhook
对象包含了 payload 内容,可以在后续的部署流程表达式中引用 payload。例如以下表达式可以获取 Webhook 执行的最终状态:
${#stage("My Webhook Stage")["context"]["webhook"]["statusCode"]}
禁用集群
禁用集群意味着让集群保持运行状态但不处理流量。如果需要的话,用户可以指定运行一定数量的服务组而禁用剩下的。
配置选项说明:
- 云服务(Provider)选择 Kubernetes
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
Namespaces | 是 | 服务组所属的命名空间 |
集群 | 是 | 服务组所属的集群 |
禁用选项 | 是 | 指定具体的禁用规则 |
- 云服务(Provider)选择 Kubernetes
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
Namespaces | 是 | 服务组所属的命名空间 |
集群 | 是 | 服务组所属的集群 |
禁用选项 | 是 | 指定具体的禁用规则 |
健康检查 | 是 | 执行此任务时,仅参考腾讯云提供的健康检查 |
集群缩容
可以选择是否对活跃的(正常运行)的服务组缩容;另外支持使指定数量的服务组保持当前规模,将其他服务组缩容。
- 云服务(Provider)选择 Kubernetes
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
Namespaces | 是 | 服务组所属的命名空间 |
集群 | 是 | 服务组所属的集群 |
缩容选项 | 是 | 指定具体的缩容选项 |
- 云服务(Provider)选择 腾讯云
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
地域 | 是 | 服务组所属的地域 |
集群 | 是 | 服务组所属的集群 |
健康检查 | 是 | 执行此任务时,仅参考腾讯云提供的健康检查 |
启用服务组
启动服务组即让被禁用的服务组重新处理请求流量。负载均衡器的配置决定了新旧服务组之间的路由规则。启用服务组的同时也启用伸缩容策略。
配置选项说明:
- 云服务(Provider)选择 Kubernetes
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
Namespaces | 是 | 服务组所属的命名空间 |
集群 | 是 | 服务组所属的集群 |
目标服务组 | 是 | 指定服务组需满足的匹配规则 |
- 云服务(Provider)选择 腾讯云
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
地域 | 是 | 服务组所属的地域 |
集群 | 是 | 服务组所属的集群 |
目标服务组 | 是 | 指定服务组需满足的匹配规则 |
健康检查 | 是 | 执行此任务时,仅参考腾讯云提供的健康检查 |
禁用服务组
禁用服务组意味着让服务组保持运行状态但不处理流量。另外针对禁用服务组的伸缩容操作也会被禁用。禁用服务组使得在新旧服务组之间做流量切换变得很简单。在阶段启动之前用户必须指定禁用最新、最旧或次新的服务组。
配置选项参考
启用服务组
销毁服务组
销毁指定集群的服务组和相应资源。在阶段启动之前用户必须指定销毁最新、最旧或次新的服务组。
配置选项说明:
- 云服务(Provider)选择 Kubernetes
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
Namespaces | 是 | 服务组所属的命名空间 |
集群 | 是 | 服务组所属的集群 |
目标服务组 | 是 | 指定服务组需满足的匹配规则 |
- 云服务(Provider)选择 腾讯云
字段 | 是否必填 | 说明 |
---|---|---|
云服务 | 是 | 云服务类型,目前支持 Kubernetes 和 腾讯云 |
云账号 | 是 | 管理资源对象的云账号 |
地域 | 是 | 服务组所属的地域 |
集群 | 是 | 服务组所属的集群 |
目标服务组 | 是 | 指定服务组需满足的匹配规则 |
调整服务组规模
以当前服务组规模的百分比或指定数量来调整服务组大小。支持如下调整策略:
- 扩容:增大目标服务组的规模
- 缩容:减小目标服务组的规模
- 扩容至相对最大规模:将目标服务组规模扩容至与当前集群中最大服务组一致
- 调整为特定规模:将目标服务组调整至特定规模
腾讯云类型
Bake
从指定的软件包 Bake 云主机镜像,Bake 是指创建云主机镜像的过程。CODING 部署控制台基于 Hashicorp 的 Packer 抽象出 Baker 阶段,提供了默认的 Packer 模板和基本的虚拟机镜像,以帮助用户快速入门。
需要注意的时,如果 Spinnaker 检测到不需要进行新的 Bake,则跳过 Bake 过程。 CODING 部署控制台会根据 Bake 阶段参数(基础操作系统,版本化的软件包等)为每次 Bake 生成唯一的键(key)。如果软件包或 Bake 阶段参数发生了更改,则会触发新的 Bake 操作。 要更改默认行为并在部署流程每次运行时重新 Bake 镜像,请在阶段阶段配置中勾选 Rebake
。
阅读更多:Hashicorp Packer
部署
通过指定部署策略部署提前准备好的镜像。CODING 持续部署提供了部分内置的部署策略,如:红黑(蓝绿)部署、Highlander 部署。您还可以选择对已有服务组无侵入式的部署方式,或者创建自定义的部署策略。
回滚集群
回滚集群中一个或多个区域的实例。
配置选项说明:
字段 | 是否必填 | 说明 |
---|---|---|
云账号 | 是 | 腾讯云账号 |
地域 | 是 | 集群所属的地域 |
集群 | 是 | 指定需要回滚的集群 |
健康检查 | 是 | 执行此任务时,仅参考腾讯云提供的健康检查 |
克隆服务组
将已有服务组的所有属性克隆到新服务组(依赖镜像、容器等)。在创建新服务组时可以选择覆盖克隆服务组的任意属性。
Shrink Cluster
指定保留一定数量的最新或规模最大的服务组,将其他的服务组全部删除。用户可以选择是否删除不满足指定条件的活跃(正常运行)服务组
Modify Scaling Process
暂停/恢复 扩缩容操作
Kubernetes 类型
Bake (Manifest)
使用诸如 Helm 这样的模板渲染器 Bake 资源清单。
阅读更多:Bake(Manifest) 阶段详解
部署(Manifest)
包含两个主要的步骤:
指定要部署的 mainfest
在 manifest 中指定需要覆盖的制品(如
Docker 镜像
)
配置 manifest
根据需求,有两个方法可以指定 manifest:
- 静态:直接在部署流程中指定
- 动态:运行时使用绑定的制品
不管使用哪种方式,都需提前选择 Deploy (Manifest)
阶段:
配置静态的 manifest
如果您提前知道即将部署的资源对应的 manifest(即使不知道制品的版本),那么可以在 Deployment(Manifest)
阶段配置中直接提供 manifest 纯文本内容。
选择
Text
类型后,用户在文本框直接编辑 YAML 文件内容。
如果是使用 JSON 定义的部署流程,对应的内容如下:
{
"name": "Deploy my manifest", // human-readable name
"type": "deployManifest", // tells orchestration engine what to run
"account": "nudge", // account (k8s cluster) to deploy to
"cloudProvider": "kubernetes",
"source": "text",
"manifest": {
// manifest contents go here
}
}
配置动态的 manifests
如果制品没有存储在部署流程仓库中,或者当一个阶段需要部署多种制品时,可以通过绑定制品来配置 manifest。CODING 持续部署的制品允许用户引用任何远程的可部署资源。Deploy(Manifest)
阶段引用的制品必须是包含 Manifest 定义的文本文件,这样的文本文件可能存在于 GitHub 仓库或 GCS。阅读更多部署流程详细设置。
假设您已经在上游阶段声明了 Expected Artifacts
,那么可以在 Deploy(Manifest)
阶段引用:
Manifest Source 勾选
Artifact
后,用户可以选择部署上游提供的制品。请确保云账号(Account)拥有下载制品的权限。
上游阶段可能会匹配到多个制品,例如我们可以配置正则表达式 .*\yml
,将所有 yml
文件作为制品。Deploy(Manifest)
阶段执行时会部署所有匹配到的 yml
文件。
覆盖制品
通常当我们对基础设施做部署更新操作时,大多数的变更都是涉及 Docker 镜像或 ConfigMap 中的 flag
。因此,CODING CD 针对这些资源类型的变更提供了优秀的支持。
- Docker 镜像
- Kubernetes ConfigMap
- Kubernetes Secret
如果上游阶段的部署流程上下文中存在这些资源对象,CODING CD 将会自动地尝试将它们注入到正在部署的 manifest 文件中。
例如,假设 Docker 镜像仓库类型的触发器触发部署流程执行,并且触发器携带了镜像 gcr.io/my-project/my-image
,其 digest 值为 sha256:c81e41ef5e...
。在部署流程中,您配置了 manifest 内容如下的部署阶段。
# ... rest of manifest
containers:
- name: my-container
image: gcr.io/my-project/my-image
# rest of manifest ...
因为部署流程是由 Docker 镜像内容变更
所触发,所以部署流程编排引擎会将 Docker 镜像制品连同部署阶段中的 manifest 一起派发给 clouddriver
组件处理。最终得到部署的 manifest 内容如下:
# ... rest of manifest
containers:
- name: my-container
image: gcr.io/my-project/my-image@:sha256:c81e41ef5e...
# rest of manifest ...
为了确保部署阶段获取到正确的制品,您可以强制阶段绑定所有需要的制品,如果绑定失败,阶段将启动失败。以下配置的含义是 Docker 镜像 gcr.io/my-project/my-image
必须被绑定到 manifest,否则阶段将会执行失败:
启用(Manifset)
启用 Kubernetes 对象。
配置选项说明:
-
Selector
选择静态指定目标
字段 | 是否必填 | 说明 |
---|---|---|
云账号 | 是 | 管理资源对象的云账号 |
Namespace | 是 | 资源对象所在的命名空间 |
Selector | 是 | 通过名称静态指定删除的目标资源 |
Kind | 是 | 资源对象类型 |
Name | 是 | 资源对象名称(如 replicaSet 类型的资源 nginx-deployment-5dfd77bbf9 ) |
-
Selector
选择静态选择目标
字段 | 是否必填 | 说明 |
---|---|---|
云账号 | 是 | 管理资源对象的云账号 |
Namespace | 是 | 资源对象所在的命名空间 |
Selector | 是 | 通过名称静态指定删除的目标资源 |
Kind | 是 | 资源对象类型 |
集群 | 是 | 资源对象名称(如 replicaSet 类型的资源 nginx-deployment-5dfd77bbf9 ) |
Target | 是 | 选择规则匹配资源对象 |
删除(Manifest)
删除通过资源清单创建的 Kubernetes 对象。
配置选项说明:
-
Selector
选择静态指定目标
字段 | 是否必填 | 说明 |
---|---|---|
云账号 | 是 | 管理资源对象的云账号 |
Namespace | 是 | 资源对象所在的命名空间 |
Selector | 是 | 通过名称静态指定删除的目标资源 |
Kind | 是 | 资源对象类型 |
Name | 是 | 资源对象名称(如 replicaSet 类型的资源 nginx-deployment-5dfd77bbf9 ) |
-
Slector
选择动态选择目标
字段 | 是否必填 | 说明 |
---|---|---|
云账号 | 是 | 管理资源对象的云账号 |
Namespace | 是 | 资源对象所在的命名空间 |
Selector | 是 | 通过集群和 Target 字段动态选择资源对象 |
Kind | 是 | 资源对象类型 |
Cluster | 是 | 资源对象所在的集群 |
Target | 是 | 选择规则匹配资源对象 |
-
Selector
选择使用标签匹配目标
字段 | 是否必填 | 说明 |
---|---|---|
云账号 | 是 | 管理资源对象的云账号 |
Namespace | 是 | 资源对象所在的命名空间 |
Selector | 是 | 通过指定标签规则匹配资源对象 |
Kind | 是 | 资源对象类型 |
Labels | 否 | 不填写规则表示匹配所有满足指定类型的资源对象 |
设置选项说明:
字段 | 是否必填 | 说明 |
---|---|---|
级联删除 | 否 | 勾选后,表示删除此资源对象管理的所有资源对象(如:Replica Set 管理的所有 Pods),不勾选可能会产生孤儿资源 |
Grace Period | 否 | (可选)指定资源对象正式终止的时间,将会覆盖 manifest 设置的时间(如果已设置) |

在阅读中是否遇到以下问题?
您希望我们如何改进?