Hudsonを利用してファイルI/Fを実現したい(5)

先週から取り掛かっていたHudsonを利用したファイルI/Fですが、
サンプルができあがり、想定通りに動作しましたので、一旦まとめたいと思います。
作成したプログラムは、今までのパーツをまとめて簡単なmainメソッドを持つJavaコンソールアプリです。
hutil.jarという名前のjarパッケージにしました。送信側や受信側では以下のように起動される想定です。

送信側(NodeA):(コマンドラインから起動する想定)


java -jar hutil.jar -r IFJOB -s SourceJOB -f zzz.csv
受信側(NodeB):(Hudsonジョブとして定義する想定)

java -jar hutil.jar -s %HU_JOB% -f %HU_FILE%
※%HU_JOB%、%HU_FILE%には送信側で指定したSourceJOB,zzz.csvがそれぞれ設定されます。
前にも載せた図を例に説明します。

  1. コマンドラインから[java -jar hutil.jar -r test -s IFJOB -f zzz.csv]を実行する
  2. Hudsonに定義されているtestジョブが実行される。するとジョブに定義された[java -jar hutil.jar -s %HU_JOB% -f %HU_FILE%]がNodeBで実行される
  3. NodeAに置いてあるzzz.csvに対して、http://192.168.0.1/hudson/job/SourceJOB/ws/zzz.csvというリクエストが実行される
  4. Httpダウンロードで、zzz.csvがNodeBに落ちてきて、保存される
  5. testジョブが終了する。終了ステータスがHudson上に記録される
  6. NodeAのコンソールアプリの監視が終了し、結果を返却する


それでは実際のHudsonジョブとして設定されるIFJOBを見てみたいと思います。
上の図と同じように、SlaveとしてNodeAとNodeBを用意し、Masterにつないでおきます。


NodeAで実行すると定義されたジョブ(Source)のworkspaceに目的のファイルzzz.csvを配置します。


NodeBで実行すると定義されたジョブ(IFJOB)のworkspaceにhutil.jarとhutil.propertiesを配置します。
hutil.propertiesは以下のような内容のファイルです。hutil.jarが使用します。


HUDSON_USER=testuser
HUDSON_PASS=password
HUDSON_ADDR=192.168.0.1
HUDSON_PORT=80


IFJOBの中身は以下のようになっています。
ビルドパラメータを2つ定義しています。[HU_JOBとHU_FILE]
起動させるノードをNodeBに限定しています。

Windowsバッチコマンドを定義しています。
内容は上で書いた通り[java -jar hutil.jar -s %HU_JOB% -f %HU_FILE%]です。

さて、コマンドラインから実行してみます。

成功したようです。
Hudson上でも確認してみます。
Hudsonのジョブも成功しています。

NodeBのworkspaceを確認してみると、zzz.csvが出来ています。


当初の思惑通り、Hudsonの標準機能(マスタースレーブ連携、リモートAPI)を利用すれば
単純なファイルI/Fであれば使えるのではないかと思います。
これをベースに、文字コード変換やMD5によるファイルチェックなど拡張機能を追加していくのも楽しいと思います。