当前位置: 首页 > 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 ✅↓自动合并 & 自动关联飞书任务
http://www.xdnf.cn/news/111601.html

相关文章:

  • 学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、ShaderPass渲染通道),案例一
  • 17.第二阶段x64游戏实战-人工遍历二叉树结构
  • 给git配置SSH(github,gitee)
  • 【前端】【业务场景】【面试】在前端项目中,当涉及大量数据渲染时,如何提高渲染性能并避免页面卡顿?
  • uniapp 安卓离线本地打包,Android Studio生成apk包
  • 27、Session有什么重⼤BUG?微软提出了什么⽅法加以解决?
  • Linux 命令行与 vi/vim 编辑器完全指南
  • continue插件实现IDEA接入本地离线部署的deepseek等大模型
  • 想要从视频中提取背景音乐怎么搞?其实视频提取音频非常简单
  • 金融系统上云之路:云原生后端架构在金融行业的演化与实践
  • 以太网的mac帧格式
  • 基于Vulkan Specialization Constants的材质变体系统
  • 第三篇:Django创建表关系及生命周期流程图
  • Java后端开发面试题(含答案)
  • java kafka
  • 初始https附带c/c++源码使用curl库调用
  • Java 调用webservice接口输出xml自动转义
  • 关于 xpath 查找 XML 元素的一点总结
  • 2025新版懒人精灵零基础及各板块核心系统视频教程-全分辨率免ROOT自动化开发
  • Docker从0-1搭建个人云盘(支持Android iOS PC)
  • 关于Safari浏览器在ios<16.3版本不支持正则表达式零宽断言的解决办法
  • 汽车自动驾驶介绍
  • OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)
  • 数据库进阶之MySQL 程序
  • ARINC818协议一些说明综述
  • onlyoffice8.3.3发布了-豆豆容器市场同步更新ARM64版本
  • 【CAPL实战:以太网】对IPv4报文的Payload部分进行分片并创建分片包
  • 从Kafka读取数据
  • Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力
  • Trae或者VsCode无法识别相对路径(不自动切换工作目录)