如何使用Travis CI對Github項目進行持續(xù)集成來提升項目開發(fā)的效率
作為目前世界上規(guī)模最大的開源社區(qū),GitHub平臺上擁有2700萬開發(fā)者,托管超過2530萬活躍項目。GitHub開發(fā)者們面對規(guī)模化開發(fā)項目都是如何管理的呢?如何能在最短的時間內(nèi)發(fā)現(xiàn)開發(fā)問題?有沒有免費工具能夠幫助我們快速提高代碼質(zhì)量?
為了幫助更多 Qtum 社區(qū)開發(fā)者能夠更好地使用開源網(wǎng)站,方便對Qtum等開源項目進行開發(fā)管理,本文將介紹如何使用 Travis CI 對 Github上的項目進行持續(xù)集成,從而提升項目開發(fā)的效率與自動化。
所謂持續(xù)集成(Continuous IntegraTIon),即為系統(tǒng)不斷地根據(jù)代碼庫中的最新代碼構(gòu)建項目,并進行自動化測試,幫助開發(fā)者及時發(fā)現(xiàn)開發(fā)過程的問題,保證開發(fā)質(zhì)量,降低后期修復(fù)成本。
目前大多數(shù)技術(shù)團隊對項目進行持續(xù)集成的重要性已經(jīng)取得共識,但真正實踐的卻還是少數(shù)。另一種情況中,當(dāng)項目開發(fā)人員較少時,若實施CI工具,將顯著提升代碼質(zhì)量。下面將介紹如何為GitHub上托管的開源項目用Travis CI進行持續(xù)集成從而提升開發(fā)效率與自動化。
Travis CI 介紹
Travis CI 是一個開源的,分布式的持續(xù)集成服務(wù),用來構(gòu)建及測試在 GitHub 托管的代碼。
它提供了對多種編程語言的支持,包括 Ruby、JavaScript、Java、Scala、PHP、Haskell 和 Erlang 在內(nèi)的多種語言。許多知名的開源項目使用它來在每次提交的時候進行構(gòu)建測試,比如 Ruby on Rails,Ruby 和 Node.js。
開始使用 Travis CI
首先,使用 GitHub 帳號登錄 https://travis-ci.org,然后你可以在首頁看到你的已開啟 Travis CI 服務(wù)的項目列表。你可以在 SetTIngs 中添加或刪除使用 Travis CI 的項目。
配置 Travis CI
你需要在項目的根目錄下添加一個名叫.travis.yml的配置文件,它描述了 Travis CI 每次構(gòu)建的時候需要做的具體任務(wù)。一個最基本的.travis.yml內(nèi)容大概像這個樣子:
language: ruby
rvm:
- 2.2
- jruby
它指出了這個項目需要使用Ruby 2.2以及最新版本的JRuby來構(gòu)建。你需要把這個配置文件提交到你的倉庫里面去,以觸發(fā) Travis CI 執(zhí)行一次構(gòu)建。
默認情況下,每一次 Push 到 GitHub 倉庫,或者每一次的 Pull Request 都會觸發(fā)一次構(gòu)建。
觸發(fā)構(gòu)建后,你可以在 Travis CI 的網(wǎng)站 上看到相應(yīng)的構(gòu)建情況和構(gòu)建歷史。
Travis CI 構(gòu)建的生命周期
一次構(gòu)建任務(wù)主要由兩部分組成:
install: 安裝一些必要的依賴
script: 執(zhí)行構(gòu)建腳本
你也可以在安裝依賴之前(before_install),執(zhí)行構(gòu)建腳本之前(before_script)或之后(after_script)執(zhí)行一些自定義命令。你也可以在構(gòu)建成功或失敗后執(zhí)行相應(yīng)的自定義命令。
完整的生命周期如下:
(可選的) 安裝 apt addons
(可選的) 安裝 cache components
before_install
install
before_script
script
(可選的) before_cache (用于清除緩存)
after_success 或者 after_failure
(可選的) before_deploy
(可選的) deploy
(可選的) after_deploy
`after_script```
配置樣例
上例節(jié)選自比特幣的.travis.yml配置文件。其中描述內(nèi)容大致如下:
使用xeniel(Ubuntu 16.04) 進行本次構(gòu)建
使用ccache對部分構(gòu)建內(nèi)容進行緩存
定義了兩個構(gòu)建階段: lint和test
定義了一些環(huán)境變量(env)
指定了安裝前的操作(before_install)
指定了安裝操作(install)
指定了構(gòu)建前的操作(before_script)
指定了構(gòu)建操作(script)
指定了構(gòu)建完成后的操作(after_script)
指定了構(gòu)建需要執(zhí)行的任務(wù)列表(jobs)