部署
部署方式:可在仓库 tag 列表页面,点击部署按钮,选择部署环境类型后触发部署流水线,执行部署事件。
部署事件名:以 tag_deploy.
开头,如环境名为 development
,则事件名为 tag_deploy.development
。
用户需自定义部署环境和部署流水线:
# 自定义部署环境
在仓库根目录下增加 .cnb/tag_deploy.yml
文件用于配置部署环境。
如下示例中定义了 development
、staging
、production
三种环境,用户可在页面上选择需要部署的环境类型。
# .cnb/tag_deploy.yml
environments:
- name: development
description: Development environment
# 环境变量(触发流水线时,会将环境变量传入流水线,包括部署流水线、web_trigger 流水线)
env:
name: development
# CNB_BRANCH: 环境变量,tag_push 事件中,为 tag 名
tag_name: $CNB_BRANCH
- name: staging
description: Staging environment
env:
name: staging
# CNB_BRANCH: 环境变量,tag_push 事件中,为 tag 名
tag_name: $CNB_BRANCH
- name: production
description: Production environment
# 环境变量(触发流水线时,会将环境变量传入流水线,包括部署流水线、web_trigger 流水线)
env:
name: production
# CNB_BRANCH: 环境变量,tag_push 事件中,为 tag 名
tag_name: $CNB_BRANCH
button:
- name: 创建审批单
# 需要在 .cnb.yml 中自定义 web_trigger_approval 事件流水线
event: web_trigger_approval
# 传给 web_trigger_approval 事件流水线的环境变量
# 可继承上一级别环境变量,优先级高于上一级别环境变量
env:
name1: value1
name2: value2
# require 部署当前环境需要满足的前置条件,支持对环境和元数据的检查,数组格式(数组元素可以是字符串或对象)
require:
# 1、数组元素为字符串(仅支持部署环境)
# development 环境部署成功
- development
# 2、数组元素为对象(支持部署环境和元数据)
# 部署环境:staging 环境部署成功 30 分钟后
- environmentName: development
after: 1800
# 元数据:键值 key1 对应的 value 不为空,即有值
- annotation: key1
# 元数据:键值 key1 对应的 value 值需等于 value1
- annotation: key1
expect:
eq: value1
# 元数据:键值 key2 对应的 value 值需大于 1 且小于 10
- annotation: key2
expect:
and:
gt: 1
lt: 10
# 自定义按钮,点击可触发执行 web_trigger_annotation 事件。
# 可定义与 require 信息有关的按钮事件,当 require 满足条件后隐藏按钮
button:
- name: 生成元数据
event: web_trigger_annotation
# 传给 web_trigger_annotation 事件流水线的环境变量
# 可继承上一级别环境变量,优先级高于上一级别环境变量
env:
name1: value1
name2: value2
# 自定义部署按钮(缺省值:默认展示一个部署按钮)
# 使用场景:有多个不同模块(例如仓库、CI、制品库等),需要分开独立部署时,可以配置多个不同的按钮
# 注意:部署流水线中要区分是哪个模块,可以通过传入流水线的环境变量来区分
deploy:
- name: 部署按钮名1
description: 部署按钮描述
# 环境变量(触发部署流水线时,会将环境变量传入流水线),优先级高于上一级 env
env:
name1: value1
name2: value2
- name: 部署按钮名2
description: 部署按钮描述
# 环境变量(触发部署流水线时,会将环境变量传入流水线),优先级高于上一级 env
env:
name1: value1
name2: value2
name
: 必填,环境名,需唯一description
: 选填,环境描述env
: 选填,传给部署流水线的环境变量,用户可根据需要传入需要的环境变量,上述配置中传入的环境名和 tag 名button
: 选填,对象数组格式。自定义按钮,点击按钮可触发云原生构建流水线,执行 event 传入的事件name
: 必填,按钮名event
: 必填,自定义事件,仅支持 web_trigger 事件env
: 选填,传给 web_trigger 流水线的环境变量,可继承上一级别环境变量,优先级高于上一级别环境变量
deploy
: 选填,对象数组格式。自定义部署按钮,点击按钮可触发云原生构建流水线,执行自定义 web_trigger 事件name
: 必填,按钮名description
: 选填,按钮描述env
: 选填,传给部署流水线的环境变量,优先级高于上一级 env
require
: 选填,字符串数组或对象数组格式,其中 after 选填。部署的前置条件,需满足了前置条件才可进行部署操作。 部署环境对应的参数包括:environmentName
、after
、button
、description
, 元数据对应的参数包括:annotation
、expect
、button
、description
, 其中after
、expect
、button
、description
为选填。environmentName
: 环境名after
: 时间,单位 s(秒)。表示environmentName
的环境部署成功后 after 时间后才算满足前置条件annotation
: 键值对,键值对中的键为元数据键,键值对中的值为元数据值expect
: 期望值,对象格式,支持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
: 必填,按钮名event
: 必填,自定义事件,仅支持 web_trigger 事件env
: 选填,传给 web_trigger 流水线的环境变量,可继承上一级别环境变量,优先级高于上一级别环境变量
# 自定义部署流水线
如下示例定义了三种环境的部署事件流水线,
当在页面中选择部署 development
环境时,则触发 tag_deploy.development
事件。
流水线基于当前 tag 对应的代码进行部署操作。
# .cnb.yml
$:
tag_deploy.development:
- name: dev
stages:
- name: 部署环境名
script: echo $name
- name: tag 名
script: echo $tag_name
tag_deploy.staging:
- name: staging
stages:
- name: 部署环境名
script: echo $name
- name: tag 名
script: echo $tag_name
tag_deploy.production:
- name: production
stages:
- name: 部署环境名
script: echo $name
- name: tag 名
script: echo $tag_name
示例中的流水线事件名和部署环境类型对应关系如下:
tag_deploy.development
:development
tag_deploy.staging
:staging
tag_deploy.production
:production
# 自定义按钮触发的 web_trigger 事件
tag_deploy.yml
中的自定义按钮,仅支持触发 web_trigger 事件。
如下流水线配置中,web_trigger_annotation
事件执行时,会进行上传元数据操作。
# .cnb.yml
$:
# 自定义按钮可触发的事件
web_trigger_annotation:
- stages:
- name: 上传元数据
image: cnbcool/annotations:latest
settings:
data: |
key1=value1
key2=value2
# 部署权限说明
仅有 仓库写权限
且有 推送 Tag
权限的用户可进行部署操作