Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Jenkins × PHP環境構築の巻
■目的
PHP環境に対応したJenkins設定を行い、
コミットされる度にサーバ上でのPHPUnitの実行 及び
カバレッジレポート出力を"全自動"で行えるようにすること。
1) PHP Pear系のインストール
sudo pear channel-discover pear.phing.info
sudo pear channel-discover pear.pdepend.org
sudo pear channel-discover pear.phpmd.org
sudo pear channel-discover pear.phpunit.de
sudo pear channel-discover components.ez.no
sudo pear channel-discover pear.symfony-project.com
sudo pear install phing/phing
sudo pear install pdepend/PHP_Depend
sudo pear install phpmd/PHP_PMD
sudo pear install phpunit/phpcpd
sudo pear install PHPDocumentor
pear install --alldeps phpunit/PHPUnit
○概要
Phing (Java の Apache Ant というビルドツールの PHP クローン)
PHP_Depend (パッケージ間の依存性とかを調べられるツール)
PHPMD (PHPのコードのいけてない部分を探すツール)
PHPCPD (PHPのコードの重複部分を探すツール)
PHPDocumentor (コメントからPHPDocを出力するためのツール)
PHPUnit (PHP のテストツール)
2) Jenkinsプラグインのインストール
以下を入れる
phing (Phingを Jenkins からキックするためのプラグイン)
dry (PHPCPD の結果を jenkins から見るためのプラグイン。)
pmd (PHPMD の結果を jenkins から見るためのプラグイン。)
cloverphp (cloverというxdebugで出力されたカバレッジ情報を表示するためのツールのプラグイン。)
3) Jenkinsに新規ジョブ作成
プロジェクト名→任意
今回した設定
・ソースコード管理→SVN
・チェックアウト方式→svn update
・SCMをポーリング→*/5 * * * * →5分ごとにSVNリポジトリ差分確認、差分があったらビルド実行
・ビルド→Phingの呼び出し(これによりbuild.xmlの内容が実行される)
・ビルド後の処理→重複コード分析の集計、静的解析結果を集約、Clover PHP カバレッジレポートを集計、JUnitテスト結果の集計、Javadocの保存
4) ビルド実行
エラー→FATAL: Phingの実行に失敗しました。インストールしたPhingのいずれ1つを使用してジョブを設定する必要があるかもしれません。
PHING_HOMEが設定出来ない(GUIから)→正しいパスを入れても、存在しないっていわれる
→シンボリックリンク貼って対応
■コマンド
$ sudo ln -s /usr/local/bin/phing /usr/bin/phing
■参考
http://twitter.com/#!/yanchi/status/133067015882678272
5) 再度ビルド実行
エラー→BUILD FAILED
exception 'Exception' with message 'PHPUnitTask depends on Xdebug being installed to gather code coverage information.' in
XDebug入ってないって。
pecl(ピクルって読むらしい)でxdebug入れる
$ sudo pecl install xdebug
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so'
$ sudo vim /usr/local/lib/php.ini
最下部に以下を追記
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
apache再起動
6) 再度ビルド実行
エラー→Fatal error: Class 'XSLTProcessor' not found in /usr/local/lib/php/phing/tasks/ext/coverage/CoverageReportTransformer.php on line 109
カバレッジレポートのXMLを生成するための使用するクラス。こいつがホント関門だった
対応:ソースコードから、xsl.soを作成して読み込ませる
$ cd $HOME
$ wget http://jp2.php.net/get/php-5.3.9.tar.gz/from/jp.php.net/mirror
$ tar -zxf php-5.3.9.tar.gz
$ cd php-5.3.9/ext/xsl
$ yum install autoconf
$ yum install libxslt-devel
$ phpize
$ ./configure --with-xsl
$ make
$ make install
php.iniに以下を追加
extension=xsl.so
apache再起動
→動いた。
■その他tips
1) Jenkinsのジョブ判定について
$JENKINS_HOME/jobs/<job_name>/ というフォルダがあって、
その下に config.xml というファイルがあればジョブと見なされる。
ただし、ディレクトリ所有者はjenkinsユーザじゃないと読み込まれない。
2) 各種テストケースが他ファイル(共通includeファイルやautoload設定ファイル等)に依存している場合、
build.xml内のPHPUnitのオプションで事前実行ファイルを指定する。
例:
<phpunit bootstrap="tests/prepare.php">
<formatter type="xml" outfile="${outputDir}/phpunit.xml"/>
<batchtest>
<fileset dir="tests/application">
<include name="**/*Test.php"/>
</fileset>
</batchtest>
</phpunit>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment