2009年8月10日月曜日

Hudsonを動かしてみたよ

https://hudson.dev.java.net/ に行って, 最新版をダウンロードする. MacOSXならば, ダウンロードした hudson.war をダブル・クリックするだけ. http://localhost:8080/ をブラウズすると, すでにHudsonは立ち上がっている.


「Hudsonの管理」メニューから「プラグインの管理」に行って, 例えばGrails, Groovy, Mercurialの各プラグインをインストールしてみる.


「Hudsonの管理」メニューから「システムの設定」に行って, Grails Builderに「追加」して, 適当な名前 (grails-1.1.1) と GRAILS_HOME 環境変数と同じ値を設定する. で, 保存. 「Hudsonの管理」メニューから「設定の再読み込み」をした方がいいみたい.


ダッシュボードに戻り, 適当に名前を付けてジョブをひとつ作る. ソースコード管理システムはMercurialなので, そのプロジェクトのローカルなパスをRepository URLに指定する.


「ビルド手順の追加」して, Build with Grails する. Grails Iinstallation はさっき Grails BUilder で指定したやつ (grails-1.1.1) を, Targetsには "test-app --non-interactive" とか書いてみる.


「ビルド実行」すると...


Compilation error: srcdir "/Users/masaki/.hudson/jobs/AutobaseExample/workspace/src/groovy" does not exist!


とか言ってfailしているよ!


buildに先だって, hgのリポジトリからcloneでソースコードを取り出しているのだが, その時に空のディレクトリは取り出されないのが原因のようだ...


これはmercurialがそういうものだから仕方ない. で, 次のようなgantスクリプトを作って, <basedir>/scriptsに置き, 手で % grails unemptyDirectories することにする. grailsの方を弄ってもいいのだったら, <grails>/scriptsに置いて, scripts/_GrailsCreateProject.groovyのcreateAppターゲットの最後のeventの前に呼ぶようにしてもいいかも知れない.


% cat scripts/unemptyDirectories.groovy



target ('default': "Makes a hidden file ('...') under the empty directories for marcurial+hudson") {
new File("${basedir}").eachDirRecurse {
if (it.list().length == 0) ant.touch file:"${it}/..."
}}

もっとも例えばNetBeansからaddすると'.'ファイルは無視されてしまうから, hgで直接addする必要があるのだが...


というわけで, 今の自分の環境とは合わないけど, Hudson自身はよさそう.