1800 字约 6 分钟
云原生构建 支持自定义部署流程, 可配置部署环境、审批流程和部署流水线,实现自动化发布。

自定义部署环境
在仓库根目录下添加 .cnb/tag_deploy.yml 文件用于配置部署环境。 如下示例中定义了 development、staging、production 三种环境, 用户可在页面上选择需要部署的环境类型。
基础示例
最简配置,定义三个部署环境:
environments:
- name: development
description: Development environment
env:
name: development
tag_name: $CNB_BRANCH
- name: staging
description: Staging environment
env:
name: staging
tag_name: $CNB_BRANCH
- name: production
description: Production environment
env:
name: production
tag_name: $CNB_BRANCH权限控制
通过 permissions 限制部署操作的执行人:
environments:
- name: production
description: Production environment
permissions:
roles:
- master
- developer
users:
- name1
- name2自定义按钮(button)
在环境配置中添加 button,触发自定义的 web_trigger 事件:
environments:
- name: production
description: Production environment
button:
- name: 生成发布说明
description: 自动生成 Release Notes
event: web_trigger_release_notes
env:
a: 1
b: 2自定义部署按钮(deploy)
多模块场景下可通过 deploy 配置多个部署按钮,通过 env 区分不同模块:
environments:
- name: production
description: Production environment
deploy:
- name: 部署前端
env:
module: frontend
- name: 部署后端
env:
module: backend
deploy按钮的环境变量仅支持通过env预先配置,不支持用户在页面上手动输入。 部署是较为严肃的操作,相关参数应纳入版本控制。
字段说明
name: 必填,环境名,需唯一。例如name: development, 点击对应的部署按钮将触发.cnb.yml中的tag_deploy.development事件流水线。description: 选填,环境描述。title: 选填,自定义部署流水线标题。env: 选填,传给部署流水线的环境变量。permissions: 选填,部署权限控制。 满足users或roles其一即有权限(还需仓库写权限)。 不配置时,有仓库写权限和推送 Tag 权限即可触发。users: 选填,Array<String>,用户名数组。可定义多个。roles: 选填,Array<String>,仓库角色数组。可选角色:owner(负责人)、master(管理员)、developer(开发者)、reporter(助手)、guest(访客)。 角色非向上包含。例如只声明master有权限,即使owner权限更高也无效。
button: 选填,对象数组格式,自定义按钮。 点击按钮可触发云原生构建流水线,执行event对应的事件。name: 必填,按钮名。description: 选填,按钮描述。如存在,将作为流水线 title; 支持环境变量替换(仅支持替换一级, 环境变量指当前配置的 env 和 inputs,仅支持 ${xxx} 写法)。event: 必填,自定义事件,仅支持 web_trigger 事件。isDefault: 选填,Boolean,是否是默认按钮,仅支持设置一个(设置多个取第一个)。env: 选填,传给 web_trigger 流水线的环境变量,可继承上一级别环境变量。permissions: 选填,权限控制, 满足users或roles其中之一即有权限触发构建(还需仓库写权限)。inputs: 选填,可手动输入的环境变量, 支持input、textarea、select、switch、radio五种类型,也支持分组。 详细说明见 手动触发流水线 - 自定义按钮配置。
deploy: 选填,对象数组格式,自定义部署按钮。 点击按钮可触发部署事件(tag_deploy.*)。name: 必填,按钮名。description: 选填,按钮描述。title: 选填,自定义触发的部署流水线标题。优先级高于上一级别titleenv: 选填,传给部署流水线的环境变量,优先级高于上一级 env。
require: 选填,对象数组格式。部署前置条件,需满足所有条件后才可部署。 支持以下三种类型:- 环境部署要求:
environmentName(必填)+after(选填,秒) - 元数据要求:
annotation(必填)expect(选填,支持eq/ne/gt/lt/gte/lte/and/or/reg)
- 审批流程要求:
approver(必填,支持users和roles)title(选填)+agreeEvent/rejectEvent(选填)
详见下方 自定义部署前置条件 章节的示例。
- 环境部署要求:
自定义部署前置条件
对于每个环境可定义部署前置条件,只有满足所有前置条件才可进行部署操作。 可定义如下三种前置条件:
- 环境部署要求:要求指定环境已经部署成功,且满足
after部署成功时间要求 - 元数据值要求:要求指定元数据对应的值是否满足要求
- 审批流程要求:可自定义审批流程指定审批人,并进行审批操作, 当全部审批流程都审批通过后,才算满足要求
环境部署前置条件
environments:
- name: development
description: Development environment
env:
name: development
tag_name: $CNB_BRANCH
- name: staging
description: Staging environment
env:
name: staging
tag_name: $CNB_BRANCH
require:
- environmentName: development
- name: production
description: Production environment
require:
- environmentName: staging
after: 1800 # 要求 staging 部署成功 30 分钟后元数据前置条件
environments:
- name: production
description: Production environment
require:
- annotation: key1 # 值不为空
- annotation: key2
expect:
eq: value2 # 值等于 value2
- annotation: key3
expect:
and:
gt: 1
lt: 10 # 值大于 1 且小于 10
button:
- name: 生成元数据
event: web_trigger_annotation
description: 生成元数据流程
env:
name1: value1审批流程前置条件
可自定义审批流程和指定审批人。 有权限的审批人可进行审批操作(同意、拒绝)。 全部流程审批通过后即满足要求。
environments:
- name: production
description: Production environment
require:
- approver:
users:
- user1
- user2
title: 测试审批
- approver:
roles:
- developer
- master
title: 开发审批
- approver:
users:
- user4
roles:
- master
- owner
title: 运维审批自定义部署流水线
如下示例定义了三种环境的部署事件流水线, 当在页面中选择部署 development 环境时,将触发 tag_deploy.development 事件。 流水线基于当前 tag 对应的代码进行部署。
$:
tag_deploy.development:
- name: dev
stages:
- name: 部署环境名
script: echo $name
- name: tag 名
script: echo $tag_name
tag_deploy.staging:
- stages:
- echo $name
- echo $tag_name
tag_deploy.production:
- stages:
- echo $name
- echo $tag_name自定义按钮触发的 web_trigger 事件
tag_deploy.yml 中的自定义按钮,仅支持触发 web_trigger事件 事件。 如下流水线配置中,web_trigger_annotation 事件执行时, 会进行上传元数据操作。
$:
web_trigger_annotation:
- stages:
- name: 上传元数据
image: cnbcool/annotations:latest
settings:
data: |
key1=value1
key2=value2部署权限说明
默认情况下,拥有仓库写权限且可推送 Tag 的用户才能进行部署操作。
如果环境配置了 permissions 字段, 则需同时满足仓库写权限和 permissions 中定义的权限。 此时不再检查推送 Tag 权限。
重新构建限制
为避免部署操作被他人越权重新构建, 部署事件(tag_deploy.*)触发的构建有以下重新构建限制:
- 仅原流水线触发人本人可重新构建,其他用户不可。
- 仅支持 24 小时内重新构建,超过 24 小时不再支持。
超过 24 小时或非本人需要重新部署时, 请在 Tag 详情页重新发起部署,以走完整的前置检查与审批流程。