在开源社区中,danger的使用尤为广泛,它能够拿来自动判断每一个人提交的代码合并请求(github中叫Pull Request,下文简称PR,gitlab中叫Merge Request,下文简称MR)是否符合规范,自动化一些费时费力的人工检查,从而保证代码质量,是项目管理的利器。javascript
好比开源项目styled-componet的这个自动回复机器人就是用danger实现的。html
Danger最初是由ruby社区发展起来,以后增长了对js语言的支持,衍生出DangerJs。从它的标语中便可看出此工具存在的意义:Stop saying "you forgot to …" in code review,实际上,此工具可作的事情要远比标语中描述的多。java
在整个代码合并流程中,danger的位置一般在测试和代码规范化检查的后一步,人工检查的前一步,至关因而足球中的清道夫的角色,git
danger常见的使用场景是:经过自定制的脚本自动化处理一些费神的人工检查。我之前在项目中使用dangerjs在gitlab上实现过这样的检查:合并代码时有没有勾选“合并后删除远端分支”的复选框,有没有勾选“合并时压缩git节点”的复选框,有没有在合并标题中写上对应电子看板的任务卡ID等等,若是没有操做这些则禁止代码合并,及其方便的规范了整个团队的git开发流程。github
在上篇介绍lerna的文章里,用dangerjs实现了子项目权限检查:断定当前提交人是否知足某个目录的提交权限,不知足则不容许代码合并,效果以下图所示。npm
Dangerjs支持github和gitlab两大代码托管平台,也支持私有gitlab服务器,不过它对github的支持最好,简单几步在便可在一个github项目中加入danger检查。segmentfault
在你的项目中,dangerjs用起来就像其余任何npm包同样,一行命令便可安装。(注意包名没有js后缀)ruby
yarn add -D danger
danger须要使用你的token受权来作相应操做,好比添加评论到对应的PR下方给出提示。你能够点击此连接在github上生成对应token,token的名称能够随便起,权限要记得给足。服务器
须要把token的变量名命名为DANGER_GITHUB_API_TOKEN
,而且保存在CI的配置里,好比我在github中使用了circleci做为持续集成的工具,token就须要保存到以下位置,见截图:工具
注意,若是是gitlab公网上的项目,那变量名就不同了,需设置为DANGER_GITLAB_API_TOKEN
, 若是是私有gitlab服务器,还须要添加另一个变量DANGER_GITLAB_HOST
将地址指向你本身的服务器,详情可参考官网连接。
项目根目录下建立dangerfile.js文件用于编写对应的脚本,好比下面几行代码就是最经常使用的写法。
import { danger, fail, warn } from 'danger' fail('This is a failure message') // 显示一条错误信息 warn('This is a warn message') // 显示一条警告信息 const { title } = danger.github.pr if (!title.startsWith('feature/')) { fail('标题必需要由"feature/"开头') }
在脚本正式推向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都是项目流程管理的利器,一旦试过你就再也戒不掉。
相关资料