本文以PHP項目作為例子所需要擁有(準備)的:
看著篇幅挺大的,難免有什麼遺漏,如果文中有錯誤的地方,還請各位斧正!謝謝。因為本來篇幅就大,所以就沒配圖了,如果有很多人反饋看不懂或者失敗了,我再後期補。謝謝!
Travis-CI
項目為保證項目始終處於健康穩定的狀態,我們需要一個可以持續的自動的對貢獻的代碼進行自動化測試的服務。
Travis-CI就是在這樣的背景下於2011年開啟服務,到現在為止已經有超過300k個開源項目和235k的使用者在使用。
Travis-CI所做的工作就是自動在虛擬機器中運行 .travis.yml中設定的內容進行單元測試,產生並匯出報告。
Composer
開源項目之間一般有著相互依賴的關係,比如項目A的一個組件依賴於另一個項目B。當這種依賴關係多了之後就需要一個管理依賴的工具。
Composer就是PHP的一個 依賴管理工具。它允許你申明項目所依賴的程式碼程式庫,並且會在你的項目中安裝他們。 Composer中文
Packagist
Packagist is the main Composer repository. It aggregates public PHP packages installable with Composer.
這個網站是主要的Composer倉庫,通過Composer發布的項目,所儲存的倉庫就是這個網站,這也是Composer安裝依賴的下載來源。 可以使用Github帳號登入
登入之後可以提交自己的項目,不過需要項目中有 composer.json檔案,這在之後進行介紹。
Coveralls
單元測試中,程式碼涵蓋範圍經常被用來衡量測試好壞的指標。
所謂的程式碼涵蓋範圍簡單的說就是在運行完測試案例之後,走過了多少句的代碼,比如說,你要測試的一個函數有100行,但是測試案例只走過了80行,所以這個測試案例的程式碼涵蓋範圍就是80%
Coveralls就是一個根據單元測試匯出的資料進行分析,展現程式碼涵蓋範圍的一個工具。可以和很多的自動構建工具一起使用,本文以 Travis-CI為例。
項目最終的目錄結構
/├── src/│ └── ClassName.php|── tests/| ├── ClassNameTest/| | └── ClassNameTest.php| └── Bootstrap.php|── .coveralls.yml|── .travis.yml|── LICENSE|── README.md|── composer.json|── example.php└── phpunit.xml.dist
下面開始具體的配置方法。
Composer
如果想更深入的學習Composer可以查看官方文檔(地址在這一節最後)。一個重要的概念就是 每一個項目都是一個包 注
所以我們首先需要在 項目根目錄建立一個 composer.json檔案,其中的內容為( 稍後我們再看其中的意思)
{ "name": "jshadowman/package", "description": "this is a test package", "version": "0.0.1", "type": "library", "keywords": [ "database", "logging" ], "license": "MIT", "require": [ "php": ">=5.4.0" ], "require-dev": [ "satooshi/php-coveralls":"*", "phpunit/phpunit": "*" ], "autoload": { "files": [ "./src/ClassName.php" ] }}
-
name:這個欄位顧名思義,包的名字,應該包含Verdor name(供應商)和Project Name(項目名)。值得注意的是這個欄位的值應該都是 小寫的,這和資產庫發布註冊有關。具體請參考 Packagist
-
description:這個欄位應該是這個項目的一個簡短的簡介。一行即可
-
version:項目的版本,並不是必須的, 而且建議忽略,具體請參考 Version 中文
-
type:項目的類型,可選的值有 library project metapackage composer-plugin具體請參考 Type 中文
-
keywords:用於在被搜尋時的關鍵字,可以是一個數組 Keywords 中文
-
license:項目發布所使用的開源協議,可選的值請參考 License 中文
-
require:這表示項目所依賴的軟體包列表,除非這些依賴被滿足,否則不會完成安裝。 Require 中文
-
require:我們的項目依賴於 平台軟體包,也就是PHP,PHP的擴充包和一些系統類別庫。所以我們在 require之中添加了對PHP的依賴,如果有依賴於其他的包,可以按照這種格式填寫。具體請參考 Platform-packages 中文
-
require-dev:這個欄位列出的依賴只有在測試和開發的時候才會安裝,屬於額外的依賴。具體請參考 Require-dev 中文
-
require & require-dev:這兩個欄位之下的清單項目應該是 包名到版本的映射,其中版本有很多種寫法,可以根據需求過濾。具體請參考 Package-Links 中文
-
autoload:表示的是 autoloader的自動載入映射。具體請參考 Autoload 中文
-
autoload:其中的映射關係設計到PHP命名空間(Name Space)的一些知識,具體請參考 PSR-0- PSR-4- PSR0-4_Github
composer.json中有很多可選的欄位和值,編寫的規範可以參考 Document, 中文文檔
Coveralls
在項目的 根目錄建立 .coveralls.yml檔案,其中的內容為
coverage_clover: build/logs/clover.xmljson_path: build/logs/coveralls-upload.json
值得注意的是舊版本所使用的 src_dir已經在1.0.0版本中 被移除了,所以請注意 不要使用這個選項
Removed src_dir from CoverallsConfiguration
還有其他的配置選項請參考 Github - satooshi/php-coveralls
接下來在 Coveralls網站中添加倉庫:
-
進入 Coveralls網站 https://coveralls.io/
-
點擊右上方的 SIGN IN,在接下來的頁面中選擇 GITHUB SIGN IN,然後使用自己的Github帳號授權登入
-
如果你沒使用過 Coveralls的話,登入成功的介面應該是讓你添加一個代碼倉庫
-
在 ADD REPO標題下列表中將你的項目從 OFF撥到 ON
-
接下來配置 PHPunit單元測試。
PHPUnit
在你的 項目根目錄建立 phpunit.xml.dist檔案,其實這個檔案也不一定要建立在根目錄,主要記得 修改檔案內容中的路徑就行,不過最好就是根目錄和tests檔案夾內了。
phpunit.xml.dist檔案的內容為
./tests ./src ./vendor ./tests ./example.php
完整的XML格式,內容可以參考 XML設定檔
需要注意的是在根項目 中的屬性並不是所有都在那個頁面介紹的,還有一部分在 命令列選項之中,所以如果在附錄C找不到,那就去命令列選項(注意根項目屬性在命令列選項中是以 -分隔的)那一節找找,肯定有的。
Travis-CI
-
使用 Github帳號登入 Travis-CI Sign Up
-
點擊自己的頭像進行設定檔介面,在下面你的項目中,點擊你所需要自動構建的項目前的按鈕,這個按鈕就會變成綠色的勾
-
在點擊到自己的使用者資訊介面之後,在你的Repo上面會有一個簡單的使用介紹,開啟Travis-CI是很簡單的。
在你的 項目根目錄建立 .travis.yml檔案,其中的內容為
language: phpphp: - '5.4' - '5.5' - '5.6' - '7.0'before_script: - composer install --prefer-dist --dev --no-interactionscript: - mkdir -p build/logs - phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xmlafter_script: - travis_retry php vendor/bin/coveralls -v
-
language:顧名思義,這就是你項目所用的語言,所支援的語言和格式可以查閱 Document, 配置PHP
-
php:這個底下是自動構建所使用的環境。注意,有固定的格式
-
before_script:顧名思義,在正式 script之前啟動並執行指令碼( Shell)命令
-
script:開始測試所用的命令
-
after_script:在測試結束之後啟動並執行命令,比如用於匯出結果到 COVERALLS
其中所用到命令介紹
開始測試之前需要做的準備工作,即安裝項目需要的依賴包。
composer install --prefer-dist --dev --no-interaction
準備工作做好之後,開始正式的測試工作,首先當然需要先建立一個存放日誌的目錄
mkdir -p build/logs
開始進行單元測試並匯出程式碼涵蓋範圍報告
phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xml
測試完之後接下來就是匯出報告到Coveralls了
travis_retry php vendor/bin/coveralls -v
phpunit執行的結果和 coveralls匯出的結果都可以在 Travis-CI的 Build Jobs下看到
git push
接下來就是把這些檔案push到Github上, Travis-CI就會自動構建,然後開始單元測試,並把測試結果中的程式碼涵蓋範圍發送到 Coveralls。如此,一套流程就結束了。
展示
辛辛苦苦大半天,就是為了展示自己的成績啊。所以我們看到的別人家項目地下這麼漂亮的表徵圖我們也要有啊。
在 README.md檔案中添加( 注意將以下 Github_ID 替換為自己的 Github-ID,將 Repo_Name 替換為你的項目名字。沒有角括弧哦~還有注意區分大小寫哦~如果還需要改分支(branch)的話,看到連結你應該也懂吧?我相信你!)
[](https://travis-ci.org//)[](https://coveralls.io/github//?branch=master)
其實這些 markdown語句可以直接複製的
-
Travis-CI: Build表徵圖可以在 Travis-CI網站中自己項目名的右邊有一個 build:****的表徵圖,直接點擊這個表徵圖,將 Image URL改成 Makedown就可以看到啦
-
Coveralls:也是進入自己Repo的詳細資料中,中間是 LATEST BUILDS資訊,在最右邊有一個 README BADGE,底下那個表徵圖右邊有個按鈕 Embed ▾,點擊複製 Markdown的語句即可。
Packagist(可選)
在覺得自己的項目開發的差不多時,我們就可在在 Packagist上發布自己的包啦,發布之後,就可以被別人的項目通過 Composer所依賴~
-
可以使用Github帳號登入,或者自己註冊個帳號登入,在右上方 Sign In選擇是註冊還是使用Github帳號登入
-
註冊完之後,可以在右上方 Submit中提交一個包,點擊 Submit按鈕 - Submit
-
接下來會讓你輸入 Repository URL,直接輸入 git://github.com//
-
Packagit會在後台clone你的項目,並且檢查項目中的 composer.json檔案,第一個要檢查的就是包的名字,如果包名中有大寫的字母,Packagit就會報一個包名不應該有大寫字母的錯誤,所以,這就是上文所說包名最好是小寫來由。
-
提交之後就可以看到自己的這個包的一些資訊了,比如被下載了多少次,被安裝了多少次。
-
回到Github,開啟代碼倉庫的 Settings -> Webhooks & services,然後在 Services右邊有個 Add Service的按鈕,點擊輸入尋找 Packagit
-
之後會讓你輸入使用者名稱和Token,這些資訊都在你的 Packagit首頁中 個人首頁
-
個人首頁有個 Your API Token的按鈕,按下按鈕,就可以看到自己的API TOKEN了, 注意保密哦
-
其中 packagist海油4個小表徵圖,記得替換 PACKAGIST_ID和 PACKAGE_NAME哦,不是 Github_ID和 Repo_Name哦