試了就戒不掉的CI工具-dangerjs

在開源社區中,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

Dangerjs支持github和gitlab兩大代碼託管平臺,也支持私有gitlab服務器,不過它對github的支持最好,簡單幾步在便可在一個github項目中加入danger檢查。ruby

在你的項目中,dangerjs用起來就像其餘任何npm包同樣,一行命令便可安裝。(注意包名沒有js後綴)bash

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.pr
if (!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地址

相關文章
相關標籤/搜索