在开源社区中,danger的应用尤其广泛,它能够拿来主动判断每个人提交的代码合并申请(github中叫Pull Request,下文简称PR,gitlab中叫Merge Request,下文简称MR)是否符合规范,自动化一些费时费力的人工查看,从而保障代码品质,是项目管理的利器。
比方开源我的项目styled-componet的这个主动回复机器人就是用danger实现的。
Danger最后是由ruby社区倒退起来,之后减少了对js语言的反对,衍生出DangerJs。从它的标语中即可看出此工具存在的意义:Stop saying "you forgot to …" in code review,实际上,此工具可做的事件要远比标语中形容的多。
在整个代码合并流程中,danger的地位通常在测试和代码规范化查看的后一步,人工查看的前一步,相当于是足球中的清道夫的角色,
danger常见的应用场景是:通过自定制的脚本自动化解决一些劳神的人工查看。我以前在我的项目中应用dangerjs在gitlab上实现过这样的查看:合并代码时有没有勾选“合并后删除远端分支”的复选框,有没有勾选“合并时压缩git节点”的复选框,有没有在合并题目中写上对应电子看板的工作卡ID等等,如果没有操作这些则禁止代码合并,及其不便的标准了整个团队的git开发流程。
在上篇介绍lerna的文章里,用dangerjs实现了子项目权限查看:断定以后提交人是否满足某个目录的提交权限,不满足则不容许代码合并,成果如下图所示。
装置Dangerjs
Dangerjs反对github和gitlab两大代码托管平台,也反对公有gitlab服务器,不过它对github的反对最好,简略几步在即可在一个github我的项目中退出danger查看。
在你的我的项目中,dangerjs用起来就像其余任何npm包一样,一行命令即可装置。(留神包名没有js后缀)
yarn add -D danger
设置github的token
danger须要应用你的token受权来做相应操作,比方增加评论到对应的PR下方给出提醒。你能够点击此链接在github上生成对应token,token的名称能够轻易起,权限要记得给足。
将token保留到环境变量中
须要把token的变量名命名为DANGER_GITHUB_API_TOKEN
,并且保留在CI的配置里,比方我在github中应用了circleci作为继续集成的工具,token就须要保留到如下地位,见截图:
留神,如果是gitlab公网上的我的项目,那变量名就不一样了,需设置为DANGER_GITLAB_API_TOKEN
, 如果是公有gitlab服务器,还须要增加另外一个变量DANGER_GITLAB_HOST
将地址指向你本人的服务器,详情可参考官网链接。
创立dangerfile.js文件
我的项目根目录下创立dangerfile.js文件用于编写对应的脚本,比方上面几行代码就是最罕用的写法。
import { danger, fail, warn } from 'danger'fail('This is a failure message') // 显示一条错误信息warn('This is a warn message') // 显示一条正告信息const { title } = danger.github.prif (!title.startsWith('feature/')) { fail('题目必须要由"feature/"结尾')}
本地测试danger脚本
在脚本正式推向CI环境前,能够本地测试一下脚本是否合乎预期。首先要创立Pull Requst,而后获取此PR的地址,之后应用npm或者yarn执行命令:
yarn danger pr 创立的PR的地址
此时,你可能会碰到上面这样的提醒,这是因为还没有在本地设置token变量。
本地间接执行一下命令来申明变量即可。
export DANGER_GITHUB_API_TOKEN=xxxxxx
设置token变量后从新执行danger pr
的命令。拜访对应的PR地址,如果看到下图这样的成果,阐明你写的dangerjs脚本失效了。
最初,把yarn danger ci
或者npm danger ci
放在你的CI文件中的适合地位,这样danger就增加实现了。
另外,你能够申请一个github账号名为'xxxx-bot',再贴一张机器人图片作为头像,并用此账号的token作为变量来主动回复,最终能让整个成果更显技术含量。
能获取到的数据
除了题目之外,danger能获取以后PR中的各种信息字段,比方用户信息、批改的文件、代码审核人、代码合并的配置等等,从上面的截图里蕴含了一些常用字段。
除此之外,dangerjs的官网也给出了具体的类型数据,你能够依据须要定制合乎本人我的项目需要的查看脚本。
结语
danger能够在合并代码时提供自定义的合并规定,能标准整个我的项目的开发流程,把它整合到CI中能帮你自动化很多繁琐的人工查看,无论是开源我的项目还是日常开发我的项目,danger都是我的项目流程治理的利器,一旦试过你就再也戒不掉。
相干材料integrate-danger-js-in-5-minutes
dangerjs官网
文章中的PR地址