部署

部署方式:可在仓库 tag 列表页面,点击部署按钮,选择部署环境类型后触发部署流水线,执行部署事件。

部署事件名:以 tag_deploy. 开头,如环境名为 development,则事件名为 tag_deploy.development

用户需自定义部署环境和部署流水线:

# 自定义部署环境

在仓库根目录下增加 .cnb/tag_deploy.yml 文件用于配置部署环境。 如下示例中定义了 developmentstagingproduction 三种环境,用户可在页面上选择需要部署的环境类型。

# .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 选填。部署的前置条件,需满足了前置条件才可进行部署操作。 部署环境对应的参数包括:environmentNameafterbuttondescription, 元数据对应的参数包括:annotationexpectbuttondescription, 其中 afterexpectbuttondescription 为选填。
    • environmentName: 环境名
    • after: 时间,单位 s(秒)。表示 environmentName 的环境部署成功后 after 时间后才算满足前置条件
    • annotation: 键值对,键值对中的键为元数据键,键值对中的值为元数据值
    • expect: 期望值,对象格式,支持 eqnegtltgtelteandorreg 操作符
      • 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.developmentdevelopment
  • tag_deploy.stagingstaging
  • tag_deploy.productionproduction

# 自定义按钮触发的 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 权限的用户可进行部署操作