なんか、色々と意気消沈気味だったので、東京から上海に戻ってくる時にVMの構築を途中まで行っていたJenkinsを少し触ってみることにしました。とりあえず、目的としては、表題にも書いている通り、CodeIgniter2(2.0.2), CIUnit2(カスタム版), Jenkinsを使って、ビルドからテスト、コードチェックまで行える環境を作ることです。
また、今回使用したソースは下記のリポジトリにアップしています。
fukata/ciunit2_and_jenkins – GitHub
PHPによるJenkinsのインストールなどについては、下記のサイトがとても参考になりました。
PHPでTDD&CIワークショップ、Jenkins + PHP の各種プラグインパート資料 – Yamashiro0217の日記
Symfony2でJenkinsを使ってCI « symfonyで開発日記
今回はUbuntu 10.04 Server版を使ったため、Jenkinsはapt版を入れています。インストール方法はここに書かれている通りです。
wget -q -O - https://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - sudo vim /etc/apt/sources.list > 末尾に追加: deb https://pkg.jenkins-ci.org/debian binary/ sudo apt-get update sudo apt-get install jenkins |
build.xml作成
Jenkinsからプロジェクトをビルドする際に使用するbuild.xmlは上記のサイトでも行われているppwコマンドを利用しました。今回のプロジェクトだと下記のようになりました。
cd ciunit2_and_jenkins ppw --name ciunit2_and_jenkins --source ./src/application/ --tests ./src/application/tests/ --bootstrap ./src/application/third_party/CIUnit/bootstrap_phpunit.php --phpcs PEAR . |
ただ、CIUnitの場合、sourceで指定したディレクトリ内にCIUnitやtestsコードが含まれている為、これらを解析対象から除外したい場合には下記のように、生成されたbuild.xmlを修正します。
--- build.xml 2011-07-27 10:41:01.164477818 +0800 +++ build.xml.new 2011-07-27 10:40:51.814477818 +0800 @@ -49,7 +49,8 @@ <arg line="${source} xml codesize,design,naming,unusedcode - --reportfile ${basedir}/build/logs/pmd.xml"></arg> + --reportfile ${basedir}/build/logs/pmd.xml + --exclude third_party/CIUnit/" /> @@ -61,7 +62,7 @@ <target name="phploc" description="Generate phploc.csv"> <exec executable="phploc"> - <arg line="--log-csv ${basedir}/build/logs/phploc.csv ${source}"></arg> + <arg line="--log-csv ${basedir}/build/logs/phploc.csv --exclude ${source}third_party/CIUnit ${source}"></arg> </exec> </target> @@ -70,13 +71,14 @@ <arg line="--report=checkstyle --report-file=${basedir}/build/logs/checkstyle.xml --standard=PEAR + --ignore=tests/,third_party/CIUnit ${source}"></arg> <target name="phpdoc" description="Generate API documentation using PHPDocumentor"> <exec executable="phpdoc"> - <arg line="-d ${source} -t ${basedir}/build/api"></arg> + <arg line="-d ${source} -t ${basedir}/build/api -i third_party/CIUnit/"></arg> </exec> </target> |
CodeIgniter用のCodeSniffer
ppwコマンドの–phpcsオプションでコードのスタイルチェックのモジュールを選べます。先ほどのコマンドではPEARを選択(デフォルトでもPEAR)したのですが、PEARのコード規約とCodeIgniterのコード規約がところどころ異なっており、CodeIgniterの規約的には正しいのに間違ってると警告されます。
上記のページを参考にphpcsをインストールした場合、linuxの場合、下記のディレクトリにインストールされていると思います。
/usr/share/php/PHP/CodeSniffer/Standards |
初期でインストールされているのは、下記のみです。
phpcs -i
The installed coding standards are PEAR, MySource, PHPCS, Squiz and Zend |
インストールされているものを参考にCodeIgniter用のCodeSnifferを作成すれば、コードチェックについても正常に行えるようになります。
で、少し探してみたのですが、CodeIgniter用のCodeSnifferが見つからなかったので、作る必要があるかもしません。とりあえず、先走り気味にリポジトリだけ作成しました。
fukata/codesniffer_codeigniter – GitHub
@yterajimaさんから下記のリポジトリを教えてもらったので、これをforkすることにしました。
thomas-ernest/CodeIgniter-for-PHP_CodeSniffer – GitHub
おまけ:githubのプライベートリポジトリを利用する
jenkinsのgit pluginからgithubのプライベートリポジトリを利用する機会があったので、その時にはまったことについて書いておきます。
はまったのは、gitへ接続する際に利用するssh keyの設定についてです。
apt版jenkinsの場合、jenkinsの実行にはjenkinsユーザが行っているかと思います。そのjenkinsユーザのホームディレクトリが/var/lib/jenkinsに設定されており、/var/lib/jenkins/.sshがあるので、そこに必要な鍵等を入れます。で、次にjenkinsユーザでログインし、下記のコマンドでgithubに一度繋いでおきます。
ssh git@github.com |
これで、jenkinsで、githubのプライベートリポジトリに対してgit cloneを正常に行えるようになります。