背景
最近研究了dangerjs,在gitlab实际应用中,遇到了挺多坑,因为dangerjs这方面的文档比较少,所以进行了部署,并将一些常规问题记录下来。
介绍
在开源社区中,danger的使用尤其普遍,它可以拿来自动判断每个人提交的代码合并请求(github中叫Pull Request,下文简称PR,gitlab中叫Merge Request,下文简称MR)是否符合规范,自动化一些费时费力的人工检查,从而保证代码质量,是项目管理的利器。
danger常见的使用场景是:通过自定制的脚本自动化处理一些费神的人工检查。我以前在项目中使用dangerjs在gitlab上实现过这样的检查:合并代码时有没有勾选“合并后删除远端分支”的复选框,有没有勾选“合并时压缩git节点”的复选框,有没有在合并标题中写上对应电子看板的任务卡ID等等,如果没有操作这些则禁止代码合并,及其方便的规范了整个团队的git开发流程。
过程
安装dangerjs
yarn danger -D
获取Token
通过右上角的头像,点击Setting > Access Tokens,将得到的token自己用备忘录记起来,刷新页面则丢失。
将token保存到环境变量中
需要把token的变量名命名为DANGER_GITHUB_API_TOKEN,并且保存在CI的配置里。
创建dangerfile.js文件
项目根目录下创建dangerfile.js文件用于编写对应的脚本,比如下面几行代码就是最常用的写法。
import { message, danger } from 'danger';
const modifiedMD = danger.git.modified_files.join('- ');
message('Changed Files in this PR: \n - ' + modifiedMD);
创建.gitlab-ci.yml文件
image: node:12-slim // 改成对应镜像
stages:
- test
# 执行dangerjs
danger:
tags:
- pages-share // 改成自己runner的Tags
only:
- merge_requests
stage: test
script:
- yarn
- yarn dangerCI
结果
FAQ:
Skipping Danger due to this run not executing on a PR.
原因:
需要设置相应条件,否则会在每次提交时,就自动触发CI。
解决方案:
danger:
tags:
- pages-share
only:
- merge_requests
stage: test
script:
- yarn dangerCI
插曲:
如果,参考了dangerjs相关issue
不要写这段代码,也就是不要Export这个变量
script:
- export CI_MERGE_REQUEST_IID=${CI_OPEN_MERGE_REQUESTS#*!}
- yarn danger ci --failOnErrors
因为研发者也说了
gitlab请求错误
HTTPError: Response code 404 (Not Found)
原因:
gitlab缺乏该库
解决方案:
需要在.gitlab-ci.yml
先执行一遍安装
danger:
tags:
- pages-share
only:
- merge_requests
stage: test
script:
- yarn
- yarn dangerCI
gitlab安装包报错
error danger@11.2.3: The engine "node" is incompatible with this module. Expected version ">=14.13.1". Got "12.22.7"
error Found incompatible module.
原因:
出现该问题是node版本(本人的node是12.22.7)没有该版本的库,可尝试提高gitlab的node版本,或者降低dangerjs的版本,如10.5.4
解决方案:
yarn danger@10.5.4 -D