TeamCityで気に入っている2つの機能について

Hudson以外のCIツールってあんまり知られてないよねってんで,ちょっと紹介しとこかと素材集めてたら,HudsonでもPre-tested Commit実装始めたというニュースが飛び込むし。
おいおい,どうゆうタイミングの良さだ。


TeamCityってのはIntelliJと同じJetBrans謹製CIツール。商用だけど,規模縮小版のProfessional Editionはタダで使える。セットアップ,UIの操作性など主立った機能はHudsonのほうが遥かに優れているのだけれど,TeamCityならではな機能で気に入っているのが2つある。


1つは,Pre-tested Commit。もう1つがView failed tests and build logs。どれも,IDEからTeamCityと連携したときに効果ある機能だ(むろん,IDEとはIntelliJのことだよ*1)。


Pre-tested Commitってのは,IDEからSCMにコミットすると,一旦TeamCityが受け取ってビルド&テスト(Personal Build)を行い,テスト通ったらホントにコミットするという機能。


IntelliJにTeamCityプラグインを導入すると,コミットダイアログに「Remote Run...」ってのがでる。


それ押すとRemote Runのダイアログが出るから,TeamCityのどのBuild(Hudsonで言うところのJob)/テスト成功したらコミットしていい,などの指示を出す。


あとは,ペロペロ〜ってビルド&テスト開始するんで,放っといて他の事しててもいい。うまく行ったとか,コケたとかイベントあれば通知がくるので大丈夫。


これがPre-tested Commit。ところどころでRemote Runって言ったり,Personal Buildって言ったりしてるけど,どれも同じ事を指してるみたいだ。
当然ながらテストがコケたらコミットはされないんだけど,ビルドした記録はTeamCityに残る。


Pre-tested Commitはスゴイなぁと思うし,気に入ってもいるけど,どこまで実用性があるのかな?とも思う。
なぜなら,ある程度の規模を越えるとフルテストするのに数十分から数時間かかるのは珍しくないでしょ。
いくら比較的潤沢なサーバリソース使えるからといって,コミットするたびにフルテストまわすってのは現実的ではないよなぁと思っている。
かといって,Pre-tested Commitが必ずしもテスト=JUnitって事ではないので,規模見合いでインスペクションだけにしとくとか,なんかしかの折り合いをつけるんだろな。って,安易にまとめるほど簡単な話じゃないとは思うけど。:-P


もう1つのView failed tests and build logsってのは,これ。


IDE上でビルドの履歴から,特定のビルドの詳細(コケたテストの情報やログ)をブラウズするって機能。「だから何?」って言われそうなんだけど,これが実に便利!ちょう便利!!実際の所,Pre-tested Commitより重宝している。


EclipseNetBeansの事情は知らないんだけど,IntelliJJUnit/TestNGサポートはひとつ致命的な欠点を持っている。それは常に最新のテスト結果しか保持してくんないことだ。

あたしがよくやるシナリオってのは,これ。

  1. とりあえずフルテスト(何個かコケる)
    • テストケース数が多いと,結構いい時間かかる。
  2. コケたテストのどれか1つをピックアップして再テスト&デバッグ
    • ここで最初のフルテスト結果が消える
  3. ピックアップしたテストのデバッグ完了。
    • 次どれだ?ってフルテストの結果消しちゃったよ。うわーん。
  4. 最初にもどる
    • あとは,オールグリーンになるまで繰り返す。


「お前のやりかたが悪い」と言えばそれまでだけど,いちいちフルテストを繰り返すのがメンドイ。テスト結果をエクスポートするなり,タブで複数持てるようになってりゃ,こんな苦労しなくていいのにと思ってるだけに,TeamCityのこの機能はありがたい。


やっぱりね,Webでテスト結果をブラウズするのとIDEからブラウズするのとじゃ,使い勝手が全然違うワケよって,TeamCityの場合だとWebからブラウズしても,それなりに便利なんだけどね(この件は後ほど)。
そんなわけでして,タダで使えるのを良い事に,プロジェクト公式にはHudson使ってても,俺様CIとしてTeamCityもこっそり忍ばせてたりするワケ。
なにせこのツール,IntelliJのプロジェクトファイル(*.ipr)をそのままビルドのレシピに使えたりと,いろいろ便利なのだ。
だからね,CIツールとしてはHudsonが一押しなんだけど,TeamCityも悪くないよっていっぺん言っときたかった。


話を戻して,Webブラウズしててもそこそこ便利な件について述べる。いや,何の事は無い。こんな(↓)感じにね,ところどころに「Open in IDE」ちゅうリンクがあるんだわ。


それクリックすると,IDE上で該当ファイルの該当行を開いてくれるという,ちょっとオドロキな機能を持ってるのだ。
仕掛けは思ったより簡単で,IDEのTeamCityプラグインが特定のポートで待ち受けしてて,先のリンクからの電文を受け取るようにしてる,ってのが仕掛けの根本。ちょうど,IntelliJプラグインJumpToCodeってのがあるから,Hudsonに同機能をポーティングするとかって出来ると思う。
#と言ったものの,Hudsonの拡張ポイントにJUnitのテスト結果や作業コピーの出力をデコレートする
#ところあったかどうか調べてないんだけどね。:-P


そういえば,TeamCityには「Take Responsibility」ってのがある。


ヘルプ読むとどうやら「ビルド,コカしたのあたしです。ごめんなさい/助けて〜」と通知する機能っぽい。実に面白そうな機能ではあるが,TeamCity使うのもIntelliJ使うのもひとりぼっちなんで試す機会がない。なはは。:-(

*1:といってもEclipseやVS2005/2008も連携できるけど。→http://www.jetbrains.com/teamcity/documentation/pluginMatrix.html