月別アーカイブ: 2010年8月

Hudsonにノードを追加してビルドをさせてみる

Hudsonではノードマシンをどんどん追加して、専用環境でのビルドや、分散ビルドによる高速化などができる。
今回はある特定の環境でビルドしなければならない事態を想定して、スレーブとなるビルドマシンを追加して、マスターのノードから指示を出し、新しく追加したスレーブのマシンでビルド実行するところまでやってみるよ。

ノードの追加

Hudsonの管理→ノードの管理→新規ノードの作成

ノード名を入力→ラジオボタンでダムスレーブを選択(はじめてノードを追加するときはこれしか選べない)→「OK」

同時ビルド数: 1 ←今回は分散でなく専用ビルドなので1にする
リモートFSルート: /var/lib/hudson/jobs ←ビルドを実行するスレーブ側の作業ディレクトリ
ラベル: hoge
用途: このマシーンを特定ジョブ専用にする
起動方法: SSH経由でUnixマシンのスレーブエージェントを起動
[高度な設定]

  • ホスト: slave01
  • ユーザー名: hudson ←スレーブ側のマシンslave01であらかじめ作っておいたhudson用ユーザー
  • パスワード: ********
  • 秘密鍵:
  • ポート: 22
  • JVMオプション:

可用性: 可能な限りオンラインのままにする。

ノードプロパティ
□環境変数
□ツールパス

保存

これで設定間違えてなければ、早速ビルドマシンにつながるよ。
うまくいかないときはログを参照して原因を調べてみてね。

ジョブの作成

□実行するノードを制限 にチェックを入れて
ラベル式に「hoge」と入力

上のノードの設定ででてきたラベルはここで使うのだね。

あとはレポジトリ、ビルドコマンドや、テストなども適宜入力して保存

ジョブの実行

きちんとつながってさえいればあとは通常のビルド実行と同じ。どうみても書くの飽きてきて面倒くさくなってるのバレバレだね。

あとは応用で、マシンを追加して並行してビルド実行させるとかすれば、きっとおかし食べながらネットサーフィンする時間が短くなって悲しくなるよ。仕事早く終わって、次の仕事がどんどんやってくるよ!よかったね!

JUNG開発環境構築

JUNG(Java Universal Network/Graph Framework)は、Javaでグラフ構造の処理や可視化なんかができるオープンソースのライブラリーだよ。早速使ってみるよ。今回はJUNGのサンプル・アプレットを動かすところまでやるよ。

ダウンロード

  1. TOPページの左のメニューからDownloadを選択
  2. Download All Jung Releases HereのHereをクリック
  3. sourceforgeの緑のボタン「Download Now!」をクリックしてダウンロード

そんなのいちいち教えられなくてもわかる?そうだね。
JUNG1.0系のときはCommons-CollectionsとかColtなどの依存してるライブラリーを別途集めなければいけなかったみたいだけど、JUNG2.0系では、上のダウンロード対象zipにすべて含まれているよ。

参考までに、jung2-2_0_1.zipの中身は以下の通り。色が薄いのはデモ、サンプルのjar。

  • collections-generic-4.01.jar
  • colt-1.2.0.jar
  • concurrent-1.3.4.jar
  • j3d-core-1.3.1.jar
  • jung-3d-2.0.1.jar
  • jung-3d-demos-2.0.1.jar
  • jung-algorithms-2.0.1.jar
  • jung-api-2.0.1.jar
  • jung-graph-impl-2.0.1.jar
  • jung-io-2.0.1.jar
  • jung-jai-2.0.1.jar
  • jung-jai-samples-2.0.1.jar
  • jung-samples-2.0.1.jar
  • jung-visualization-2.0.1.jar
  • stax-api-1.0.1.jar
  • vecmath-1.3.1.jar
  • wstx-asl-3.2.6.jar

eclipseにJUNG開発環境構築

eclipse(GALILEO以降)でJUNG開発環境を構築するよ。
まずはサンプルのアプレットを動かすプロジェクトJungSampleを作るよ。

jarの配置

先ほどダウンロードしたzipを展開して、eclipseインストール先のplugin以下に置いたよ。
ECLIPSE_HOME/plugins/jung2-2_0_1 以下に、上のjar群が並んでいる感じで。

eclipseにライブラリー追加

必要なjarを個別に選ぶ場合

Project→Property→Java Build PathからAdd External JARs.
ECLIPSE_HOME/plugins/jung2-2_0_1 以下から選ぶ。

まとめて追加する場合

Add Library…→User Library→User Libraries…→New
ユーザーライブラリー名 を jung2-2_0_1 (任意)としてOK. このまま続けてAdd JARs…
上のjar群を片っ端から全部選択(実はデモやサンプルはいらない)。これでユーザーライブラリーjung2-2_0_1 にjung2のjarが設定される。→OK
jung2-2_0_1 にチェックを入れる→Finish→OK

サンプルソースのダウンロード

ライブラリーを入手したのと同じダウンロード先から、jung2-2_0_1-sources.zipをダウンロードしてzipを解凍
さらにjung-samples-2.0.1-sources.jarをjarコマンドで展開。
jarコマンドはtarと違って展開先のフォルダ指定できないっぽいので、怖い人はあらかじめ作業用ディレクトリ作るとよい。
展開されたファイルをeclipseのプロジェクトに取り込む。以下ではプロジェクトのsrc以下にすべて移動して取り込ませた。

$ cd ~/Downloads/jung2-2_0_1-sources/
$ mkdir src
$ cd src
$ jar xvf ../jung-samples-2.0.1-sources.jar

$ ls
META-INF    datasets    edu    images    pom.xml
$ mv * ~/workspace/JungSample/src

サンプルの実行

Run→Run As→Java Applet
で実行してみたいサンプルのクラス名を選択してOKするとサンプルのアプレットが起動する。
以下の画像は「ShowLayouts – edu.uci.ics.jung.samples」を選んで実行してみた例

Gitコミット時にHudson自動ビルド

debianにhudsonをインストールしたのでgitと連携させるよ。とりあえずgitコミット時に自動ビルドすることにしたよ。

Hudson GIT pluginのインストール

  1. Hudsonの管理>>プラグインの管理>>利用可能タブを選択
  2. Hudson GIT pluginを探してチェックを入れる
    (利用可能タブに見つからない場合はインストール済みタブを確認してみる。)
  3. 最下部の「インストール」ボタンを押す
  4. インストールが完了したら「ジョブが実行でなければ再起動」ボタンを押してHudsonを再起動
  5. 再起動したらHudsonの管理>>プラグインの管理>>インストール済みタブでHudson GIT pluginが有効化されていることを確認

Gitコミット時にHudsonによる自動ビルドを行うための設定

Hudson側

ジョブの作成(設定)

■ ソースコード管理システム

Gitを選択し、URL of Repositoryを入力する。
ローカルファイルシステムの場合file://はつけなくてもOK.

■ ビルド・トリガ

Hudsonの管理>システムの設定>セキュリティを有効化 していない場合は設定不要
セキュリティを有効化している場合は次のようにして認証トークンを設定する

  1. 「リモートからビルド(例:スクリプトから)」を選択
  2. 認証トークン(任意の文字列)を入力 以下では仮にtokenstringとする

Gitレポジトリ側

hostnameはhudsonの稼動しているホスト名、
jobnameは上で作成したHudsonのジョブ名 とする。

Hudsonにてセキュリティを有効化していない場合

.git/hooks/post-commit に

wget -O /dev/null "http://hostname:8080/job/jobname/build?delay=3sec"

を追加して保存。
もともと書かれている:Nothngは実質何もしないので気になる人はコメントアウトするか削除すればよい。

delayパラメータ: コミット後、ビルドまでの待機時間。上の例はコミット後3秒待ってビルド開始する。

※post-commitを実行可能形式にするのを忘れないこと。

chmod +x post-commit
Hudsonにてセキュリティを有効化している場合

.git/hooks/post-commitに

wget "http://hostname:8080/job/jobname/build?delay=3sec&token=tokenstring&cause=gitcommit"

を追加して保存。

tokenパラメータ: Hudsonのジョブの設定で指定した認証トークン
causeパラメータ: ビルド要因。ここではgitのcommitをトリガとするのでそれがわかるような文字列 gitcommitとした。

gitコミット時にwgetの出力を表示したくない場合は次のように書く(失敗時にはechoでメッセージ表示)

wget -q -O /dev/null "http://hostname:8080/job/jobname/build?delay=3sec&token=tokenstring&cause=gitcommit" || echo "hudson build job failed."

自動ビルドの実行

以上の設定が終了したらgit commitを行うと自動的にジョブで作成したビルド処理が実行される。
うまく行かない場合は、ジョブのコンソール出力を確認してみる。

結局

wgetでビルドのURLを直接叩いてるだけ。
ということは、このコマンドをcrontabに書いて「定期実行は俺に任せろー!」\やめて!/
定期実行はHudson側のスケジュールで設定するといいよ。