HOW - Code Review 流程自动化
文章目录
- 前言
- 流程自动化落地
- 一、自动发起 MR(Merge Request)
- macOS 安装 glab
- 方式一:使用 Homebrew(推荐)
- 其他平台安装方法
- Linux (apt)
- Windows(scoop 或 chocolatey)
- 使用示例:自动创建 MR
- 二、自动代码检查(Lint / Test / Static Analysis)
- 三、自动计算评审人(根据 git blame)
- 四、自动合并 MR(通过审核+CI 后)
- 五、自动催办未评审变更(飞书/钉钉)
- 六、自动关联飞书项目(PR 与任务自动关联)
- 技术选型建议汇总
- 自动化流程图示意
前言
在 HOW - 建立高效、可持续的团队 Code Review 机制 中我们介绍了建立一个高效、可持续的 Code Review 机制。文中末尾我们简单提到了自动化流程优化。今天我们主要介绍这一部分。
流程自动化落地
下面是一个较为完整的自动化 Code Review 流程框架,可以帮助你实现这些目标:
一、自动发起 MR(Merge Request)
实现方式:
- 使用 Git 命令结合 GitLab/GitHub CLI 工具,如:
- GitLab:
glab mr create
- GitHub:
gh pr create
- GitLab:
建议:
- 可封装为一个项目脚本:
npm run submit-mr
或./scripts/create_mr.sh
- 可集成到代码提交前后的 git hook(如 pre-push)
以 gitlab 为例,如果你未曾使用过 glab
或者本地没有安装 glab
工具(GitLab CLI 工具),下面是安装 glab
的方式,根据你用的是 macOS 或其他平台来选择:
macOS 安装 glab
方式一:使用 Homebrew(推荐)
brew install glab
安装完成后,你可以运行:
glab --version
验证是否安装成功。接着执行登录:
glab auth login
会要求输入仓库域名和 token,来配置 GitLab 账户的访问令牌(支持 GitLab.com 和自建 GitLab)。
其他平台安装方法
Linux (apt)
curl -s https://packagecloud.io/install/repositories/zaquestion/glab/script.deb.sh | sudo bash
sudo apt install glab
Windows(scoop 或 chocolatey)
scoop install glab
或者
choco install glab
使用示例:自动创建 MR
登录成功,就可以使用命令来自动化发起 MR 了。首先,通过执行 glab mr create --help
可以查看示例:
• 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 + 输入标题 + 使用描述模板 + 自动打开网页:
glab mr create \--title "feat: 新增自动化发布" \--description "$(cat .gitlab/merge_request_templates/default.md)" \--web
改造成命令脚本
在 package.json
中:
"create-mr": "node ./create-mr.js"
创建 create-mr.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 页面:
pnpm run create-mr --title="需求xx"
二、自动代码检查(Lint / Test / Static Analysis)
实现方式:
- 使用 CI 工具如 GitHub Actions / GitLab CI / Jenkins:
jobs:lint:script: npm run linttest:script: npm run teststatic-check:script: npm run type-check
- 可配合 ESLint、Prettier、TypeScript、SonarQube 等工具
注意:
- 失败应阻止 MR 合并
三、自动计算评审人(根据 git blame)
思路:
- 使用
git diff
获取本次改动的文件 - 针对改动的每个文件,使用
git blame
获取相关代码行的最近作者 - 使用 GitHub/GitLab API 自动 @评审人 并分配到 MR 上
推荐工具/脚本思路:
- 自建 Node.js/Python 脚本或使用开源工具:
- blame-the-author
git-blame-someone-else
(社区项目)
可定制逻辑:
- 文件创建人(首次提交)
- 当前修改的代码行的作者(blame)
- 最近对该文件有 commit 的人
四、自动合并 MR(通过审核+CI 后)
实现方式:
- GitHub Actions / GitLab Pipelines + API:
- GitHub:
gh pr merge
- GitLab:
glab mr merge
- GitHub:
- 条件: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 ✅↓自动合并 & 自动关联飞书任务