Hatena::ブログ(Diary)

負けないように頑張る日記 RSSフィード

2010-12-28

[Hudson][Trac] ビルドへのリンクを自動で貼ってみた - ファイナル 19:11  [Hudson][Trac] ビルドへのリンクを自動で貼ってみた - ファイナルを含むブックマーク  [Hudson][Trac] ビルドへのリンクを自動で貼ってみた - ファイナルのブックマークコメント

てことで、日曜日に浜松で頑張ってきた結果。これまでの流れ↓

ここまでで何が問題なのかというと、

  • ビルド結果がコメントに表示されない
  • 結果が分からないので、失敗の時だけ書くとかできない

という点。実際、postbuildとうたってますが、ビルド中にcmd呼んでるし。Hudsonには、postbuild pluginというのがあるのですが、これ厳密にはビルドが終了する前に呼ばれてるので、これまたビルドのステータスを取得することができません。また、別ジョブでやると、前のジョブの情報が簡単には取得できません(これに関しては自分の調査不足な気がしないでもないです)。

どうしたものかと調べてたら、いいかんじのプラグイン発見。

ビルド完了後に呼ばれる上に、manager.buildで実際のオブジェクトに触れます。なので情報取得したい放題というステキなプラグインです。まぁそのためにはcoreのコード(AbstractBuild周辺)を読んで何ができるか把握する必要はありますが…

これがあれば、後はPythonのスクリプト呼んでxml-rpc叩くだけです。groovyで。これを日曜日に作っておりました。

job_name = manager.build.project.name
job_url = manager.hudson.rootUrl + manager.build.project.url
build_number = manager.build.number

if(manager.build.result == hudson.model.Result.SUCCESS) {
  return
}

commit_logs = ""
manager.build.changeSet.each{cs->
  commit_logs = commit_logs + "\n" + cs.msg
}
if (commit_logs == "") {
  return
}

command = "python C:\\TracLight\\bin\\postbuild.py \"${commit_logs}\" \"${job_name}\" ${job_url} ${build_number}"

Process p = command.execute()
p.waitFor()

ビルドが成失敗した時だけ関連チケットにコメント書きにいきます。コードの中にあるようにC:\TracLight\binに↓のpostbuild.pyとdigestxmlrpc.pyを置いておく必要があります。また、postbuild.pyのなかのいろいろを適当に変更してください。ユーザーとかパスワードとかURLとか。

これでビルドに失敗するとTracのチケット上でも↓な感じでHud美さんに怒られます。

f:id:akihirox:20101228190431p:image

xmlrpcなので任意のユーザーが利用できますから、ここでは専用のユーザーを作ってアイコンを設定してます。あ、XML_RPC権限とTICKET_EDIT_COMMENT権限が必要になります。

これでhud美さんときゃっきゃうふふできますし、trac-post-commitではAdminペンギンさんも参加してくれるので、一人開発でもチーム開発っぽいふいんき(何故か変換できない)が味わえます。

コメントに表示する文字列はpostbuild.pyの中で構築してますので、好きなように変更できます。ツンデレなりヤンツンなりお好みのテイストでコメントしてくれるようにできます。

もうこれくらいで……いいよね……

ssogabessogabe 2010/12/28 22:46 ファイナル・アンサー?

akihiroxakihirox 2010/12/30 22:06 とりあえず手元ではこをしばらく使ってみるつもりです。短いスクリプトなので使いながら改善していく感じで。欲を言えばキリがないので、もしかしたら「リターンズ」とかがあるかもしれません。

トラックバック - http://d.hatena.ne.jp/akihirox/20101228