Hatena::ブログ(Diary)

marsのメモ RSSフィード Twitter

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 PluginHudson Build Monitorあたりですが、どちらもイマイチです。



NetBeansの場合

サービスウィンドウにある「Hudsonビルダ」にマウスカーソルを当て、コンテキストメニューから「Hudsonインスタンスを追加...」を選びます。そして表示されたダイアログに連携したいJenkinsのURLを登録するだけです。

f:id:masanobuimai:20111204125007p:image


とっても簡単です。コンテキストメニューからJenkinsに登録してあるビューを指定して、特定のジョブだけ監視することができます。あらかじめビューを登録しておかないとダメってのが残念なところ。

f:id:masanobuimai:20111204125008p:image


ジョブをドリルダウンしていくと、そのジョブの過去ビルドを辿れます。不安定となったビルドの場合、コンテキストメニューから、その時の結果を参照することもできます。

f:id:masanobuimai:20111204125009p:image


テスト結果ウィンドウがあるのに、出力ウィンドウに結果がダンプされるだけってのが残念な感じです。それでもスタックトレースのリンクからソースコードに辿れるので、無いよりはマシって程度です。


Eclipseの場合

Help -> Install New Software...からMylynと"Mylyn Builds Connector: Hudson/Jenkins (Incubation)"をインストールします。

f:id:masanobuimai:20111204125001p:image


MylynがインストールできたらWindow -> Show View -> Other...からMylyn/Buildsを選び、Buildsビューを表示します。

f:id:masanobuimai:20111204125002p:image


Buildsビューは空っぽなので "build server" のリンクか、右上のアイコンから新しいビルドサーバを追加します。

f:id:masanobuimai:20111204125003p:image


Build server追加ウィザードの一番最初は割愛します(普通は"Hudson (supports Jenkins)"しか無いんじゃないかな?)。次の"Hudson Server Properties"で連携するJenkinsの情報を登録します。

f:id:masanobuimai:20111204125004p:image


LabelはBuildビューの表示名です。ServerにJenkinsのURLを登録したのち、Refreshボタンを押すとジョブの一覧が表示されるので、その中から連携したいジョブを選択します。


Buildビューには監視対象にしたジョブの今の状態が表示されます。コンテキストメニューからHisotryを選ぶと、そのジョブの過去ビルドに辿れます。

f:id:masanobuimai:20111204125005p:image


Historyビューからビルドを指定(ダブルクリック)すると、そのビルドの詳細が表示されます。さらにそのときのテスト結果をJUnitビューに表示することもできます。

f:id:masanobuimai:20111204125006p:image


過去ビルドの参照や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回書くのイヤでああしたけど、もっとエレガントな書き方あったかも。

nobusuenobusue 2011/12/07 10:34 MavenのcreateやGrailsのcreate-appみたいなのが欲しいという話は http://issues.gradle.org/browse/GRADLE-1289 にも上がってましたね。
プラグインの情報はプラグイン自身が一番良く知ってるはずなので、規約プロパティ(convention properties)から読み出すのがスマートなのではと思います。
一応、Gradle Project Templatesプラグインなんてのも作られてるみたいです。こちらはbuild.gradleの雛形まで生成してくれますが、まぁいらないか。。。
https://launchpad.net/gradle-templates

masanobuimaimasanobuimai 2011/12/07 22:23 この手の問題は如何に覚えやすいコマンド名にしてくれるかなんですよね。
正直、Mavenのコマンド(ゴール)やアーティファクト名は覚えられない。><

カレンダー
2003 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
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 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 03 | 04 |