Hudsonいじり

見よう見まねで見かけ倒し。

ここで言及されている「No page found 'sidepanel.jelly'」ってエラーが発生したのだけどgetOwnerとか付いているし、<st:include it="${it.owner.project}" page="sidepanel.jelly" />に変えてもやっぱりエラーになるし、うーん??という状態。なのでこのスクリーンショットはサイドバーをコメントアウトしています。あと<st:include page="body.jelly" />も。

理解したところだけ簡潔にまとめておくと、まずプラグインはPluginImplの中で下のようにやって登録する。

BuildStep.PUBLISHERS.add(HelloWorldPublisher.DESCRIPTOR);

そしてプラグインのperformが呼ばれる。引数で渡されるbuildのgetLog(int)を呼ぶとコンソールの出力が得られる。intはログから読み込みたい行数。deprecatedだけど全部読み込むgetLog()もある

build.setResult(Result.UNSTABLE);とかやるとビルド結果がUNSTABLEになって、オーブが黄色になる。最初はテスト結果(何件中何件成功とか)をsetResultするのかと思っていたけどそうではない。テスト結果の表示は別の「アクション」になっている。たとえば下のようにアクションを追加する。これはオリジナルのhudson.tasks.junitを見て真似をした。

MyTestResultAction action;
MyTestResult result = new MyTestResult();
action = new MyTestResultAction(build, result, listener);
build.getActions().add(action);

オリジナルのTestResultクラスはなぜかコンストラクタでAntのディレクトリスキャナを取る。TestResult(long buildTime, DirectoryScanner results)。しかもgetPassCountとかはあるけどsetPassCountはない。なのでコマンド実行結果のコンソール出力をパースして何件のテストに成功したかを返したいってニーズに使いづらいからMyTestResultを作ることにした。

表示に関してはそのまんまデフォルトのを使っている。Hudsonを使ったアジャイルな開発入門:第2回 Hudson事始め|gihyo.jp … 技術評論社で紹介されているような「テスト履歴のグラフ」がでるのを期待したんだけど、違った。どうやって出すのかは今度調べる。

                    • -

まぁ、一日で「とりあえずの画面」が出て「後はあれとこれを解決したら欲しかった物ができるんだけどな」ってところまで行けるというのはわかりやすい方に入るんだと思う。jellyとかってテンプレートエンジンなのかな、そういうのもまったく知らない状態で「そもそもHudsonのソースコードはどこからチェックアウトできるんだ!」とか叫んでid:cactusman に教えてもらいつつ。


いままで勝手に「Javaのプロジェクトをコミットするためのツール」とか「AntとかMavenとかを使ってビルドする」とか思いこんでいたけど、これはもっと汎用的につかる便利なツールだと思った。