自定义部署流程
云原生构建支持自定义部署流程,通过自定义部署环境、审批流程、部署流水线,实现自动化的部署流程。
操作示例:

自定义部署环境
在仓库根目录下添加 .cnb/tag_deploy.yml 文件用于配置部署环境。
如下示例中定义了 development、staging、production 三种环境,用户可在页面上选择需要部署的环境类型。
1# .cnb/tag_deploy.yml
2environments:
3 # name: 环境名,点击该环境对应的部署按钮将触发 .cnb.yml 中的 tag_deploy.development 事件流水线
4 - name: development
5 description: Development environment
6 # 环境变量(触发流水线时,会将环境变量传入流水线,包括部署流水线、web_trigger 流水线)
7 env:
8 name: development
9 # CNB_BRANCH: 环境变量,部署事件中,为 tag 名
10 tag_name: $CNB_BRANCH
11
12 - name: staging
13 description: Staging environment
14 env:
15 name: staging
16 # CNB_BRANCH: 环境变量,部署事件中,为 tag 名
17 tag_name: $CNB_BRANCH
18
19 - name: production
20 description: Production environment
21 # 环境变量(触发流水线时,会将环境变量传入流水线,包括部署流水线、web_trigger 流水线)
22 env:
23 name: production
24 # CNB_BRANCH: 环境变量,部署事件中,为 tag 名
25 tag_name: $CNB_BRANCH
26 button:
27 - name: 创建审批单
28 # 如存在,则将作为流水线 title,否则流水线使用默认 title
29 description: 自动创建审批单流程
30 # 需要在 .cnb.yml 中自定义 web_trigger_approval 事件流水线
31 event: web_trigger_approval
32 # 权限控制,不配置则有仓库写权限的用户可触发构建
33 # 如果配置,则需要有仓库写权限,并且满足 roles 或 users 其中之一才有权限触发构建
34 permissions:
35 # roles 和 users 配置其中之一或都配置均可,二者满足其一即可
36 roles:
37 - owner
38 - developer
39 users:
40 - name1
41 - name2
42 # 传给 web_trigger_approval 事件流水线的环境变量
43 # 可继承上一级别环境变量,优先级高于上一级别环境变量
44 env:
45 name1: value1
46 name2: value2
47
48 # 部署前置条件检查(支持对环境、元数据、审批流程的检查),满足所有前置条件才可进行部署操作
49 require:
50 # 1 对部署环境是否满足要求的检查
51
52 # 1.1 要求 development 环境部署成功
53 - environmentName: development
54
55 # 1.2 要求 staging 环境部署成功 30 分钟后
56 - environmentName: staging
57 after: 1800
58
59 # 2 对元数据是否满足要求的检查
60
61 # 2.1 键值 key1 对应的 value 不为空,即有值
62 - annotation: key1
63
64 # 2.2 键值 key1 对应的 value 值需等于 value1
65 - annotation: key1
66 expect:
67 eq: value1
68
69 # 2.3 键值 key2 对应的 value 值需大于 1 且小于 10
70 - annotation: key2
71 expect:
72 and:
73 gt: 1
74 lt: 10
75 # 自定义按钮,点击可触发执行 web_trigger_annotation 事件。
76 # 可定义与 require 信息有关的按钮事件,当 require 满足条件后隐藏按钮
77 button:
78 - name: 生成元数据
79 event: web_trigger_annotation
80 # 如存在,则将作为流水线 title,否则流水线使用默认 title
81 description: 生成元数据流程
82 # 权限控制,不配置则有仓库写权限的用户可触发构建
83 # 如果配置,则需要有仓库写权限,并且满足 roles 或 users 其中之一才有权限触发构建
84 permissions:
85 # roles 和 users 配置其中之一或都配置均可,二者满足其一即可
86 roles:
87 - owner
88 - developer
89 users:
90 - name1
91 - name2
92 # 传给 web_trigger_annotation 事件流水线的环境变量
93 # 可继承上一级别环境变量,优先级高于上一级别环境变量
94 env:
95 name1: value1
96 name2: value2
97
98 # 3 对审批流程是否满足要求的检查(可按以下方式自定义审批流程)
99 # - 审批顺序:如下 1、2、3 审批流程需按顺序进行,即 1 审批通过,2 才能进行审批。1、2、3 审批流程全部通过才算通过审批
100 # - 审批操作:包括 同意、拒绝。一人同意即算通过。如果拒绝,其他审批人无法再操作,直到拒绝的审批人再修改审批结果为同意
101
102 # 3.1 按用户名审批,其中一人审批通过即可
103 - approver:
104 users:
105 - user1
106 - user2
107 - user3
108 title: 测试审批
109
110 # 3.2 按角色审批,其中一人审批通过即可
111 - approver:
112 roles:
113 - developer
114 - master
115 title: 开发审批
116
117 # 3.3 按用户名或角色审批(审批人满足 users 或 roles 其一即可),其中一人审批通过才行
118 - approver:
119 users:
120 - user4
121 - user5
122 roles:
123 - master
124 - owner
125 title: 运维审批
126
127 # 自定义部署按钮(缺省值:默认展示一个部署按钮)
128 # 使用场景:有多个不同模块(例如仓库、CI、制品库等),需要分开独立部署时,可以配置多个不同的按钮
129 # 注意:部署流水线中要区分是哪个模块,可以通过传入流水线的环境变量来区分
130 deploy:
131 - name: 部署按钮名1
132 description: 部署按钮描述
133 # 环境变量(触发部署流水线时,会将环境变量传入流水线),优先级高于上一级 env
134 env:
135 name1: value1
136 name2: value2
137 - name: 部署按钮名2
138 description: 部署按钮描述
139 # 环境变量(触发部署流水线时,会将环境变量传入流水线),优先级高于上一级 env
140 env:
141 name1: value1
142 name2: value2
name: 必填,环境名,需唯一。例如name: development,点击该环境对应的部署按钮,将触发.cnb.yml中的tag_deploy.development事件流水线description: 选填,环境描述env: 选填,传给部署流水线的环境变量。用户可根据需要传入需要的环境变量。button: 选填,对象数组格式,自定义按钮。点击按钮可触发云原生构建流水线,执行参数 event 对应的事件。name: 必填,按钮名。description: 选填,按钮描述。如存在,则将作为流水线 title,否则流水线使用默认 title。event: 必填,自定义事件,仅支持 web_trigger 事件。env: 选填,传给 web_trigger 流水线的环境变量,可继承上一级别环境变量,优先级高于上一级别环境变量。permissions: 选填,权限控制,满足users或roles其中之一即有权限触发构建(还需要有仓库写权限)。如果未配置permissions,则有仓库写权限即可出发构建users: 选填,Array<String>,用户名数组。可定义多个。roles: 选填,Array<String>,仓库角色数组。可定义多种仓库角色。owner(负责人)、master(管理员Administrator)、developer(开发者)、reporter(助手)、guest(访客)
deploy: 选填,对象数组格式,自定义部署按钮。点击按钮可触发云原生构建流水线,执行部署事件(tag_deploy.*)。name: 必填,按钮名。description: 选填,按钮描述。env: 选填,传给部署流水线的环境变量,优先级高于上一级 env。
require: 选填,对象数组格式。部署的前置条件,需满足了前置条件(部署环境要求、元数据要求、审批流程)才可进行部署操作。1、部署环境要求的参数包括
environmentName: 必填。环境名。after: 选填。时间,单位 s(秒)。表示environmentName的环境部署成功后 after 时间后才算满足前置条件。description: 选填。require的描述信息,附注用户理解require要求的内容。button: 选填。自定义按钮,点击可触发执行 event 传入的事件。可定义与 require 信息有关的按钮事件,注意:当 require 满足条件后隐藏按钮。name: 必填,按钮名。event: 必填,自定义事件,仅支持web_trigger_*事件。description: 选填,按钮描述。如存在,则将作为流水线 title,否则流水线使用默认 title。env: 选填,传给 web_trigger 流水线的环境变量,可继承上一级别环境变量,优先级高于上一级别环境变量。permissions: 选填,权限控制,满足users或roles其中之一即有权限触发构建(还需要有仓库写权限)。如果未配置permissions,则有仓库写权限即可出发构建users: 选填,Array<String>,用户名数组。可定义多个。roles: 选填,Array<String>,仓库角色数组。可定义多种仓库角色。owner(负责人)、master(管理员Administrator)、developer(开发者)、reporter(助手)、guest(访客)
2、元数据要求的参数包括
annotation: 必填。元数据的key值。expect: 选填。对元数据的value值的要求。对象格式,支持eq、ne、gt、lt、gte、lte、and、or、reg操作符。eq: 等于ne: 不等于gt: 大于lt: 小于gte: 大于等于lte: 小于等于and: 与or: 或reg: 能和正则表达式匹配
description: 选填。require的描述信息,附注用户理解require要求的内容。button: 选填。自定义按钮,点击可触发执行 event 传入的事件。可定义与 require 信息有关的按钮事件,注意:当 require 满足条件后隐藏按钮。name: 必填,按钮名。description: 选填,按钮描述。如存在,则将作为流水线 title,否则流水线使用默认 title。event: 必填,自定义事件,仅支持 web_trigger 事件。env: 选填,传给 web_trigger 流水线的环境变量,可继承上一级别环境变量,优先级高于上一级别环境变量。permissions: 选填,权限控制,满足users或roles其中之一即有权限触发构建(还需要有仓库写权限)。如果未配置permissions,则有仓库写权限即可出发构建users: 选填,Array<String>,用户名数组。可定义多个。roles: 选填,Array<String>,仓库角色数组。可定义多种仓库角色。owner(负责人)、master(管理员Administrator)、developer(开发者)、reporter(助手)、guest(访客)
3、审批流程要求的参数包括
approver: 必填,审批人定义,满足users或role的审批人中,一人审批通过即可。users: 用户名数组。可定义多个审批人。roles: 仓库角色数组。可定义多种仓库角色。owner(负责人)、master(管理员Administrator)、developer(开发者)、reporter(助手)、guest(访客)
title: 选填,审批标题,如测试审批。
自定义部署前置条件
对于每个环境可定义部署前置条件,只有满足所有前置条件才可进行部署操作。可定义如下三种前置条件:
- 环境部署要求:要求指定环境已经部署成功,且满足
after部署成功时间要求 - 元数据值要求:要求指定元数据对应的值是否满足要求
- 审批流程要求:可自定义审批流程指定审批人,并进行审批操作,当全部审批流程都审批通过后,才算满足要求
环境部署前置条件示例
1# .cnb/tag_deploy.yml
2environments:
3 - name: development
4 description: Development environment
5 env:
6 name: development
7 tag_name: $CNB_BRANCH
8
9 - name: staging
10 description: Staging environment
11 env:
12 name: staging
13 tag_name: $CNB_BRANCH
14 require:
15 # 要求 development 环境部署成功
16 - environmentName: development
17
18 - name: production
19 description: Production environment
20 require:
21 # 要求 staging 环境部署成功 30 分钟后
22 - environmentName: staging
23 after: 1800
元数据前置条件示例
1# .cnb/tag_deploy.yml
2environments:
3 - name: production
4 description: Production environment
5 require:
6 # 对元数据是否满足要求的检查
7
8 # 键值 key1 对应的 value 不为空,即有值
9 - annotation: key1
10
11 # 键值 key2 对应的 value 值需等于 value1
12 - annotation: key2
13 expect:
14 eq: value2
15
16 # 键值 key3 对应的 value 值需大于 1 且小于 10
17 - annotation: key3
18 expect:
19 and:
20 gt: 1
21 lt: 10
22 # 自定义按钮,点击可触发执行 web_trigger_annotation 事件。
23 # 可定义与 require 信息有关的按钮事件,当 require 满足条件后隐藏按钮
24 button:
25 - name: 生成元数据
26 event: web_trigger_annotation
27 # 如存在,则将作为流水线 title,否则流水线使用默认 title
28 description: 生成元数据流程
29 # 传给 web_trigger_annotation 事件流水线的环境变量
30 # 可继承上一级别环境变量,优先级高于上一级别环境变量
31 env:
32 name1: value1
33 name2: value2
审批流程前置条件示例
可自定义审批流程和指定审批人。有权限的审批人可进行审批操作(同意、拒绝)。全部流程审批通过后,即算满足要求
1# .cnb/tag_deploy.yml
2environments:
3 - name: production
4 description: Production environment
5 require:
6 # 对审批流程是否满足要求的检查(可按以下方式自定义审批流程)
7 # - 审批顺序:如下 1、2、3 审批流程需按顺序进行,即 1 审批通过,2 才能进行审批。1、2、3 审批流程全部通过才算通过审批
8 # - 审批操作:包括 同意、拒绝。一人同意即算通过。如果拒绝,其他审批人无法再操作,直到拒绝的审批人再修改审批结果为同意
9
10 # 按用户名审批,其中一人审批通过即可
11 - approver:
12 users:
13 - user1
14 - user2
15 - user3
16 title: 测试审批
17
18 # 按角色审批,其中一人审批通过即可
19 - approver:
20 roles:
21 - developer
22 - master
23 title: 开发审批
24
25 # 按用户名或角色审批(审批人满足 users 或 roles 其一即可),其中一人审批通过才行
26 - approver:
27 users:
28 - user4
29 - user5
30 roles:
31 - master
32 - owner
33 title: 运维审批
自定义部署流水线
如下示例定义了三种环境的部署事件流水线,
当在页面中选择部署 development 环境时,则触发 tag_deploy.development 事件。
流水线基于当前 tag 对应的代码进行部署操作。
1# .cnb.yml
2$:
3 tag_deploy.development:
4 - name: dev
5 stages:
6 - name: 部署环境名
7 script: echo $name
8 - name: tag 名
9 script: echo $tag_name
10 tag_deploy.staging:
11 - name: staging
12 stages:
13 - name: 部署环境名
14 script: echo $name
15 - name: tag 名
16 script: echo $tag_name
17 tag_deploy.production:
18 - name: production
19 stages:
20 - name: 部署环境名
21 script: echo $name
22 - name: tag 名
23 script: echo $tag_name
示例中的流水线事件名和部署环境类型对应关系如下:
tag_deploy.development:developmenttag_deploy.staging:stagingtag_deploy.production:production
自定义按钮触发的 web_trigger 事件
tag_deploy.yml 中的自定义按钮,仅支持触发 web_trigger事件 事件。
如下流水线配置中,web_trigger_annotation 事件执行时,会进行上传元数据操作。
1# .cnb.yml
2$:
3 # 自定义按钮可触发的事件
4 web_trigger_annotation:
5 - stages:
6 - name: 上传元数据
7 image: cnbcool/annotations:latest
8 settings:
9 data: |
10 key1=value1
11 key2=value2
部署权限说明
需有 仓库写权限 且有 推送 Tag 权限的用户才能进行部署操作。