今までもPHP案件でCIはしているんだけど、環境にはCruiseControl+phpUnderControlという構成で、これももう古いなぁと思ったのでHudsonに移行してみた。 感触としては、PHP案件でもHudson使うべし、でいいんじゃないかな。
今回導入した環境はCentOS5.3なので、rpmを使ってインストールできる。
sudo rpm --import http://hudson-ci.org/redhat/hudson-ci.org.key
wget http://hudson-ci.org/latest/redhat/hudson.rpm
rpm -Uvh hudson.rpm
なお、当然のことだが、Hudsonを動作させるためにはJDKのインストールが必要なので、先にインストールしておく。 インストールが完了したら自動起動の設定をして、起動する。
/sbin/chkconfig --level 2345 hudson on
/etc/rc.d/init.d/hudson start
次にPHPで関連で必要なものを準備する。必要なものはPHPUnit3とPhingは最低限必要。 PhingはJAVAでいうところのAntである。 インストールはどちらもpearコマンドでOK
pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit
pear channel-discover pear.phing.info
pear install phing/phing
他にも、例えばドキュメントを自動生成するPhpDocumentorやPHP_CodeSnifferなんかとの連携できるので必要ならインストールしておく。
Hudsonを起動して、http://localhost:8080/ にアクセスする。
左メニューのHudsonの管理をクリックする
プラグインの管理をクリックし、「利用可能」タブをクリックする。
中間くらいにPhing Pluginがあるので、チェックを入れて、ページ最下部のインストールをクリックするとインストールが開始される。
またPHPUnitのテスト結果の取り込みのためxUnit pluginを追加する。
インストールが完了したら、Hudsonを再起動する。
別に難しいことはない。 新規ジョブの作成で、フリースタイルのプロジェクトを作成する。
まだ、build.xmlを用意していないので、ビルドもなにもできないので、まずはbuild.xmlを用意しよう。 僕の環境では既にPHPUnitを使ったテストが存在しているので、それを呼び出すようにbuild.xmlを書いてみた。
<?xml version="1.0" encoding="utf-8" ?>
<project name="test1" basedir="/usr/local/src/hoge/tests/foobar" default="test">
<target name="test">
<delete dir="/var/lib/hudson/jobs/test1/workspace/reports" includeemptydirs="true" />
<mkdir dir="/var/lib/hudson/jobs/test1/workspace/reports" />
<phpunit haltonfailure="false"
printsummary="true"
>
<formatter todir="/var/lib/hudson/jobs/test1/workspace/reports" type="xml" outfile="unitreport.xml" />
<batchtest>
<fileset dir=".">
<include name="*/*Test*.php" />
</fileset>
</batchtest>
</phpunit>
</target>
</project>
このビルド定義ファイルでは、プロジェクト名がtest1、テストの基準ディレクトリが/usr/local/src/hoge/tests/foobarにあるTestという文字が付くphpファイル内のテストを全て実行し、結果のレポートを/var/lib/hudson/jobs/test1/workspace/reportsにunitreport.xmlという名前で保存するものである。
Phingの呼び出しを選択し、ターゲットには、ビルドファイルのターゲット名、ビルドファイルには、ファイルのフルパスを指定する。(フルパスでなくても良いけど)
下図のように、「Publish testing tools result report」を選択し、xUnitの種類に「PHPUnit-3.4 (default)」を選択し、レポートのパスに、PHPUnitが出力するテスト結果のXMLのパスを指定する。またあわせて、「JUnitテスト結果の集計」のチェックを外すこと。
※ビルドによって出力されたテスト結果レポートのパスをHudsonのworkspaceからの相対パスで指定する。
これで準備は終わった。あとはプロジェクトをビルドしてみればOK。 何回が実行すれば、いつものような以下の画面が表示されるはずだ。
もちろんテスト結果についても、JUnitの場合と同様に画面から確認できる。