PHPでもHudson使うべし

 2010/09/19

今までも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のPhingプラグインの導入

Hudsonを起動して、http://localhost:8080/ にアクセスする。

左メニューのHudsonの管理をクリックする

プラグインの管理をクリックし、「利用可能」タブをクリックする。

中間くらいにPhing Pluginがあるので、チェックを入れて、ページ最下部のインストールをクリックするとインストールが開始される。

またPHPUnitのテスト結果の取り込みのためxUnit pluginを追加する。

インストールが完了したら、Hudsonを再起動する。

phpプロジェクト用の設定

別に難しいことはない。 新規ジョブの作成で、フリースタイルのプロジェクトを作成する。

Phing用のbuild.xmlを用意する

まだ、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の場合と同様に画面から確認できる。

まとめ

  • PHPでもユニットテスト書いているならHudson使うべし。CruiseControl+phpUnderControlは過去のもの
  • ビルドプロセスの定義がGUI上で自由に出来るのは旨みがある(って別にPHPに関係ないけど)
  • PHPUnitじゃなくてSimpleTestを使っているような場合でも、出力結果のxmlさえJUnit互換に出来れば利用可能
  • phpDocumentorやPHP_CodeSniffer等のツールを使ってドキュメント出力したり、コーディング規約チェックももちろんできる。(CruiseControlも出来るけど)
 2010/09/19

著作

寄稿

Latest post: