HOW - Code Review 流程自动化

文章目录

  • 前言
  • 流程自动化落地
    • [一、自动发起 MR(Merge Request)](#一、自动发起 MR(Merge Request))
      • [macOS 安装 glab](#macOS 安装 glab)
        • [方式一:使用 Homebrew(推荐)](#方式一:使用 Homebrew(推荐))
      • 其他平台安装方法
        • Linux (apt)
        • [Windows(scoop 或 chocolatey)](#Windows(scoop 或 chocolatey))
      • [使用示例:自动创建 MR](#使用示例:自动创建 MR)
    • [二、自动代码检查(Lint / Test / Static Analysis)](#二、自动代码检查(Lint / Test / Static Analysis))
    • [三、自动计算评审人(根据 git blame)](#三、自动计算评审人(根据 git blame))
    • [四、自动合并 MR(通过审核+CI 后)](#四、自动合并 MR(通过审核+CI 后))
    • 五、自动催办未评审变更(飞书/钉钉)
    • [六、自动关联飞书项目(PR 与任务自动关联)](#六、自动关联飞书项目(PR 与任务自动关联))
    • 技术选型建议汇总
    • 自动化流程图示意

前言

HOW - 建立高效、可持续的团队 Code Review 机制 中我们介绍了建立一个高效、可持续的 Code Review 机制。文中末尾我们简单提到了自动化流程优化。今天我们主要介绍这一部分。

流程自动化落地

下面是一个较为完整的自动化 Code Review 流程框架,可以帮助你实现这些目标:

一、自动发起 MR(Merge Request)

实现方式:

  • 使用 Git 命令结合 GitLab/GitHub CLI 工具,如:
    • GitLab:glab mr create
    • GitHub:gh pr create

建议:

  • 可封装为一个项目脚本:npm run submit-mr./scripts/create_mr.sh
  • 可集成到代码提交前后的 git hook(如 pre-push)

以 gitlab 为例,如果你未曾使用过 glab 或者本地没有安装 glab 工具(GitLab CLI 工具),下面是安装 glab 的方式,根据你用的是 macOS 或其他平台来选择:

macOS 安装 glab

方式一:使用 Homebrew(推荐)
bash 复制代码
brew install glab

安装完成后,你可以运行:

bash 复制代码
glab --version

验证是否安装成功。接着执行登录:

bash 复制代码
glab auth login

会要求输入仓库域名和 token,来配置 GitLab 账户的访问令牌(支持 GitLab.com 和自建 GitLab)。

其他平台安装方法

Linux (apt)
bash 复制代码
curl -s https://packagecloud.io/install/repositories/zaquestion/glab/script.deb.sh | sudo bash
sudo apt install glab
Windows(scoop 或 chocolatey)
powershell 复制代码
scoop install glab

或者

powershell 复制代码
choco install glab

使用示例:自动创建 MR

登录成功,就可以使用命令来自动化发起 MR 了。首先,通过执行 glab mr create --help 可以查看示例:

bash 复制代码
• glab mr new
• glab mr create -a username -t "fix annoying bug"
• glab mr create -f --draft --label RFC
• glab mr create --fill --web
• glab mr create --fill --fill-commit-body --yes

下面是示例,支持自动创建 MR + 输入标题 + 使用描述模板 + 自动打开网页:

bash 复制代码
glab mr create \
  --title "feat: 新增自动化发布" \
  --description "$(cat .gitlab/merge_request_templates/default.md)" \
  --web

改造成命令脚本

package.json 中:

json 复制代码
"create-mr": "node ./create-mr.js"

创建 create-mr.js 文件:

js 复制代码
const { execSync } = require("child_process")

const args = process.argv.slice(2)
const titleArg = args.find((arg) => arg.startsWith("--title="))
const title = titleArg ? titleArg.replace("--title=", "") : "默认标题"

const templatePath = ".gitlab/merge_request_templates/default.md"
const fs = require("fs")
const description = fs.existsSync(templatePath)
    ? fs.readFileSync(templatePath, "utf-8")
    : "默认描述内容"

const command = `glab mr create --title "${title}" --description "${description}" --web`
execSync(command, { stdio: "inherit" })

即可在编辑器控制台直接调起 MR 页面:

bash 复制代码
pnpm run create-mr --title="需求xx"

二、自动代码检查(Lint / Test / Static Analysis)

实现方式:

  • 使用 CI 工具如 GitHub Actions / GitLab CI / Jenkins:

    yaml 复制代码
    jobs:
      lint:
        script: npm run lint
      test:
        script: npm run test
      static-check:
        script: npm run type-check
  • 可配合 ESLint、Prettier、TypeScript、SonarQube 等工具

注意:

  • 失败应阻止 MR 合并

三、自动计算评审人(根据 git blame)

思路:

  1. 使用 git diff 获取本次改动的文件
  2. 针对改动的每个文件,使用 git blame 获取相关代码行的最近作者
  3. 使用 GitHub/GitLab API 自动 @评审人 并分配到 MR 上

推荐工具/脚本思路:

  • 自建 Node.js/Python 脚本或使用开源工具:

可定制逻辑:

  • 文件创建人(首次提交)
  • 当前修改的代码行的作者(blame)
  • 最近对该文件有 commit 的人

四、自动合并 MR(通过审核+CI 后)

实现方式:

  • GitHub Actions / GitLab Pipelines + API:
    • GitHub:gh pr merge
    • GitLab:glab mr merge
  • 条件:MR 已通过 Code Review + CI 成功 + 没有 WIP 标记

五、自动催办未评审变更(飞书/钉钉)

方式一:使用飞书机器人或钉钉机器人

  • 周期性脚本检测未被评审的 MR(GitLab/GitHub API)
  • 提取评审人信息,生成提醒内容
  • 调用飞书/钉钉 Webhook 推送消息(@具体用户)

方式二:集成工具(推荐)

  • 飞书/钉钉的"待办"/"日程"接口结合 Code Review 状态推送提醒

六、自动关联飞书项目(PR 与任务自动关联)

方法一:利用 commit message 自动关联任务

  • 如:feat: 新功能 #task123,在飞书项目中解析 #task123
  • 飞书项目设置 webhook 接受 MR 创建事件

方法二:PR/MR 创建时调用飞书 API 自动生成或绑定任务

技术选型建议汇总

功能 工具/方案
MR 自动创建 GitHub CLI / GitLab CLI / 自定义 shell 脚本
自动代码检查 GitHub Actions / GitLab CI / ESLint / Jest
自动评审人分配 git blame + GitHub/GitLab API + 脚本
自动合并 GitHub Actions + gh pr merge / GitLab API
飞书/钉钉通知 Webhook + 周期性脚本(cron + nodejs/python)
自动关联飞书项目 commit 关键词解析 / Webhook / 飞书 API

自动化流程图示意

复制代码
开发者提交代码
      ↓
 本地脚本自动创建 MR
      ↓
 CI 触发自动检查 lint/test/type-check
      ↓
 自动分配评审人(git blame)
      ↓
 飞书/钉钉提醒评审
      ↓
 MR 通过审核 + CI ✅
      ↓
 自动合并 & 自动关联飞书任务
相关推荐
哈哈幸运6 分钟前
Linux Awk 深度解析:10个生产级自动化与云原生场景
linux·云原生·自动化·awk·三剑客
Linux运维老纪12 分钟前
Linux之七大难命令(The Seven Difficult Commands of Linux)
linux·运维·服务器·云计算·运维开发
张书名1 小时前
高性能服务器配置经验指南3——安装服务器可能遇到的问题及解决方法
运维·服务器
前进的程序员2 小时前
在Linux驱动开发中使用DeepSeek的方法
linux·运维·服务器·人工智能
Tome--2 小时前
运维面试题01
运维
银河麒麟操作系统2 小时前
【银河麒麟高级服务器操作系统】磁盘只读问题分析
java·linux·运维·服务器·jvm
b***25113 小时前
自动点焊机批发:工业制造的高效之选
物联网·自动化·制造
小鑫仔_x3 小时前
使用 VMware 安装一台 Linux 系统之Centos
linux·运维·centos
hnlucky4 小时前
CentOS 7 系统中,防火墙要怎么使用?
linux·运维·网络·网络安全·centos
Waitccy4 小时前
CentOS 7 磁盘分区详细教程
linux·运维·centos