Node.js-持續(xù)集成平臺(tái):travis

2018-09-28 22:48 更新

持續(xù)集成平臺(tái):travis

目標(biāo)

無明確目標(biāo)

知識(shí)點(diǎn)

  1. 學(xué)習(xí)使用 travis-ci 對(duì)項(xiàng)目進(jìn)行持續(xù)集成測(cè)試 (https://travis-ci.org/ )

課程內(nèi)容

首先來看看這個(gè)項(xiàng)目:https://github.com/Ricardo-Li/node-practice-3

(圖1)

類似這樣的 badges,在很多項(xiàng)目中都可以看到。前者是告訴我們,這個(gè)項(xiàng)目的測(cè)試目前是通過的;后者是告訴我們,這個(gè)測(cè)試的行覆蓋率是多少。行覆蓋率當(dāng)然是越多越好。測(cè)試的重要性我就不說了。

為什么要使用 travis 這樣的平臺(tái),是因?yàn)樗梢宰屇忝靼鬃约旱捻?xiàng)目在一個(gè)“空白環(huán)境”中,是否能正確運(yùn)行;也可以讓你知道,用不同的 Node.js 版本運(yùn)行的話,有沒有兼容性問題。

當(dāng)你在自己的機(jī)器上跑測(cè)試的時(shí)候,你用著特定的 Node.js 版本,比如 0.10,如果測(cè)試過了,你也還是不懂在 0.11 下,你的測(cè)試能不能通過。你可以手動(dòng)地切換 node 版本再跑一次,也可以選擇讓 travis 幫你把不同的 node 版本跑一次。而且有時(shí)候,我們 npm 安裝了某個(gè)包,但卻忘記將它寫入 package.json 里面了,在自己的機(jī)器上,測(cè)試沒問題,但當(dāng)別的用戶安裝你的包時(shí),會(huì)發(fā)現(xiàn)有依賴缺失。

travis 應(yīng)該是把虛擬機(jī)的技術(shù)玩得比較好,它每次跑測(cè)試時(shí),都會(huì)提供一個(gè)空白的環(huán)境。這個(gè)環(huán)境只有 Linux 基本的 build-essentialwget、git 那些依賴。連 Node.js 的運(yùn)行時(shí)都是現(xiàn)跑現(xiàn)安裝的。

travis 默認(rèn)帶有的那些依賴,都是每個(gè)用戶的機(jī)器上都會(huì)有的,所以一旦你的應(yīng)用在 travis 上面能夠跑通,那么就不用擔(dān)心別的用戶安裝不上了。

我們來講講接入 travis 的步驟。

travis 的價(jià)格是免費(fèi)的,對(duì)于 github 上的開源項(xiàng)目來說。它默認(rèn)當(dāng)然不可能幫 github 的每個(gè)用戶都跑測(cè)試,所以你需要去注冊(cè)一下 travis,然后告訴它你需要開啟集成測(cè)試的倉庫。

比如上圖,可以看到我?guī)妥约旱?alsohosts 項(xiàng)目以及 adsf 項(xiàng)目開啟了測(cè)試。

當(dāng)你在 travis 授權(quán)了倉庫之后,每當(dāng)你 push 代碼到 github,travis 都會(huì)自動(dòng)幫你跑測(cè)試。

travis 通過授權(quán),可以知道你的項(xiàng)目在什么地方,于是它就可以把項(xiàng)目 clone 過去。但問題又來了,它不懂你的測(cè)試怎么跑啊。用 npm test 還是 make test 還是 jake test 呢?

所以我們需要給出一些配置信息,配置信息以 .travis.yml 文件的形式放在項(xiàng)目根目錄,比如一個(gè)簡(jiǎn)單的 .travis.yml

language: node_js
node_js:
 - '0.8'
 - '0.10'
 - '0.11'

script: make test

這個(gè)文件傳遞的信息是:

  • 這是一個(gè) node.js 應(yīng)用
  • 這個(gè)測(cè)試需要用 0.8、0.10 以及 0.11 三個(gè)版本來跑
  • 跑測(cè)試的命令是 make test

將這個(gè)文件添加到項(xiàng)目的根目錄下,再 push 上 github,這時(shí)候 travis 就會(huì)被觸發(fā)了。

travis 接著會(huì)做的事情是:

  1. 安裝一個(gè) node.js 運(yùn)行時(shí)。由于我們指定了三個(gè)不同版本,于是 travis 會(huì)使用三個(gè)機(jī)器,分別安裝三個(gè)版本的 node.js
  2. 這些機(jī)器在完成運(yùn)行時(shí)安裝后,會(huì)進(jìn)入項(xiàng)目目錄執(zhí)行 npm install 來安裝依賴。
  3. 當(dāng)依賴安裝完成后,執(zhí)行我們指定的 script,在這里也就是 make test

如果測(cè)試通過的話,make 命令的返回碼會(huì)是 0(如果不懂什么是返回碼,則需要補(bǔ)補(bǔ) shell 的知識(shí)),則測(cè)試通過;如果測(cè)試有不通過的 case,則返回碼不會(huì)為 0,travis 則判斷測(cè)試失敗。

每一個(gè) travis 上面的項(xiàng)目,都可以得到一個(gè)圖片地址,這個(gè)地址上的圖片會(huì)顯示你項(xiàng)目當(dāng)前的測(cè)試通過狀態(tài),把這個(gè)圖片添加到自己項(xiàng)目的 README 中,就可以得到我們圖1的那種逼格了。

對(duì)了,行覆蓋率的那個(gè) badge 是由一個(gè)叫 coveralls(https://coveralls.io/ ) 的服務(wù)提供的。大家可以試著自己接入。

補(bǔ)充說明:

如果你的應(yīng)用有使用到數(shù)據(jù)庫, 需要在 .travis.yml 中添加一些內(nèi)容.

以 MongoDB 為例:

services:
    mongodb

其它數(shù)據(jù)庫詳細(xì)內(nèi)容參考travis 官方文檔

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)