サーバ

Hudson on JBoss on Mac OSX – インストール

最近 Twitter4J のバグ報告や機能改善のパッチなどがちょくちょく寄せられてくるようになってきました。
そこで、新機能やバグ修正をいくつかまとめたバージョンを Maven Central Repository に登録するのとは別に Hudson で継続ビルドを行うことにしました。

Hudson は Sun の川口耕介さんという方がプロジェクトリードをしているオープンソースの継続ビルドツールで、Apache や JBoss など多くのソフトウェアプロジェクトで使われています。
詳しくは以下のサイトで解説されています。
Hudsonを使ったアジャイルな開発入門:第1回 Hudsonの導入|gihyo.jp … 技術評論社

本家サイトはこちら:
hudson: an extensible continuous integration engine

人気のバグトラッキングツールである Jira を開発している Atlassian でもBambooという継続ビルドツールをリリースしていますが、Hudson は Jira と組み合わせて使われることも多いようです。

Mac OSX で運用している自宅サーバの環境にインストールしたのでメモを取っておきます。

1. hudson.war をダウンロード
Hudson 自体ももちろん Hudson でビルドが行われており、細かいバグ修正、機能追加が行われる度に頻繁に新しいバージョンがリリースされています。
現時点で最新、3/20リリースの 1.293 をダウンロードしました。
hudson: Documents & files: releases

2. hudson.war を展開、jboss-web.xml の追加
通常この手順は不要です。ウチの環境では仮想ホストを設定しているので設定します。
– hudson.war/WEB-INF/jboss-web.xml

<jboss-web>
<context-root>/hudson</context-root>
<virtual-host>yusuke.homeip.net</virtual-host>
</jboss-web>

3. hudson のデプロイ

mv hudson.war server/default/deploy/

4. hudson にアクセス
hudson は web.xml ではなく、.hudson/ というディレクトリに全ての設定を格納するようです。しかも初めてアクセスすると自動的に設定画面が出てくるという親切設計。
なので、デプロイしたら http://host:port/hudson/ でにアクセスするだけ。
今回はいきなりエラー画面になってしまいました。

エラーメッセージは以下の通り。

Unable to create the home directory '/var/root/.hudson'. This is most likely a permission problem.

To change the home directory, use HUDSON_HOME environment variable or set the HUDSON_HOME system property. See Container-specific documentation for more details of how to do this.

/var/root/ ディレクトリに設定を格納しようとしたところ、権限がなくて失敗したようです。root ユーザで実行しているわけではないのですが、ハテ。
root ユーザから sudo -u yusukey ./run.sh といった形で一般ユーザで実行していることに関係しているかもしれません。

エラーメッセージは非常に明快で親切ですね。HUDSON_HOME 環境変数、またはシステムプロパティを設定すれば良いようです。
デフォルトの設定格納ディレクトリを決定する部分のロジックを見てみたいところですが、今回はひとまず明示的に設定することで対応することにします。

5. run.conf の編集
JBoss の run.conf を編集して HUDSON_HOMEシステムプロパティを設定、JBossの再起動を行いました。

#
# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-DHUDSON_HOME=/Users/yusukey/.hudson -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -XX:MaxTenuringThreshold=32 -XX:SurvivorRatio=8 -XX:NewSize=100m -XX:MaxNewSize=100m -Xms400m -Xmx400m -server -Djava.awt.headless=true -XX:PermSize=40m -XX:MaxPermSize=128m"
# JAVA_OPTS=" -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -XX:NewSize=150m -XX:MaxNewSize=150m -Xms600m -Xmx600m -server -Djava.awt.headless=true -XX:MaxPermSize=250m -XX:PermSize=40m -XX:MaxPermSize=128m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
fi

6. ようやくHudson を起動
HDSON_HOME を設定して JBoss を起動すると、以下のような画面が見られます。

次は設定。
Hudson on JBoss on Mac OSX – job の設定 – 侍ズム