当前位置: 首页 > news >正文

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

建议:

  • 可封装为一个项目脚本: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)

思路:

  1. 使用 git diff 获取本次改动的文件
  2. 针对改动的每个文件,使用 git blame 获取相关代码行的最近作者
  3. 使用 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
  • 条件: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 ✅↓自动合并 & 自动关联飞书任务

相关文章:

  • 使用 Typora + PicGo + Gitee/GitHub 构建 Markdown 图床技术方案
  • Kafka 命令行样例大全
  • 直观讲解生成对抗网络背后的数学原理
  • java kafka
  • servlet-优化
  • 数据仓库是什么?数据仓库架构有哪些?
  • C++/Qt中QActionGroup类用法
  • 6.第六章:数据分类的技术体系
  • 形象解释 HTTP 的四种常见请求方式及其中的区别联系
  • DDD领域驱动与传统CRUD
  • Datawhale AI春训营——用AI帮助老人点餐
  • 前端跨端框架的开发以及IOS和安卓的开发流程和打包上架的详细流程
  • (done) 吴恩达版提示词工程 3. 迭代 (控制输出长度、提取特定细节、输出 HTML 格式)
  • Ubuntu下软件运行常见异常退出问题汇总分析
  • Qt本地化 - installTranslator不生效
  • HarmonyOs @hadss/hmrouter路由接入
  • 外观模式:简化复杂系统接口的设计模式
  • RS232转ProfibusDP网关:连接未来传感器的关键
  • 4.1 融合架构设计:LLM与Agent的协同工作模型
  • 2025上海车展:光峰科技全球首发“灵境”智能车载光学系统
  • 政治局会议:根据形势变化及时推出增量储备政策,加强超常规逆周期调节
  • 四川公布一起影视盗版案例:1个网站2人团伙盗售30多万部
  • 国新办发布会丨2024年市监部门查办知产领域侵权行政违法案件4.4万件
  • 为什么猛起身会头晕?你的身体在发出这个警报
  • 印控克什米尔26名游客遭恐袭丧生后,印度对巴宣布多项反制措施
  • 从“龙队”到“龙副主席”,国乒这批退役球员为何不当教练了