2011-12-07(Wed) Jenkins-IDE連携はIntelliJが一番ショボい #intellij
Jenkins-IDE連携はIntelliJが一番ショボい
そんなわけで個人的にはIDE連携には興味ないんですけどね。:-P
Jenkins Advent Calendar jp 2011の7日目です。id:kiy0taka さんが暖めたネタを華麗にスルーして淡々と進めますね。
と要らんことをいちいち書いてしまうのは自分の悪い癖だなと最近気づいたわけですが、他のIDEの場合、以下のように標準でサポートしてます。
IntelliJの場合は、Jenkins Control PluginかHudson Build Monitorあたりですが、どちらもイマイチです。
NetBeansの場合
サービスウィンドウにある「Hudsonビルダ」にマウスカーソルを当て、コンテキストメニューから「Hudsonインスタンスを追加...」を選びます。そして表示されたダイアログに連携したいJenkinsのURLを登録するだけです。
とっても簡単です。コンテキストメニューからJenkinsに登録してあるビューを指定して、特定のジョブだけ監視することができます。あらかじめビューを登録しておかないとダメってのが残念なところ。
ジョブをドリルダウンしていくと、そのジョブの過去ビルドを辿れます。不安定となったビルドの場合、コンテキストメニューから、その時の結果を参照することもできます。
テスト結果ウィンドウがあるのに、出力ウィンドウに結果がダンプされるだけってのが残念な感じです。それでもスタックトレースのリンクからソースコードに辿れるので、無いよりはマシって程度です。
Eclipseの場合
Help -> Install New Software...からMylynと"Mylyn Builds Connector: Hudson/Jenkins (Incubation)"をインストールします。
MylynがインストールできたらWindow -> Show View -> Other...からMylyn/Buildsを選び、Buildsビューを表示します。
Buildsビューは空っぽなので "build server" のリンクか、右上のアイコンから新しいビルドサーバを追加します。
Build server追加ウィザードの一番最初は割愛します(普通は"Hudson (supports Jenkins)"しか無いんじゃないかな?)。次の"Hudson Server Properties"で連携するJenkinsの情報を登録します。
LabelはBuildビューの表示名です。ServerにJenkinsのURLを登録したのち、Refreshボタンを押すとジョブの一覧が表示されるので、その中から連携したいジョブを選択します。
Buildビューには監視対象にしたジョブの今の状態が表示されます。コンテキストメニューからHisotryを選ぶと、そのジョブの過去ビルドに辿れます。
Historyビューからビルドを指定(ダブルクリック)すると、そのビルドの詳細が表示されます。さらにそのときのテスト結果をJUnitビューに表示することもできます。
過去ビルドの参照やJUnitビューを表示するまでの操作が煩雑な気もしますが、Mylynの連携方法が一番デキが良いと思います。でもOutputビューの日本語が文字化けしてたような記憶が...。
まとめ
JenkinsとIDEを連携して一番うれしいのは過去ビルドのテスト結果が参照できることだと思います。特に失敗したテストとそのエラー情報からソースのジャンプできること。
大抵、CIでテストに失敗したら、その修正作業に入りますよね。BTSにチケット切って作業に入るかもしれませんが「なんでテストがコケたのか」は、そんときのビルド結果を参照するのが普通だと思います。そんな時に過去ビルドの結果をIDEから参照できるのとうれしいですよね。というか自分はそれが一番うれしかった。
特にNetBeansの場合、テスト結果を複数保持することができないので、連携結果がショボいとは言え、無いよりマシなんでは?と思います(棒読み。
正直、IDEからビルドの実行ができたり、ビルド結果通知を受けてもうれしくも何ともないです。どっちかというと、テスト結果とかインスペクション結果とかクライアントじゃ重くてやってられない処理結果を連携してくれるとうれしいですよね。
#その辺やってくれるのがTeamCityだったりします。:-)
Handy Gradle startup script
http://glaforge.appspot.com/article/handy-gradle-startup-script
G* Advent Calendar 2011の7日目です。まさかJenkinsと同じ日になっていたとは、そこまで考えが回らなかった。IntelliJのGradleサポートの話でも書こうかと思ったけど、挙動がイマイチだったのでやめた。リアルタイムだとついさっき、IDEA11が正式リリースしたんですけどね、さすがにホット過ぎて何も書けません。><
代わりにこんなエントリ見つけたので紹介してお茶を濁す。:-)
要するに「Gradleの初期ディレクトリを作るタスクを考えた」って話で、確かにその発想はなかった。
apply plugin : 'groovy' apply plugin : 'idea' repositories { mavenCentral() } dependencies { groovy 'org.codehaus.groovy:groovy-all:1.8.4' } task makeDirs(description : 'make all dirs for project setup') << { def sources = [sourceSets.main, sourceSets.test] sources*.allSource*.srcDirs.flatten().each { File srcDir -> println "making $srcDir" srcDir.mkdirs() } } task wrap(type : Wrapper, description : "create a gradlew") { gradleVersion = '1.0-milestone-6' }
余計な事も書いてあるけどキモはmakeDirsタスク。apply pluginに'java'やら'scala'やら追加すると、勝手にそれっぽいディレクトリを作ってくれる。とっても便利。でも
apply plugin: 'war'
の場合、こんなコードにしないとダメだった。これはまあ仕方ないか。
task makeDirs(description : 'make all dirs for project setup') << { def sources = [sourceSets.main, sourceSets.test ] sources*.allSource*.srcDirs.flatten().each { File srcDir -> println "making $srcDir" srcDir.mkdirs() } ["${webAppDirName}/WEB-INF"].each { println "making $it" new File(it).mkdir() } }
WEB-INF付けるかどうかは好みの問題。${webAppDirName}を2回書くのイヤでああしたけど、もっとエレガントな書き方あったかも。
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 |










プラグインの情報はプラグイン自身が一番良く知ってるはずなので、規約プロパティ(convention properties)から読み出すのがスマートなのではと思います。
一応、Gradle Project Templatesプラグインなんてのも作られてるみたいです。こちらはbuild.gradleの雛形まで生成してくれますが、まぁいらないか。。。
https://launchpad.net/gradle-templates
正直、Mavenのコマンド(ゴール)やアーティファクト名は覚えられない。><