Hudsonのプラグインを触ってみたよ

サッカーアジアカップの初戦が危うく勝ち点0になりそうかというところで冷や冷やしているみなさん、お元気でしょうか。

今日はHudsonプラグインを触ってみたよというお話です。


最近、Hudsonユーザ会の一員として色々動かせてもらっています。勉強会とかの運営がメインとはいえ、一応中の人として動いている以上、プラグインの作り方ぐらい知っとかないとダメですよねー。ということで、この年末年始の宿題でちょこちょこ触っていました。

お題はBacklogプラグイン。以前にid:dragon3 が作ってくれているので、今回はこれをバージョンアップしました。

追加した機能

今回やったことは、以下の3点です。

  • 日本語化
  • ビルドエラー時に、Backlogへの課題登録機能の追加
  • BacklogのURLを入力するところで、スペースへのURLだけでなくプロジェクトURLへの対応*1
日本語化

僕達日本人ですから、やっぱり日本語化されているほうがとっつきやすいですよね。ということで、入力フォームのラベルやらヘルプやらを日本語化してみました。

最初から日本語のみの対応にしてもいいのですが、HudsonもBacklogも多言語化されていますし、英語だけでも用意しておくのは間違いではないでしょう。自分が追記したところはかなりgdgdな英語になっているでしょうが。。。

ビルドエラー時の課題登録

前回Hudson勉強会の@haru_iidaさんの発表でありましたが、ITS/BTSをプロジェクトに取り入れているなら、ビルドエラー時にチケットを登録したくなりますよね。Redmineでは発表資料中で述べられている通り「Redmineのメールによるチケット登録機能」を用いればそこまで手間をかけずとも何とかなるんですが、残念ながらBacklogではメール登録機能はサポートされていません。BacklogでもAPIは用意されているのでこれを組み合わせれば色々やれなくはないのですが、まぁ面倒ですよね。

ということで、プラグインの機能として取り入れてみました*2。設定画面はこんな感じ。
https://cacoo.com/diagrams/2LBk7lJ3U1Jze9Iq-8A2DA.png

必要な情報を入力した後でビルドしたときに、ビルドが失敗もしくは不安定になった場合にBacklogに課題を登録します。登録された課題はこんな感じ*3。ビルド失敗が続いた場合に毎回課題が登録されるのもうざいだろうから、ビルドが壊れた最初の一回のみ登録するよう制御しています。あと(上記のスクリーンショットではguestを使っていますが)プラグイン専用のユーザ(例えば、hudsonとか)を用意しておいたほうが分かりやすいでしょう。

https://cacoo.com/diagrams/2LBk7lJ3U1Jze9Iq-121E8.png

プロジェクトURLの対応

Backlogプラグインには、このHudsonのジョブに紐付くBacklogのURLを登録する箇所があります。ただ、自分が最初このプラグインを導入したときがそうだったんですが、ここに(スペースへのURLではなくて)プロジェクトのURLを入力するものだと思ってしまうんですよね。こんな風に。

ということで、ここにプロジェクトのURLを入力してもいいようにして、合わせてヘルプを分かりやすくしました。これで大丈夫でしょう、多分。
https://cacoo.com/diagrams/2LBk7lJ3U1Jze9Iq-C84D7.png

プラグインのリリース

これは、プラグインの機能というより開発寄りの話。役に立つ人は役に立つかも?

ソースコードも修正しました。さあこれですんなりリリース・・・というわけにはいきませんでした・・・orz 皆さんご存知の通り、オラクルとの絡みの発端となったjava.netプロジェクトの移行の余波があって、現在(2011/01/10)リリース先のリポジトリが凍結されています。また、ソースコードリポジトリ自体もSVNからGithubに移ったけれど、プラグインはSVNをそのまま使ってもいいよという曖昧な状態なんです。

結局何をすればいいの?って話ですが、こちらを参考にしたら何とかリリースできました。何回かリリース失敗してGithubに中途半端な状態で残ったので、git reset後にこっそりpushで巻き戻してみたり・・・


今回の対応はどちらかというと自分の勉強のためという意味合いが強かったのですが、こうやって経験したことによってHudsonプラグイン開発の足がかりを掴むことができました。(まだいくつかアイデアはあるので)プラグインの拡張をするなり、coreの部分をコードリーディングして勉強するなりで、引き続き何かやっていきたいですね。

*1:厳密には、この対応は私ではなくdragon3ですが

*2:プラグインの中では、結局Backlog APIを叩いています

*3:文面見てぴんとくる人もいるでしょうが、プラグイン内部でメールでのビルド通知のAPI呼び出しているので、メールと同じ文面になります