1. 授权认证
  2. 获取用户个人信息
  3. 项目协同
  4. 代码托管
  5. 持续集成
  6. 制品仓库
  7. 测试管理
  1. 项目协同
  2. 代码仓库
  3. DevOps 实践之旅
  4. 一分钟开始持续集成之旅
  5. 持续部署
  6. 制品库

阶段类型说明

通用类型

预置条件检查

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

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 设置的时间(如果已设置)

上一篇部署流程介绍
最近更新
感谢反馈有用
感谢反馈没用