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 ✅
      ↓
 自动合并 & 自动关联飞书任务
相关推荐
adinnet20261 小时前
工厂生产决策辅助:辅助分析各工序成本与效率数据
人工智能·自动化
guo_wen_qiang3 小时前
mac中docker desktop服务端开启远程访问
运维·服务器·macos·docker
小五传输4 小时前
消防总队信创改造实践:国产文件传输服务器解决文件传输难题
大数据·运维·安全
云飞云共享云桌面4 小时前
医疗器械设备研发:多人同时操作 SolidWorks,怎样依靠单台服务器替代多工作站
运维·服务器·网络·数据库·制造
T型码农要学习4 小时前
开源项目5|FileBrowser:免费在线文件管理器!随时随地管控服务器文件
运维·服务器·人工智能·开源
朱 欢 庆4 小时前
云服务器附件备份到本机内网服务器
运维·服务器·前端·经验分享
智恒百亿4 小时前
8 卡 RTX 5090 服务器深度实测:256GB 显存能否支撑 70B 模型微调?选型参考
大数据·运维·服务器·人工智能
志栋智能9 小时前
超自动化运维如何支持合规审计?
运维·自动化
小诗懂技术10 小时前
【网络通信UDP】基础 进程间不同主机的通信
运维·服务器·网络
名字还没想好☜10 小时前
Docker 容器安全加固实战:非 root、只读根文件系统、drop capabilities 与最小攻击面
运维·安全·docker·容器·kubernetes