Jenkinsプラグイン開発 環境構築に関するメモ(on Windows7:Eclipse対応)

下記エントリの続き。書籍やWeb等を参考に、Eclipse上でデバッグ可能な状態に持って行くまでをメモ。

  • Maven経由でEclipseのプロジェクトファイル(インポート可能な形式)を作成。
C:\work_jenkinsplugin\sample>mvn -DdownloadSources=true -DdownloadJavadocs=true -DoutputDirectory=target/eclipse-classes eclipse:eclipse
:
:
[INFO] Wrote Eclipse project for "sample" to C:\work_jenkinsplugin\sample.
[INFO]
       Sources for some artifacts are not available.
       List of artifacts without a source archive:
         o xalan:serializer:2.7.1
         o xerces:xercesImpl:2.9.1
         o jaxen:jaxen:1.1-beta-11
         o commons-jelly:commons-jelly-tags-xml:1.1
         o org.jvnet.hudson:commons-jelly-tags-define:1.0.1-hudson-20071021
         o org.springframework:spring-jdbc:1.2.9
         o org.springframework:spring-dao:1.2.9
         o org.apache.ant:ant-launcher:1.7.1
         o javax.servlet:jstl:1.1.0
         o avalon-framework:avalon-framework:4.1.3
         o stax:stax-api:1.0.1
         o asm:asm-commons:2.2.3
         o asm:asm-tree:2.2.3
         o asm:asm:2.2.3
         o org.jenkins-ci.main:jenkins-war:1.424
         o com.jcraft:jsch:0.1.38
         o org.jenkins-ci.main:jenkins-war:1.424

       Javadoc for some artifacts is not available.
       List of artifacts without a javadoc archive:
         o javax.servlet:servlet-api:2.4
         o org.jvnet.hudson:trilead-ssh2:build212-hudson-5
         o org.jvnet.hudson:jtidy:4aug2000r7-dev-hudson-1
         o org.jruby.ext.posix:jna-posix:1.0.3
         o commons-discovery:commons-discovery:0.4
         o commons-logging:commons-logging:1.1
         o commons-collections:commons-collections:3.2
         o org.jvnet.hudson:commons-jexl:1.1-hudson-20090508
         o org.jvnet.hudson.dom4j:dom4j:1.6.1-hudson-3
         o org.kohsuke.stapler:stapler-adjunct-codemirror:1.1
         o org.jenkins-ci:htmlunit:2.6-jenkins-4
         o xalan:xalan:2.7.1
         o xalan:serializer:2.7.1
         o commons-httpclient:commons-httpclient:3.1
         o org.jvnet.hudson:htmlunit-core-js:2.6-hudson-1
         o xerces:xercesImpl:2.9.1
         o net.sourceforge.cssparser:cssparser:0.9.5
         o org.w3c.css:sac:1.3
         o antlr:antlr:2.7.6
         o org.jvnet.hudson:xstream:1.3.1-hudson-8
         o org.apache.ant:ant:1.8.0
         o javax.mail:mail:1.4
         o jaxen:jaxen:1.1-beta-11
         o commons-jelly:commons-jelly-tags-fmt:1.0
         o commons-jelly:commons-jelly-tags-xml:1.1
         o org.jvnet.hudson:commons-jelly-tags-define:1.0.1-hudson-20071021
         o org.acegisecurity:acegi-security:1.0.5
         o org.springframework:spring-core:2.5
         o org.springframework:spring-jdbc:1.2.9
         o org.springframework:spring-beans:2.5
         o org.springframework:spring-dao:1.2.9
         o org.springframework:spring-context:2.5
         o oro:oro:2.0.8
         o log4j:log4j:1.2.9
         o org.apache.ant:ant-launcher:1.7.1
         o jline:jline:0.9.94
         o org.springframework:spring-web:2.5
         o aopalliance:aopalliance:1.0
         o org.springframework:spring-aop:2.5
         o javax.servlet:jstl:1.1.0
         o logkit:logkit:1.0.1
         o avalon-framework:avalon-framework:4.1.3
         o com.sun.xml.txw2:txw2:20070624
         o net.java.dev.jna:jna:3.3.0-jenkins-2
         o org.codehaus.woodstox:wstx-asl:3.2.7
         o stax:stax-api:1.0.1
         o org.jenkins-ci:jmdns:3.4.0-jenkins-2
         o org.kohsuke.jinterop:j-interop:2.0.6-kohsuke-1
         o org.kohsuke.jinterop:j-interopdeps:2.0.6-kohsuke-1
         o asm:asm-commons:2.2.3
         o asm:asm-tree:2.2.3
         o asm:asm:2.2.3
         o org.jenkins-ci.main:jenkins-war:1.424
         o com.jcraft:jsch:0.1.38
         o org.apache.jackrabbit:jackrabbit-webdav:1.5.0
         o org.apache.jackrabbit:jackrabbit-jcr-commons:1.5.0
         o org.slf4j:slf4j-api:1.5.3
         o org.slf4j:slf4j-nop:1.5.3
         o org.jenkins-ci.svnkit:svnkit:1.3.4-jenkins-4
         o org.jvnet.hudson:netx:0.5-hudson-2
         o org.jenkins-ci.main:jenkins-war:1.424

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 21 minutes 37 seconds
[INFO] Finished at: Tue May 01 07:23:06 JST 2012
[INFO] Final Memory: 54M/194M
[INFO] ------------------------------------------------------------------------
C:\work_jenkinsplugin\sample>
  • 成果物を確認。
C:\work_jenkinsplugin\sample>dir
 ドライブ C のボリューム ラベルは ローカル ディスク です
 ボリューム シリアル番号は 8609-AF4E です

 C:\work_jenkinsplugin\sample のディレクトリ

2012/05/01  07:23    <DIR>          .
2012/05/01  07:23    <DIR>          ..
2012/05/01  07:23            56,511 .classpath
2012/05/01  07:23               415 .project
2012/05/01  07:23    <DIR>          .settings
2012/05/01  01:53             1,022 pom.xml
2012/05/01  01:53    <DIR>          src
2012/05/01  07:23    <DIR>          target
               3 個のファイル              57,948 バイト
               5 個のディレクトリ  153,141,886,976 バイトの空き領域

C:\work_jenkinsplugin\sample>
  • Eclipseを起動、プロジェクトを取り込む。



  • 取り込んだ。この時点ではエラーが出ている。環境変数"M2_REPO"が解決出来ていない模様。


  • [ウインドウ][設定][Java][ビルドパス][クラスパス変数]で新たに"M2_REPO"を作成。ここまでの手順で行くと『C:\Users\(ユーザ名)\.m2\repository』となるのでその値を設定。ビルドエラーを解決。


デバッグ設定

MAVEN_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n
  MAVEN_OPTS の役割はデバッガポート8000ですべてを起動するためのものです。
 こうすればIDEからこのポートへデバッグセッションを開始することができます。
C:\>echo %MAVEN_OPTS%
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n
  • 対象となるJavaプロジェクトの方でも設定を追加。プロジェクトを右クリックしデバッグ構成を新規作成。


  • [リモートアプリケーション]の構成で新規作成を行う。ポート番号を起動時の内容と同期。(ポート番号:上記MAVEN_OPTSで設定したaddress=の値と同じ値を設定。この手順の場合は8000で待ち受ける形となる)(※ここでは設定の保存のみ。デバッグはまだ実行せず)


  • Mavenで操作したフォルダに移動し、Maven経由でプラグインを起動。(※特に指定のない場合、ポート番号:8080で起動される。任意のポートでJenkinsを起動する場合は『mvn hpi:run -Djetty.port=(ポート番号)』の形式で実行)
C:\>cd work_jenkinsplugin
C:\work_jenkinsplugin>cd sample
C:\work_jenkinsplugin\sample>mvn hpi:run
Listening for transport dt_socket at address: 8080
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - org.example:sample:hpi:1.0-SNAPSHOT
[INFO]    task-segment: [hpi:run]
[INFO] ------------------------------------------------------------------------
[INFO] Preparing hpi:run
[INFO] [hpi:validate {execution: default-validate}]
[INFO] [enforcer:display-info {execution: default}]
[INFO] Maven Version: 2.2.1
[INFO] JDK Version: 1.7.0_03 normalized as: 1.7.0-3
[INFO] OS Info: Arch: amd64 Family: windows Name: windows 7 Version: 6.1
:
:
  • 上記で設定した[リモートアプリケーション]の構成をデバッグ実行。リモートアプリケーションとして立ち上がる。


  • ブラウザ経由(上記設定の場合だと http://localhost:8080/ )でアクセス。Eclipseの方でデバッグポイントを設定している場合だと、上手いこと止まってくれると思います。