https://www.liaoxuefeng.com/article/0014631488240837e3633d3d180476cb684ba7c10fda6f6000
持續集成:Continuous Integration,簡稱CI,意思是,在一個項目中,任何人對代碼庫的任何改動,都會觸發CI服務器自動對項目進行構建,自動運行測試,甚至自動部署到測試環境。這樣做的好處就是,隨時發現問題,隨時修復。因爲修復問題的成本隨着時間的推移而增長,越早發現,修復成本越低。
大多數軟件公司對軟件項目進行持續集成的重要性已經取得共識,但真正實踐的還是少數。
作爲開源項目,由於項目開發人員少,沒有二逼產品經理的指手畫腳,所以代碼質量相對商業項目更好。對開源項目實施CI,會更簡單。
下面我們來介紹如何爲GitHub上託管的開源項目用Travis CI進行持續集成。
Travis CI是什麼東東?
Travis CI是在線託管的CI服務,用Travis來進行持續集成,不需要自己搭服務器,在網頁上點幾下就好,用起來更方便。最重要的是,它對開源項目是免費的。
爲什麼是GitHub?
因爲GitHub和Travis是一對好基友,不用GitHub雖然也能用Travis,但是配置起來太麻煩。而且,作爲開源項目,爲什麼不用GitHub?
還不會git怎麼辦?
零基礎Git教程,只能幫你到這裏了!
我用了GitHub,也有開源項目,現在怎麼搞CI?
首先,直接用你的GitHub賬號登錄Travis CI的網站:https://travis-ci.org/
第一次登錄時,授權給Travis訪問你的GitHub代碼庫,然後,把需要CI的代碼庫選上:
默認情況下,Travis會在代碼push時收到GitHub通知,然後自動獲取最新代碼,進行CI。
但是我們還是需要編寫一個.travis.yml
文件來告訴Travis一些項目信息,比如用的Java還是Python,用的JDK
8還是JDK 6,等等。
假設我們用的Java和JDK 8,這個.travis.yml
就這麼寫:
language: java
jdk:
- oraclejdk8
然後,放到代碼庫的根目錄下。
Travis一看到Java項目,默認用Maven 3,然後執行兩個腳本命令:
install: mvn install -DskipTests=true -Dmaven.javadoc.skip=true
script: mvn test
提交.travis.yml
並push後,如果一切順利,Travis就會自動開始構建這個Maven工程。可以在Travis上看到構建結果和詳細的輸出:
也可以指定構建腳本,例如:
script: mvn package
如果項目結構標準,pom.xml
在根目錄下,執行就會一切正常。但是,如果pom.xml
在子目錄下,就需要修改install腳本:
install: cd wxapi && mvn install -DskipTests=true -Dmaven.javadoc.skip=true
有一些Maven項目在package時用到了PGP密鑰來簽名,因爲Travis的服務器不可能知道PGP密鑰,所以install腳本就會失敗。解決方法是加上-Dgpg.skip=true
:
install: cd wxapi && mvn install -DskipTests=true -Dmaven.javadoc.skip=true -Dgpg.skip=true
如果想在GitHub的項目首頁顯示一個高大上的build:passing
標誌,比如像這樣:
可以在根目錄的README.md
中加上一個圖片鏈接:
[![Build Status](https://travis-ci.org/michaelliao/openweixin.svg?branch=master)](https://travis-ci.org/michaelliao/openweixin)
是不是用了CI代碼質量就有保證了?
這個問題的答案是否。如果CI能提高代碼質量,那軟件公司只需要招實習生寫代碼外加CI就可以了,招那麼貴的高級工程師浪費錢幹啥?
是不是用了Travis就實現了CI?
這個問題的答案還是否。CI是解決問題的手段而不是目的。問題是如何提高代碼質量。我見過很多公司的項目,編譯一次半小時(不是編譯Linux內核那種),測試一次幾個小時。不能在短時間內完成編譯、測試的代碼都有問題,導致CI形同虛設。這裏的“短時間”是指5分鐘以內。
最後一個問題:
私有項目怎麼用Travis?
如果不是開源項目,能用Travis嗎?免費的肯定是不能用了,但是有收費的Travis Pro,至於費用,呵呵,四個字:
貴得要命
最便宜的每月需要$129!不想花這個冤枉錢怎麼辦?自己搭CI服務器啊!至於怎麼搭,且聽下回分解。