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 ✅
      ↓
 自动合并 & 自动关联飞书任务
相关推荐
YongCheng_Liang10 分钟前
网络工程师笔记8-OSPF协议
运维·网络·网络协议
河南博为智能科技有限公司29 分钟前
动力环境监控主机-全方位一体化监控解决方案
运维·服务器·人工智能·物联网·边缘计算
vxtkjzxt8881 小时前
自动化脚本的自动化执行实践
运维·自动化
北京耐用通信2 小时前
耐达讯自动化Modbus RTU转Profibus,让电磁阀连接从此与众不同!
网络·人工智能·网络协议·网络安全·自动化
漫谈网络2 小时前
什么是RDMA?—— 一场网络通信的范式革命
运维·服务器·网络
tt666qq3 小时前
linux文件系统学习
linux·运维·学习
杨云龙UP3 小时前
SQL Server数据库事务日志问题的诊断与解法(从膨胀到瘦身)
运维·数据库·sql·sqlserver·serverless
七七七七073 小时前
【Linux系统】进程替换
linux·运维·服务器
霍格沃兹软件测试开发5 小时前
Playwright MCP浏览器自动化详解指南
运维·自动化
前行居士5 小时前
Sub-process /usr/bin/dpkg returned an error code (1)
linux·运维·windows