Hudson Twitter Pluginができるまで#1

前回(開発環境構築)からの続きで、今回はサンプル(Hellow world)を動かすところをご紹介します。
さて、前回の作ったサンプルのディレクトリ構成から見ていこうと思います。

ProjectRoot
├src
│└main
│  ├java:ソースディレクトリで、パッケージ名と対応したディレクトリ階層構造をしている
│  ├resources:jelly、プロパティファイルなどが置かれていて、ソースディレクトリと対応している
│  └webapp:html(ヘルプ用)など
├target:Maven2でのビルドの出力先
├work:Maven2のJettyプラグインを使用してHudsonを起動した場合の設定ファイルとHudsonプラグインの置き場所
└pom.xmlMaven2でビルドするために記述するXML形式の設定ファイル

mvn hpi:runを実行していないのでworkディレクトリはできていないと思いますが、上記のようなディレクトリ構成になっていると思います。
javaディレクトリ内にはHelloWorldBuilder.javaとPluginImpl.javaがあります。
HelloWorldBuilderはBuilder*1を継承したクラスで、これがサンプルの本体部分になります。

PluginImplクラスはPluginを継承したクラスで、Hudsonにプラグインを登録する部分を記述しています。
1プラグインにつき、1つ必要になります。
resourcesディレクトリ内にはindex.jelly*2とglobal.jelly、config.jellyがあります。
index.jellyはプラグインの説明を記述するもので、「プラグインの管理」に表示されます。
global.jellyは「システムの設定」に表示されるもので、プラグインを使う全てのjob共通の設定項目になります。
config.jellyは個別ジョブの「設定」に表示されもので、個別ジョブに対する設定項目になります。
webappディレクトリ内にはhelp-globalConfig.htmlとhelp-projectConfig.htmlがあります。
この二つのファイルはプラグインのヘルプファイルになります。
pom.xmlには上記のとおり、ビルドのための記述を行います。


さて、ここからはサンプルを動かすためにいくつか追加で行うことを説明します。
まず、サンプルのpom.xmlにはHudsonのバージョンが1.153になっているので、最近のバージョン*3に変更してください。
Hudsonはかなりの頻度でバージョンアップしているため、最新のバージョンでも一ヶ月後には10ぐらいバージョンアップします。
また、安定バージョンというものをリリースしていないため、使っているHudsonのバージョンが古くなければ最新のバージョンにすることをお勧めします。
そして、次にwebappディレクトリ内のjellyファイル以下の部分を書き換えます。
help="${rootURL}/plugin/hello-world/help-globalConfig.html"→help="${rootURL}/plugin/プラグイン/help-globalConfig.html"
help-projectConfig.htmlも同様です。
この作業はヘルプを見ようとするとリンク先が違うので、404になってしまうということがあるためです*4
以上のことが終わりますと、以下のコマンドを打ってみましょう。

mvn hpi:run

失敗する場合は、一度mvn cleanを実行してください。
このコマンド(mvn hpi:run)は実際プラグインを開発する上で役に立ちます。
いちいちビルドしてHudsonにプラグインを登録する作業を肩代わりしてくれます。
Jettyが起動すると、http://localhost:8080/にアクセスしてみてください。
HudsonのTopページが見れるはずです。


ここで「Hudsonの管理」→「システムの設定」に飛ぶと、中段ぐらいに「Hello World Builder」という項目が見えるはずです。
これで、プラグインを試しに動かすことが出来ます。
「新規ジョブ作成」でフリースタイル・プロジェクトのジョブを作成します。
作成したジョブの設定で、「ビルド手順の追加」で「Say hello world」を選択すると、フォームが追加されます。
そのフォームに適当な名前を入れて、ビルドを実行します。
ビルドはすぐに終わるので、「コンソール出力」にてhello worldと出力されているはずです。
このサンプルプラグインの機能はこんな感じです。


今回はサンプルプラグインを動かすところまでを紹介しました。
次回はEclipseでの開発の説明をします。

*1:後の回で説明しますが、Builderなどの拡張ポイント(Extension points)を継承することでHudsonに指定されたタイミングでいろいろとさせることが出来ます。

*2:resourcesディレクトリの直下

*3:この記事を書いている時点でバージョンは1.218

*4:hello-worldという名前でプラグインを作るとこの作業は不要です。