阶段类型说明

通用类型

预置条件检查

在执行下一步之前检查前置条件,例如检查集群规模或某个阶段的状态,前置条件支持部署流程表达式

Entity Tags

在 CODING 持续部署的资源实体(应用、集群、服务组、负载均衡器、安全组)中使用 tag。

自定义变量(Evaluate Variables)

添加自定义变量(key/value 键值对),在此阶段的定义的变量可以被下游阶段引用。

从集群中查找镜像

从已部署集群中查找镜像。请确保指定的集群和服务组存在符合查找条件的镜像,否则可能会导致异常。

配置选项说明:

  • 云服务(Provider)选择 Kubernetes
字段 是否必填 说明
云服务 云服务类型,目前支持 Kubernetes 和 腾讯云
云账号 管理资源对象的云账号
Namespaces 镜像所属的命名空间
集群 镜像所属的集群
服务组 指定服务组需满足的匹配规则
是否只选择已启用的服务组 如果勾选,表示不匹配被禁用的服务组
镜像匹配规则 用于匹配镜像的正则表达式,留空表示匹配目标服务组中所有的镜像

  • 云服务(Provider)选择腾讯云
字段 是否必填 说明
云服务 云服务类型,目前支持 Kubernetes 和 腾讯云
云账号 管理资源对象的云账号
Regions 镜像所属的地域
集群 镜像所属的集群
服务组 指定服务组需满足的匹配规则
是否只选择已启用的服务组 如果勾选,表示不匹配被禁用的服务组

人工确认

在执行下一步之前等待人工确认。可以在人工确认阶段增加指引说明帮助确认人进行人工确认,或者添加输入选项让用户选择。这些输入选项可以决定下游阶段的执行行为。例如,可以使用 预置条件检查 来确保只有满足特定的条件时才执行相应的阶段。

部署流程

将其他部署流程作为子部署流程执行。您可以执行当前应用的部署流程,也可以执行具有访问权限的其他应用的部署流程。在阶段执行结束前可以选择是否等待子部署流程的执行结果。如果选择等待执行结果,此阶段的状态即为子部署流程的最终执行状态;否则,只要子部署流程开始执行此阶段的状态就会被标记为“成功”。

配置选项说明:

字段 是否必填 说明
应用 列出所有具体访问权限的应用
部署流程 列出应用下所有的部署流程
是否等待执行结果 如果选择等待执行结果,此阶段的状态即为子部署流程的最终执行状态;否则,只要子部署流程开始执行此阶段的状态就会被标记为“成功”。

等待

等待一定的时间段后继续执行。在部署流程执行过程中可以手动减少等待时间或直接跳过等待。等待时间支持表达式。

Webhook

支持调用外部系统 API 作为部署流程的阶段。

利用指定 Webhook 的目标 URL 和 HTTP 方法,支持自定义 header 和 JSON 格式的 payload。默认情况下,如果 Webhook 调用返回 2XX3XX 表示阶段执行成功,返回 4XX5XX 表示执行失败。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 设置的时间(如果已设置)
上一篇部署流程介绍
文档是否对您有用?
感谢反馈有用
感谢反馈没用