部署

部署方式:可在仓库 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 名
      tag_name: $CNB_BRANCH

  - name: staging
    description: Staging environment
    env:
      name: staging
      # CNB_BRANCH: 环境变量,部署事件中,为 tag 名
      tag_name: $CNB_BRANCH

  - name: production
    description: Production environment
    # 环境变量(触发流水线时,会将环境变量传入流水线,包括部署流水线、web_trigger 流水线)
    env:
      name: production
      # CNB_BRANCH: 环境变量,部署事件中,为 tag 名
      tag_name: $CNB_BRANCH
    button:
      - name: 创建审批单
        # 如存在,则将作为流水线 title,否则流水线使用默认 title
        description: 自动创建审批单流程
        # 需要在 .cnb.yml 中自定义 web_trigger_approval 事件流水线
        event: web_trigger_approval
        # 传给 web_trigger_approval 事件流水线的环境变量
        # 可继承上一级别环境变量,优先级高于上一级别环境变量
        env:
          name1: value1
          name2: value2

    # 部署前置条件检查(支持对环境、元数据、审批流程的检查),满足所有前置条件才可进行部署操作
    require:
      # 1 对部署环境是否满足要求的检查

      # 1.1 要求 development 环境部署成功
      - environmentName: development

      # 1.2 要求 staging 环境部署成功 30 分钟后
      - environmentName: staging
        after: 1800

      # 2 对元数据是否满足要求的检查

      # 2.1 键值 key1 对应的 value 不为空,即有值
      - annotation: key1

      # 2.2 键值 key1 对应的 value 值需等于 value1
      - annotation: key1
        expect:
          eq: value1

      # 2.3 键值 key2 对应的 value 值需大于 1 且小于 10
      - annotation: key2
        expect:
          and:
            gt: 1
            lt: 10
        # 自定义按钮,点击可触发执行 web_trigger_annotation 事件。
        # 可定义与 require 信息有关的按钮事件,当 require 满足条件后隐藏按钮
        button:
          - name: 生成元数据
            event: web_trigger_annotation
            # 如存在,则将作为流水线 title,否则流水线使用默认 title
            description: 生成元数据流程
            # 传给 web_trigger_annotation 事件流水线的环境变量
            # 可继承上一级别环境变量,优先级高于上一级别环境变量
            env:
              name1: value1
              name2: value2

      # 3 对审批流程是否满足要求的检查(可按以下方式自定义审批流程)
      # - 审批顺序:如下 1、2、3 审批流程需按顺序进行,即 1 审批通过,2 才能进行审批。1、2、3 审批流程全部通过才算通过审批
      # - 审批操作:包括 同意、拒绝。一人同意即算通过。如果拒绝,其他审批人无法再操作,直到拒绝的审批人再修改审批结果为同意

      # 3.1 按用户名审批,其中一人审批通过即可
      - approver:
          users:
            - user1
            - user2
            - user3
        title: 测试审批

      # 3.2 按角色审批,其中一人审批通过即可
      - approver:
          roles:
            - developer
            - master
        title: 开发审批

      # 3.3 按用户名或角色审批(审批人满足 users 或 roles 其一即可),其中一人审批通过才行
      - approver:
          users:
            - user4
            - user5
          roles:
            - master
            - owner
        title: 运维审批

    # 自定义部署按钮(缺省值:默认展示一个部署按钮)
    # 使用场景:有多个不同模块(例如仓库、CI、制品库等),需要分开独立部署时,可以配置多个不同的按钮
    # 注意:部署流水线中要区分是哪个模块,可以通过传入流水线的环境变量来区分
    deploy:
      - name: 部署按钮名1
        description: 部署按钮描述
        # 环境变量(触发部署流水线时,会将环境变量传入流水线),优先级高于上一级 env
        env:
          name1: value1
          name2: value2
      - name: 部署按钮名2
        description: 部署按钮描述
        # 环境变量(触发部署流水线时,会将环境变量传入流水线),优先级高于上一级 env
        env:
          name1: value1
          name2: value2
  • name: 必填,环境名,需唯一

  • description: 选填,环境描述

  • env: 选填,传给部署流水线的环境变量。用户可根据需要传入需要的环境变量。

  • button: 选填,对象数组格式,自定义按钮。点击按钮可触发云原生构建流水线,执行参数 event 对应的事件。

    • name: 必填,按钮名。
    • description: 选填,按钮描述。如存在,则将作为流水线 title,否则流水线使用默认 title。
    • event: 必填,自定义事件,仅支持 web_trigger 事件。
    • env: 选填,传给 web_trigger 流水线的环境变量,可继承上一级别环境变量,优先级高于上一级别环境变量。
  • 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 流水线的环境变量,可继承上一级别环境变量,优先级高于上一级别环境变量。

    2、元数据要求的参数包括

    • annotation: 必填。元数据的 key 值。

    • expect: 选填。对元数据的 value 值的要求。对象格式,支持 eqnegtltgtelteandorreg 操作符。

      • 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 流水线的环境变量,可继承上一级别环境变量,优先级高于上一级别环境变量。

    3、审批流程要求的参数包括

    • approver: 必填,审批人定义,满足 usersrole 的审批人中,一人审批通过即可。
      • users: 用户名数组。可定义多个审批人。
      • roles: 仓库角色数组。可定义多种仓库角色。
    • title: 选填,审批标题,如 测试审批

# 自定义部署前置条件

对于每个环境可定义部署前置条件,只有满足所有前置条件才可进行部署操作。可定义如下三种前置条件:

  • 环境部署要求:要求指定环境已经部署成功,且满足 after 部署成功时间要求
  • 元数据值要求:要求指定元数据对应的值是否满足要求
  • 审批流程要求:可自定义审批流程指定审批人,并进行审批操作,当全部审批流程都审批通过后,才算满足要求

# 环境部署前置条件示例

# .cnb/tag_deploy.yml
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:
      # 要求 development 环境部署成功
      - environmentName: development

  - name: production
    description: Production environment
    require:
      # 要求 staging 环境部署成功 30 分钟后
      - environmentName: staging
        after: 1800

# 元数据前置条件示例

# .cnb/tag_deploy.yml
environments:
  - name: production
    description: Production environment
    require:
      # 对元数据是否满足要求的检查

      # 键值 key1 对应的 value 不为空,即有值
      - annotation: key1

      # 键值 key2 对应的 value 值需等于 value1
      - annotation: key2
        expect:
          eq: value2

      # 键值 key3 对应的 value 值需大于 1 且小于 10
      - annotation: key3
        expect:
          and:
            gt: 1
            lt: 10
        # 自定义按钮,点击可触发执行 web_trigger_annotation 事件。
        # 可定义与 require 信息有关的按钮事件,当 require 满足条件后隐藏按钮
        button:
          - name: 生成元数据
            event: web_trigger_annotation
            # 如存在,则将作为流水线 title,否则流水线使用默认 title
            description: 生成元数据流程
            # 传给 web_trigger_annotation 事件流水线的环境变量
            # 可继承上一级别环境变量,优先级高于上一级别环境变量
            env:
              name1: value1
              name2: value2

# 审批流程前置条件示例

可自定义审批流程和指定审批人。有权限的审批人可进行审批操作(同意、拒绝)。全部流程审批通过后,即算满足要求

# .cnb/tag_deploy.yml
environments:
  - name: production
    description: Production environment
    require:
      # 对审批流程是否满足要求的检查(可按以下方式自定义审批流程)
      # - 审批顺序:如下 1、2、3 审批流程需按顺序进行,即 1 审批通过,2 才能进行审批。1、2、3 审批流程全部通过才算通过审批
      # - 审批操作:包括 同意、拒绝。一人同意即算通过。如果拒绝,其他审批人无法再操作,直到拒绝的审批人再修改审批结果为同意

      # 按用户名审批,其中一人审批通过即可
      - approver:
          users:
            - user1
            - user2
            - user3
        title: 测试审批

      # 按角色审批,其中一人审批通过即可
      - approver:
          roles:
            - developer
            - master
        title: 开发审批

      # 按用户名或角色审批(审批人满足 users 或 roles 其一即可),其中一人审批通过才行
      - approver:
          users:
            - user4
            - user5
          roles:
            - master
            - owner
        title: 运维审批

# 自定义部署流水线

如下示例定义了三种环境的部署事件流水线, 当在页面中选择部署 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 权限的用户才能进行部署操作。