Hudson Twitter Pluginができるまで#1
前回(開発環境構築)からの続きで、今回はサンプル(Hellow world)を動かすところをご紹介します。
さて、前回の作ったサンプルのディレクトリ構成から見ていこうと思います。
ProjectRoot ├src │└main │ ├java:ソースディレクトリで、パッケージ名と対応したディレクトリ階層構造をしている │ ├resources:jelly、プロパティファイルなどが置かれていて、ソースディレクトリと対応している │ └webapp:html(ヘルプ用)など ├target:Maven2でのビルドの出力先 ├work:Maven2のJettyプラグインを使用してHudsonを起動した場合の設定ファイルとHudsonプラグインの置き場所 └pom.xml:Maven2でビルドするために記述する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での開発の説明をします。