配置评审人

git:reviewer

PR 添加评审人。

# 适用事件

  • pull_request
  • pull_request.target

# 参数

# type

操作类型

  • add-reviewer: 添加 reviewer,添加 reviewers 参数传入的成员
  • add-reviewer-from-repo-members: 从仓库直接成员里选一名,添加为 reviewer
  • add-reviewer-from-group-members: 从仓库父组织(直接上级组织)里选一名,添加为 reviewer
  • add-reviewer-from-outside-collaborator-members: 从仓库的外部协作者里选一名,添加为 reviewer
  • remove-reviewer 从已有的 reviewer 中删除指定的成员

# reviewers

  • type: Array<String> | String
  • required: false

添加删除reviewer 用户名。多个使用 ,; 分隔。

typeadd-reviewerremove-reviewer 时必填。

若同时配置了 reviewersreviewersConfig ,则会在两者中随机选指定数量的评审人

# count

  • type: Number
  • required: false

指定要添加的 reviewer 数量,随机抽取。

  • type=add-reviewer,count 缺省值为 reviewers 的数量,即全部添加
  • type=add-reviewer-from-repo-members,count 缺省值为 1
  • type=add-reviewer-from-group-members,count 缺省值为 1
  • type=add-reviewer-from-outside-collaborator-members,count 缺省值为 1

如果已有 reviewer 的数量 < count ,那么补齐。

如果已有 reviewer 的数量 >= count ,那么什么也不做。

# exclude

  • type: Array<String> | String
  • required: false

排除指定的用户。

# reviewersConfig

文件评审人配置,如果配置中有配置当前变更文件的评审人,则会被添加为评审人。

typeadd-reviewer 时有效。

支持两种格式:

  • 字符串格式,传入配置文件相对路径(支持 json 文件):
reviewersConfig: config.json
{
   "./src": "name1,name2",
   ".cnb.yml": "name3"
}
  • 对象格式,传入文件评审人配置:
reviewersConfig:
  ./src: name1,name2
  .cnb.yml: name3

其中,文件评审人配置的 key 为文件相对路径;value 为评审人英文名,用英文逗号分隔。

若同时配置了 reviewersreviewersConfig,则会在两者中随机选指定数量的评审人。

# role

评审人可以添加的角色 可选包括:DeveloperMasterOwner 如果选择 Developer,则可添加 Developer 及以上权限成员,包括 DeveloperMasterOwner

# 输出结果

{
    // 当前有效的 reviewers
    reviewers,

    // reviewers对应的 at 消息格式,方便发送通知
    reviewersForAt
}

# 配置样例

  • 添加评审人
main:
  pull_request:
    - stages:
        - name: 添加评审人
          type: git:reviewer
          options:
            type: add-reviewer
            reviewers: aaa;bbb
  • 删除指定成员
main:
  pull_request:
    - stages:
        - name: 删除评审人
          type: git:reviewer
          options:
            type: remove-reviewer
            reviewers: aaa
  • 结合 ifModify,指定文件被修改时添加 reviewer




 
 
 





main:
  pull_request:
    - stages:
        - name: 改配置?需要特别 review
          ifModify:
            - ".cnb.yml"
            - "configs/**"
          type: git:reviewer
          options:
            type: add-reviewer
            reviewers: bbb
  • 结合 if,在指定条件下将某些人添加为 reviewer




 
 
 




main:
  pull_request:
    - stages:
        - name: 下班时间发版本?需指定人评审。
          if: |
            [ $(date +%H) -ge 18 ]
          type: git:reviewer
          options:
            type: add-reviewer
            reviewers: bbb
  • 随机选择一名负责人走查代码
main:
  pull_request:
    - stages:
        - name: random
          image: tencentcom/random
          settings:
            from:
              - aaa
              - bbb
          exports:
            result: CURR_REVIEWER
        - name: show  CURR_REVIEWER
          script: echo ${CURR_REVIEWER}
        - name: add reviewer
          type: git:reviewer
          options:
            type: add-reviewer
            reviewers: ${CURR_REVIEWER}
  • 从当前仓库成员里选一名评审人进行 review
main:
  pull_request:
    - stages:
        - name: add reviewer
          type: git:reviewer
          options:
            type: add-reviewer-from-repo-members

# 最佳实践

建立专用的 CR 群,交叉评审自动合并

  1. PR 随机选择N名评审者,通知到群
  2. 评审通过后自动合并
  3. 记录评审者信息在提交信息中
  4. Git 设置满足多人评审自动合并策略实现多人交叉评审
main:
  review:
    - stages:
        - name: CR 通过后自动合并
          type: git:auto-merge
          options:
            mergeType: squash
            removeSourceBranch: true
            mergeCommitMessage: $CNB_LATEST_COMMIT_MESSAGE
          exports:
            reviewedBy: REVIEWED_BY
        # 将评审消息发送到企业微信机器人
        - name: notify
          image: tencentcom/wecom-message
          settings:
            msgType: markdown
            robot: "155af237-6041-4125-9340-000000000000"
            content: |
              > CR 通过后自动合并 <@${CNB_BUILD_USER}> 
              >  
              > ${CNB_PULL_REQUEST_TITLE}
              > [${CNB_EVENT_URL}](${CNB_EVENT_URL})
              > 
              > ${REVIEWED_BY}

  pull_request:
    - stages:
        # ...省略其它任务

        # 发送到 CR 专用群
        - name: add reviewer
          type: git:reviewer
          options:
            reviewers: aaa,bbb,ccc,ddd
            count: 2
          exports:
            reviewersForAt: CURR_REVIEWER_FOR_AT
        - name: notify
          image: tencentcom/wecom-message
          settings:
            msgType: markdown
            robot: "155af237-6041-4125-9340-000000000000"
            message: |
              > ${CURR_REVIEWER_FOR_AT}
              >  
              > ${CNB_PULL_REQUEST_TITLE}
              > [${CNB_EVENT_URL}](${CNB_EVENT_URL})
              >  
              > from ${CNB_BUILD_USER}