今日から始めるJenkins CI(PHP, Windows, XAMPP使い向け)
2011/05/26
ざっくり言うと、継続的インテグレーションの最大の利点はリスクが軽減されることにある。以前に経験したことがあるプロジェクトでは、長期のプロジェクトの終わりの段階になっても、実際に終わってみるまで、それがどれくらいの長さになるのか見当もつかなかった。(出典:Continuous Integration / Martin Fowler)
今週雨が続いて「もう梅雨かあ」とボケボケな事を考える程度には田舎者の@remoreですこんばんは。もうこっちで暮らして10年は経つんですけどね。
さて、この前「アジャイルプラクティス」を読了して、アジャイルの魅力に取りつかれ始めています。2ヶ月前にまとめたPHPのテスティングフレームワークとBDD(ビヘイビア駆動開発)について調べた。で少し取り上げたJenkins CIですが、試してみたい一心で実際にインストールしてみると、期待通りちょー簡単にCI(継続的インテグレーション)を行う環境が構築できました。
ちょー簡単なので、おひとりさまの開発環境をお持ちのそこのあなたも使ってしまえば良いと思います。今日はWindows上(XAMPP環境)でJenkinsをセットアップする時に注意しないといけない点を簡単にまとめておきます。
大体の流れ
@ryuzeeさんのPHPでもHudson使うべしの内容そのまんまでインストールができます。大体の流れは以下です。(XAMPPインストール済みの環境を想定しています)
- PHP側のセットアップ
- PEAR経由でPHPUnit, Phingをインストール
- PHPUnitのインストールはこちらの記事を参照
- Jenkinsのセットアップ
- Jenkins.jarをダウンロード。後は"java -jar jenkins.jar"で実行すればlocalhost:8080でアクセス可能。
- プラグインを追加(PhingプラグインとxUnitプラグイン)
- タスクを作成
これだけ。慣れてる人は10分くらいでセットアップ終わると思います。↓完成イメージ
Jenkinsが使うフォルダ構成(ver.1.412を使用)
Windows7上で"java -jar jenkins.war"で動作させた時のフォルダ構成はこんな感じになります。(Note: @ryuzeeさんのマニュアルに従うと、linuxサーバ上でのJenkinsのJobsのフォルダは/var/lib/jenkins/jobs/になりますが、ここではwindowsにインストールした場合の事を書いていきます)
・C:\Users\[ログインユーザ名]\.jenkins\ ⇒jenkinsが使う全てのデータが記録されるっぽい ・C:\Users\[ログインユーザ名]\.jenkins\jobs\[ジョブ名]\workspace ⇒各ジョブでユーザが使うファイルが格納される。
ここから先は、@ryuzeeさんのマニュアルからカスタマイズする必要があった部分や補足。
build.xmlに記述する内容
workspace直下に以下のbuild.xmlを用意するだけで動く。カンタン。ちなみに、このbuild.xmlの内容はHudsonでPHPのユニットテストの記述を参考に作成しました
<?xml version="1.0" encoding="utf-8" ?> <project name="TestProject" basedir="." default="test"> <target name="testtarget"> <delete dir="reports" includeemptydirs="true" /> <mkdir dir="reports" /> <phpunit haltonfailure="false" printsummary="true"> <formatter todir="reports" type="xml" outfile="unitreport.xml" /> <batchtest> <fileset dir="trunk/php/test"> <include name="**/test_*.php" /> </fileset> </batchtest> </phpunit> </target> </project>
各自でカスタマイズが必要なのは、
- filesetタグのdirプロパティ
- includeタグのnameプロパティ
の2つ。ここにテスト対象としたいPHPUnitのテストコードを指定します。dirプロパティはworkspaceフォルダをベースに記述します。上記のbuild.xmlの例は"C:\Users\[ログインユーザ名]\.jenkins\jobs\[ジョブ名]\workspace\trunk\php\test"フォルダ以下にテストコードを格納している場合の例。
jenkinsの設定
・「設定」>ビルド>「ビルド手順の追加」より「Phingの呼び出し」を選択して、
「ターゲット」欄にtargetタグに設定したname属性("testtarget")を記入。
更に、「高度な設定」の「ビルドファイル」には"build.xml"と記述
・「設定」>ビルド後の処理>"Public testing tools result report"にチェックを入れた上で
Pattern文字列の欄に"reports/unitreport.xml"と記述
(Phingがビルド時にPHPUnitのテスト結果をreports/unitreport.xmlに吐き出すので)
XAMPP環境で起こるエラー
上記の設定を終えてjenkinsでビルドを実行すると、"BUILD FAILED"とか"Can't load default task list"っていうエラーが出るはずです。(windows環境の場合)
エラー文言で調べると、こちらやこちらの記事に同じ現象の報告があったので参照して解決。僕の場合は、php.iniを以下のように書き換えました。
include_path = ".;\xampp\php\PEAR"
↓
include_path = ".;\xampp\php\PEAR;\xampp\php\PEAR\data"
感想
- セットアップでつまづいた人向けに、他に参考になりそうな資料をいくつか
- PHPでビルドツール(Phing)を使う感覚がめっちゃ新鮮で良かった。
- Jenkinsいろいろできて面白そう。下記で紹介されてるコードの自動解析(phpmdやphpcpd)なんかもやってみたいなあ。
2011/9/15追記:Amazon EC2環境でJenkinsを使うときにハマるポイント - If you encounter an error when you install jenkins to your amazon EC2 instance
windows環境っていうテーマからは離れちゃうけど、Amazon EC2環境でJenkinsをインストールして%service jenkins startコマンドで動かしてたら、以下のエラーが出て、グラフ画像の生成に失敗していた。(I simply encountered following error.)
Graphics N/A Unable to access X. You need to run the web container in the headless mode. Add -Djava.awt.headless=true to VM.
この現象、ほかの人もハマってたみたい。公式wikiにも現象が報告されてるけどどれもうまく動かない。(Other folks seems encountered same error. Official wiki has some information about this, however, it didn't work to me.)
で、色々試したけど、結局デフォルトで使われるOpenJDKではなくSun SDKを使うことで解決しました。ちなみに、Sun JDKのインストールはここからrpmファイルを落としてきたのでメモ。(And finally, this post took me to the goal, which just use Sun SDK instead of OpenJDK to run Jenkins. Btw, this is the link where you will find latest Sun JDK binary. FYI.)
Related Posts
Re: Best Practices in MVC Design with CakePHP
ちょっとだけ読みやすいnode.jsからmongoDBへの接続のコードの書き方と、ハマったところ / (A Bit) Nicer Node.js Code To Read To Connect DB, and other small tips
about me
@remore is a software engineer, weekend contrabassist, and occasional public speaker. Read more