2009年8月29日土曜日

Hudsonで分散実行に挑戦

最近、DebianをVMWareのゲストOSとして新しく作り、Hudson環境を作成してます。
Hudsonの環境...といっても、java -jar hudson.war で起動したらOKなので特に手順は要らないのですけどもねー。
私的には、それ以前のOSをセットアップするのが大変ですww

Hudsonにのっけたいプロジェクトの中に、Windows用のツール/ライブラリを使ってビルドしているものがあって、LinuxのHudsonでそのまま実行できないけどどうしようか....と考え、始めに試してみたのは wine
wineは、Linux上でWindowsのexeを実行できるもの。例えば、notepad.exeというWindows用のexeファイルを実行したい場合には、

$ wine notepad.exe

と打てば実行してくれるというなんだが夢のようなものw
当然全てのexeが実行できるというわけでもないのですが。

少し試してみたんですけど、やっぱり、こういう方法は無しかな。。と。
「buildがちゃんと出来る」という安心感を求めて構築しているのに、本当大丈夫かな?って思うような環境でbuildしていくのはなんだか本末転倒な気もして。

そこで、Hudsonで分散実行に今日は挑戦してました。
Linuxをホストとして、WindowsOSのものをスレーブ端末にする。
Windowsでビルドしたいプロジェクトでは、LinuxのHudsonからWindowsにビルドを依頼して処理していく形にしました。

Hudsonによるチーム間の連携に川口さんの記事があります。

結果から書くと、スレーブ端末を追加するのは超簡単です。
Hudson上で、スレーブ端末の名前、アクセスするディレクトリなどを指定して登録。スレーブ端末から、HudsonヘージにあるJNLPのボタンをクリックするだけ。

上記の記事では、slave.jarをコピーして...などなどの文面がありますが、それらは今のHudsonでは要らない。

そんな簡単なのに、色々ハマってた私(笑)
まず最初にハマったのは、
エラーログにホスト名が解決できなかった云々のエラー。
これは、そのまんま、Linuxでホスト名をしっかり入れていなかったのが原因。

次にハマったのは、JNLPのリンクをクリックするとJNLP起動エラーが出てしまう。
エラーが出たマシンの最新Javaバージョンは、Java5。
別のマシンでJava6が入っているものはエラーがでない。
以前にJnlpの書き方により、Java5では起動できるが、Java6では起動失敗するような経験があったので、ま、Java6にあげればいいんだろうなってことで、バージョンアップ。
案の定、Java6にしたらエラー無く動作。

次にハマったのは、Windowsで処理したログが文字化けしてしまう事。
現象としては、windowsのhudsonからsshスレーブを使うときの文字コード取り扱いについてにて書かれているものと一緒。
これはまだ解決できてない。。

ログが文字化けしているから、どんなエラーでとまっているのかが分からなかったので、スレーブ端末ではなく、ホスト端末で実行してエラーの内容を見てみると...antが設定されていないんじゃ?的なメッセージが。
ジョブの設定を見てみると、確かにAntのバージョンの指定とかなんにもしてない...しかも設定する所ない!?
あれー、設定する所あったよな?? なんでないんだろう??
ま、これのオチは、Hudsonの管理にてAntを1つも設定していなかったから。
そうすると、マルチ構成ジョブの設定では表示もされないんですねー。
(フリースタイルでは表示されるような気がしたのは気のせい?)

Hudsonの管理にてAntをApacheから自動インストールするように設定し、ジョブの設定にも設定。んで、いざ実行してみると...次は ConnectionTimeOutError.
エラーのスタックトレースのクラス/メソッド名を見てみると、Antのインストールをしようとしている時っぽい。
不思議に思って http://ant.apache.org にアクセスしてみると...サイトが動いてないっす(涙)
どうやら、丁度Apacheがハックされたタイミングだったらしい。→Apache.org hack
こんなタイミングでくるか? MavenCentralなら分かるけど、Apacheが!

しょーがないので、適当な所にAntのzipをおいて、指定URLからインストールするようにHudsonで設定。

これで無事に動くようになりました。

ジョブにて使うAntやMavenなどはスレーブ端末にも自動でインストールしてくれます。
空いている端末があれば、がんがんスレーブ端末で指定しちゃう?って思わせる感じの手軽さ。素晴らしいです。Hudson。
スレーブにするのは面倒そうーなんて思っている人は、ぜひチャレンジしてみてください。

セットアップしてたマシンは、エラー時にメールが送信できるようにも設定したし、SCPもできるようになったので、それなりに使える子になってきた気がします。

あ、でもちょっと残念なのが、マルチ構成ジョブだとhud美さんが出て来てくれない様子。。

あとは、家にあるNabaztagをもっていて、ビルドエラーがでたら五月蝿く喋らせる ようにしたらOKかなー!
• • •