每次對GitHub push之後,Travis CI就會自動執行unit test

若一個專案由多人共同開發,你可能相依到別人的class,自己在local本機unit test測試通過,並不代表上線之後沒問題,因為很可能別人class的修改導致你的class 執行失敗。
Travis CI與GitHub高度整合,只要你對GitHub push之後,Travis CI就能自動從GitHub抓最新版的code,並執行PHPUnit,最後將測試結果email給你。

Version


Laravel 5.1.22

Travis CI的運作原理


建立.travis.yml


.travis.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
language: php

php:
- 5.5
- 5.6

install:
- composer install --prefer-dist --no-dev --optimize-autoloader --quiet

notifications:
email:
recipients:
- [email protected]
on_success: always
on_failure: always

script: phpunit -c phpunit.xml --coverage-text

在專案根目錄建立.travis.yml,這是Travis CI設定檔。1 1事實上它如同Homestead.yaml一樣,是yaml格式檔案。

第1行

1
language: php

Travis CI支援很很多程式語言,要特別設定我們想用的PHP。

注意php必須用小寫。

第3行

1
php:
  - 5.5
  - 5.6

設定PHP所使用的版本,Travis CI允許我們同時測試多個PHP版本。

以Laravel 5.1為例,若使用PHP 5.4測試會失敗,只能測試PHP 5.5以上。

第7行

1
install:
  - composer install --prefer-dist --no-dev --optimize-autoloader --quiet

在Travis CI執行PHPUnit之前會做的事情。因為現在vendor目錄並沒有進GitHub,所以必須使用composer install重建vendor目錄。2 2這裏composer的寫法遵循聖佑給PHP開發者的Composer錦囊所建議的寫法,後面再加上–quiet而已,表示不顯示任何訊息。

10行

1
notifications:
  email:
    recipients:
      - [email protected]
    on_success: always
    on_failure: always

Travis CI自動執行PHPUnit之後,可以自動email出testing report,可以在recipients設定成員的email address。
至於何時才寄出email,可自行設定alwaysneverchange

on_success預設是change

on_failure預設是always

17行

1
script: phpunit -c phpunit.xml --coverage-text

設定Travis CI執行phpunit。-C可以指定自己的phpunit.xml設定檔,–coverage-text則設定產生普通文字形式的Coverage報表即可。

將專案push到GitHub


(略)

到Travis CI註冊帳號


公開Repository到https://travis-ci.org,私人Repository到https://travis-ci.com,直接使用GitHub帳號登入即可。

新增欲使用Travis CI的Repository


登入後,在「My Repository」旁的「+」新增欲使用Travis CI的Repository。

將要使用的Repository switch on。

Push到GitHub


之後只要每次對GitHub做push,Travis CI都會自動執行PHPUnit。若要Travis CI重新執行PHPUnit,可以按右上角的「Restart Build」。

收到Travis CI寄的Email


Conclusion


  • 由多人一起開發的專案,若擔心改A壞B,傳統只能在testing server合體後才能測試,若透過CI (Continuous Integration),只要在每天push到GitHub時,Travis CI就會在背後不斷地持續幫你測試,提早發現合體之後所發現的問題,進而提早修正,不過前提是必須要寫測試,否則CI也幫不了你。

Sample Code


完整的範例可以在我的GitHub上找到。