やっとここまできた!
今までjenkinsの設定は色々やってきたけど、今回はやっとテストを自動化させるところを書いていく。
1. PHPUnitのインストール
PHPUnitのインストールは、前回のCakePHPでPHPUnitを手動インストールしたときのメモで対応済みだが、jenkinsが入っているサーバーと前回のものは別のため、こっちはpear channelからインストールする方法で試してみる。
$ pear channel-discover pear.phpunit.de $ pear install --alldeps phpunit/PHPUnit
2. コマンドラインからPHPUnitを実行してみる
$./app/Console/cake test app AllTests Welcome to CakePHP v2.2.1 Console --------------------------------------------------------------- App : app Path: /var/lib/jenkins/jobs/test-project/workspace/app/ --------------------------------------------------------------- CakePHP Test Shell --------------------------------------------------------------- PHP Fatal error: Class 'PDO' not found in /var/lib/jenkins/jobs/test-project/workspace/lib/Cake/Test/Case/Model/Datasource/DboSourceTest.php on line 26
こんなエラーが出た。
CakePHP2系とCakePHP1系のDB設定周りの違いでも書いたが、CakePHP2系からPDOを使うようになったので、yum経由で必要な RPMパッケージをインストール。
$ yum -y install php-pdo $ yum -y install php-mysql
もう一度試す。
$./app/Console/cake test app AllTests Welcome to CakePHP v2.2.1 Console --------------------------------------------------------------- App : app Path: /var/lib/jenkins/jobs/test-project/workspace/app/ --------------------------------------------------------------- CakePHP Test Shell --------------------------------------------------------------- PHPUnit 3.6.12 by Sebastian Bergmann. .......... Time: 0 seconds, Memory: 16.00Mb OK (10 tests, 0 assertions)
いけた。
これでPHPUnit側の設定は完了。
3. Jenkinsプラグインを導入
コマンドラインからのテストが可能になったので、これをJenkinsで実行できるようにする。
とりあえず必要なプラグインをインストール。
・xUnit Plugin https://wiki.jenkins-ci.org/display/JENKINS/xUnit+Plugin
・Clover PHP Plugin https://wiki.jenkins-ci.org/display/JENKINS/Clover+PHP+Plugin
4. Jenkins側の設定 – ユニットテスト単体で動作させてみる。
設定>ビルド>シェルの実行に以下のシェルスクリプトを登録。
./_lib/app/Console/cake test \
–log-junit=./reports/unittest.xml \
–coverage-html=./reports/coverage_html \
–coverage-clover=./reports/coverage.xml \
app AllTests
この内容でビルドの実行を行う。
ビルド後の処理で、それぞれ以下のように設定
Clover PHP カバレッジレポートを集計> Clover XMLパス reports/coverage.xml
Clover HTMLレポートを公開する> Clover HTMLレポート ディレクトリ reports/coverage_html/
JUnitテスト結果の集計>テスト結果XML reports/unittest.xml
ビルドを実行すると以下のような結果が返ってくる。
ガバレッジはこんな感じ。
5. Phingで他の処理と合わせて自動化する
CakePHP経由で処理したかったので、PhingのPHPUnitTaskは利用せずにExecTaskで記述した。
こんな感じ。
<target name="phpunit" > <exec executable="./app/Console/cake" > <arg line=" test --log-junit=./reports/unittest.xml --coverage-html=./reports/coverage_html --coverage-clover=./reports/coverage.xml app AllTests" /> </exec> </target>
で、このテストを正常に動作させるにはworkspaceにexportされたフォルダの権限を一部変更する必要があるので、その対応をphpunitの処理の前に追加。
<chmod file="./app/Console/cake" mode= "0755" verbose= "true" /> <chmod file="./app/tmp/" mode= "0777" verbose= "true" /> <chmod file="./app/tmp/logs/" mode= "0777" verbose= "true" /> <chmod file="./app/tmp/sessions/" mode= "0777" verbose= "true" /> <chmod file="./app/tmp/tests/" mode= "0777" verbose= "true" /> <chmod file="./app/tmp/cache/" mode= "0777" verbose= "true" /> <chmod file="./app/tmp/cache/persistent/" mode= "0777" verbose= "true" /> <chmod file="./app/tmp/cache/models/" mode= "0777" verbose= "true" /> <chmod file="./app/tmp/cache/views/" mode= "0777" verbose= "true" />
これでとりあえずいけるようになった。
もっとうまいやり方もありそうだけど、とりあえずこれでしばらくやってみることにする。
ここら辺を参考にさせていただきました
CakePHP2.0+Jenkinsで継続的インテグレーションを行う方法 – Ryuzee.com
ビルドをAntではなくPhingにした場合のbuild.xml – Play of Color