Code Review 2.0
Code Review 1.0 中存在的问题:
- 只在小程序项目中配置了
mr脚本,不支持其它项目,如要支持其它项目需拷贝代码,扩展性差; - 脚本中所有人的
GitLab Token都暴露出来,安全性差; - 服务端的数据(用户数据、机器人地址数据)都需要手动修改代码来维护。
2.0 解决问题:
- 将原来的
mr脚本编写成命令行工具npm包,实现一次安装多处使用 👍; - 只用在安装
mr包时配置一次GitLab Token,且存储在用户本地,便捷性、安全性 🆙; - 提供与服务端交互的子命令,可以直接在前端维护服务端数据 🔨。

接入CR流程
配置 GitLab Webhook
配置指定项目的 GitLab Webhook 后,后续在该项目中进行的MR或评论操作都将推送到钉钉群中。
在 GitLab 指定的项目下配置 Webhook,勾选「评论事件(Note Events)」和「合并请求事件(Merge Requests Events)」
安装 mr-cli 命令行工具包
mr-cli 是一个 GitLab Merge Request 命令行工具,能够帮助我们在命令行中交互式创建 Merge Reqeust。
全局安装 mr-cli npm包,具体安装及使用参考:mr-cli 命令行工具使用教程
前端实现
借助
yargs库来编写命令行工具将项目编写成
npm包,发布在公司私有仓库上
yargs 命令行解析库
yargs 是一个命令行参数解析库,可以帮助我们快速构建一个命令行程序。类似功能的库还有 commander、meow。
option 选项
通过 option 方法,可以自定义选项,例如默认的查看版本号和查看帮助菜单:
sh
mr -h
mr -vcommand 子命令
通过 command 方法,可以设置 Git 风格的子命令:
sh
mr token
mr user
mr dtunpm 发包
npm 规定需要将可执行的命令放在 bin 目录下,所以我们的目录结构为:
sh
.
├── bin
│ ├── mr
│ ├── create.js
│ └── ...
├── utils
└── package.json还需在 package.json 稍作配置:
json
{
...
"bin": {
"mr": "bin/mr"
},
"files": [
"bin",
"utils"
],
"publishConfig": {
"registry": "公司仓库地址"
},
...
}运行 npm publish 即可将当前 bin、utils 中的文件打包上传至 npm 仓库
服务端实现
服务端按照 egg 的规范对代码进行了重构,使其便于维护。
egg 基础功能
Router路由。暴露给前端的接口,指向对应的ControllerController控制器。解析前端的请求,处理后返回相应的结果Service服务。编写业务逻辑,供Controller调用Middleware中间件。类似于拦截器
远程数据维护
将数据存储在
json文件中暴露接口出去,用于对
json文件中的数据进行增删改查
token 校验中间件
将前端传过来的 token 传给 GitLab,验证用户是否存在,标识 token 是否有效。
湫的碎碎念