Jenkinsプラグイン開発 環境構築に関するメモ(on Windows7:Mavenによる雛形プラグイン作成)

参考にしたのはこの辺り。

上記チュートリアル等に倣って進めていたのですが、思わぬところでコケてしまったのでその辺の経緯も併せて、記録としてメモ。

Javaインストール
  • Java6以降のバージョンを入手、インストール。
  • 環境変数設定
    • JAVA_HOME: C:\jdk1.7.0_03
    • Path(追記) %JAVA_HOME%\bin;
  • Javaのバージョン確認。
C:\>java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

Maven2インストール

  • 導入バージョンを確認。
C:\>mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900)
Java version: 1.7.0_03
Java home: C:\jdk1.7.0_03\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7" version: "6.1" arch: "amd64" Family: "windows"
初期環境構築
  • Maven2の設定ファイルを作成・・・作成場所は %USERPROFILE%\.m2\settings.xml
  • ファイル内容は以下の通り。まんまチュートリアルの内容をコピペです。
<settings>
  <pluginGroups>
    <pluginGroup>org.jenkins-ci.tools</pluginGroup>
  </pluginGroups>

  <profiles>
    <!-- Give access to Jenkins plugins -->
    <profile>
      <id>jenkins</id>
      <activation>
        <activeByDefault>true</activeByDefault> <!-- change this to false, if you don't like to have it on per default -->
      </activation>
      <repositories>
        <repository>
          <id>maven.jenkins-ci.org</id>
          <url>http://maven.jenkins-ci.org/content/groups/artifacts/</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>maven.jenkins-ci.org</id>
          <url>http://maven.jenkins-ci.org/content/groups/artifacts/</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
</settings>
  • 任意のフォルダを作成し、そこでプラグイン作成用のコマンドを実行。…がしかし、ここでエラー。
C:\work_jenkinsplugin>mvn -cpu hpi:create
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'hpi'.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).


Project ID: org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74

Reason: Cannot find parent: org.jenkins-ci:jenkins for project: org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74 for project org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74


[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Tue May 01 01:24:35 JST 2012
[INFO] Final Memory: 1M/58M
[INFO] ------------------------------------------------------------------------
C:\work_jenkinsplugin>
  • 『-e』オプションを付けて再度実行するとこんな感じのエラーログが。
C:\work_jenkinsplugin>mvn -e -cpu hpi:create
+ Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'hpi'.
[INFO] org.jenkins-ci.tools: checking for updates from maven.jenkins-ci.org
[INFO] org.jenkins-ci.tools: checking for updates from central
[INFO] org.apache.maven.plugins: checking for updates from maven.jenkins-ci.org
[INFO] org.apache.maven.plugins: checking for updates from central
[INFO] org.codehaus.mojo: checking for updates from maven.jenkins-ci.org
[INFO] org.codehaus.mojo: checking for updates from central
[INFO] artifact org.jenkins-ci.tools:maven-hpi-plugin: checking for updates from maven.jenkins-ci.org
[INFO] artifact org.jenkins-ci.tools:maven-hpi-plugin: checking for updates from central
Downloading: http://maven.jenkins-ci.org/content/groups/artifacts//org/jenkins-ci/tools/maven-hpi-plugin/1.74/maven-hpi-plugin-1.74.pom
6K downloaded  (maven-hpi-plugin-1.74.pom)
Downloading: http://maven.glassfish.org/content/groups/public//org/jenkins-ci/jenkins/1.17/jenkins-1.17.pom
185b downloaded  (jenkins-1.17.pom)
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = '6c9fd3d150b8a5f0ca676f49b8ed603793cabebb'; remote = '<html>
<head><title>301' - RETRYING
Downloading: http://maven.glassfish.org/content/groups/public//org/jenkins-ci/jenkins/1.17/jenkins-1.17.pom
185b downloaded  (jenkins-1.17.pom)
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = '6c9fd3d150b8a5f0ca676f49b8ed603793cabebb'; remote = '<html>
<head><title>301' - IGNORING
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).


Project ID: org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74

Reason: Cannot find parent: org.jenkins-ci:jenkins for project: org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74 for project org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74


[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Error resolving version for 'org.jenkins-ci.tools:maven-hpi-plugin': Unable to read the metadata file for artifact 'org.jenkins-ci.tools:maven-hpi-pl
ugin:pom': Cannot find parent: org.jenkins-ci:jenkins for project: org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74 for project org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.verifyPlugin(DefaultLifecycleExecutor.java:1549)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.getMojoDescriptor(DefaultLifecycleExecutor.java:1851)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.segmentTaskListByAggregationNeeds(DefaultLifecycleExecutor.java:462)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:175)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.version.PluginVersionResolutionException: Error resolving version for 'org.jenkins-ci.tools:maven-hpi-plugin': Unable to read the metadata file for artifact 'org.jenkins-
ci.tools:maven-hpi-plugin:pom': Cannot find parent: org.jenkins-ci:jenkins for project: org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74 for project org.jenkins-ci.tools:maven-hpi-plugin:maven-plugi
n:1.74
        at org.apache.maven.plugin.version.DefaultPluginVersionManager.resolveMetaVersion(DefaultPluginVersionManager.java:682)
        at org.apache.maven.plugin.version.DefaultPluginVersionManager.resolvePluginVersion(DefaultPluginVersionManager.java:187)
        at org.apache.maven.plugin.version.DefaultPluginVersionManager.resolvePluginVersion(DefaultPluginVersionManager.java:91)
        at org.apache.maven.plugin.DefaultPluginManager.verifyPlugin(DefaultPluginManager.java:179)
        at org.apache.maven.plugin.DefaultPluginManager.loadPluginDescriptor(DefaultPluginManager.java:1642)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.verifyPlugin(DefaultLifecycleExecutor.java:1540)
        ... 15 more
Caused by: org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException: Unable to read the metadata file for artifact 'org.jenkins-ci.tools:maven-hpi-plugin:pom': Cannot find parent: org.jenkins-
ci:jenkins for project: org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74 for project org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74
        at org.apache.maven.project.artifact.MavenMetadataSource.retrieveRelocatedProject(MavenMetadataSource.java:200)
        at org.apache.maven.project.artifact.MavenMetadataSource.retrieve(MavenMetadataSource.java:299)
        at org.apache.maven.plugin.version.DefaultPluginVersionManager.resolveMetaVersion(DefaultPluginVersionManager.java:673)
        ... 20 more
Caused by: org.apache.maven.project.ProjectBuildingException: Cannot find parent: org.jenkins-ci:jenkins for project: org.jenkins-ci.tools:maven-hpi-plugin:maven-plugin:1.74 for project org.jenkins-ci.tool
s:maven-hpi-plugin:maven-plugin:1.74
        at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(DefaultMavenProjectBuilder.java:1396)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:823)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromRepository(DefaultMavenProjectBuilder.java:255)
        at org.apache.maven.project.artifact.MavenMetadataSource.retrieveRelocatedProject(MavenMetadataSource.java:163)
        ... 22 more
Caused by: org.apache.maven.project.InvalidProjectModelException: Not a v4.0.0 POM. for project org.jenkins-ci:jenkins at C:\Users\(XXXXX)\.m2\repository\org\jenkins-ci\jenkins\1.17\jenkins-1.17.pom
        at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1599)
        at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1571)
        at org.apache.maven.project.DefaultMavenProjectBuilder.findModelFromRepository(DefaultMavenProjectBuilder.java:562)
        at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(DefaultMavenProjectBuilder.java:1392)
        ... 25 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15 seconds
[INFO] Finished at: Tue May 01 01:35:21 JST 2012
[INFO] Final Memory: 2M/58M
[INFO] ------------------------------------------------------------------------
C:\work_jenkinsplugin>

…と、ここでつぶやきを見てくださっていたKohsuke Kawaguchi (TwitterID:@kohsukekawa)さんから天の声が!

という事で、内容を置き換えて試して見る。確かにURL等が異なってますね。

<settings>
  <pluginGroups>
    <pluginGroup>org.jenkins-ci.tools</pluginGroup>
  </pluginGroups>

  <profiles>
    <!-- Give access to Jenkins plugins -->
    <profile>
      <id>jenkins</id>
      <activation>
        <activeByDefault>true</activeByDefault> <!-- change this to false, if you don't like to have it on per default -->
      </activation>
      <repositories>
        <repository>
          <id>repo.jenkins-ci.org</id>
          <url>http://repo.jenkins-ci.org/public/</url>
        </repository>
      </repositories>      
      <pluginRepositories>
        <pluginRepository>
          <id>repo.jenkins-ci.org</id>
          <url>http://repo.jenkins-ci.org/public/</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
</settings>

チュートリアルに関しては更新が入る模様です。ありがとうございます!

  • 行けました!最初のハードルはクリア出来ました。
C:\work_jenkinsplugin>mvn -e -cpu hpi:create
:
:
[INFO] [hpi:create {execution: default-cli}]
Enter the groupId of your plugin: org.example
[INFO] Defaulting package to group ID: org.example
Enter the artifactId of your plugin: sample
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating Archetype: maven-hpi-plugin:1.82
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.example
[INFO] Parameter: packageName, Value: org.example
[INFO] Parameter: package, Value: org.example
[INFO] Parameter: artifactId, Value: sample
[INFO] Parameter: basedir, Value: C:\work_jenkinsplugin
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] ********************* End of debug info from resources from generated POM ***********************
[INFO] Archetype created in dir: C:\work_jenkinsplugin\sample
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 minutes 57 seconds
[INFO] Finished at: Tue May 01 01:53:04 JST 2012
[INFO] Final Memory: 21M/214M
[INFO] ------------------------------------------------------------------------
C:\work_jenkinsplugin>
  • プロジェクトが作成された事を確認し、
C:\work_jenkinsplugin>dir
 ドライブ C のボリューム ラベルは ローカル ディスク です
 ボリューム シリアル番号は 8609-AF4E です

 C:\work_jenkinsplugin のディレクトリ

2012/05/01  01:55    <DIR>          .
2012/05/01  01:55    <DIR>          ..
2012/05/01  01:53    <DIR>          sample
               0 個のファイル                   0 バイト
               3 個のディレクトリ  150,406,033,408 バイトの空き領域

C:\work_jenkinsplugin>
  • 移動→hpiファイルの作成実施。
C:\work_jenkinsplugin>cd sample
C:\work_jenkinsplugin\sample>mvn package
:
[INFO] [hpi:hpi {execution: default-hpi}]
[INFO] Exploding webapp...
[INFO] Copy webapp webResources to C:\work_jenkinsplugin\sample\target\sample
[INFO] Assembling webapp sample in C:\work_jenkinsplugin\sample\target\sample
[INFO] Generating hpi C:\work_jenkinsplugin\sample\target\sample.hpi
[INFO] Generating C:\work_jenkinsplugin\sample\target\sample\META-INF\MANIFEST.MF
[INFO] Building jar: C:\work_jenkinsplugin\sample\target\sample.hpi
[INFO] Building jar: C:\work_jenkinsplugin\sample\target\sample.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 28 minutes 57 seconds
[INFO] Finished at: Tue May 01 02:24:28 JST 2012
[INFO] Final Memory: 74M/333M
[INFO] ------------------------------------------------------------------------
C:\work_jenkinsplugin\sample>
  • プロジェクト配下、targetフォルダに*.hpiファイルが出来てます。


  • Jenkinsを起動、[Jenkinsの管理]→[プラグインの管理]→[高度な設定]で作成したファイルを指定、[アップロード]実行。


  • Jenkinsを再起動の後、プロジェクト作成。すると候補に挙がってくる。値を設定し、保存。



  • ビルド実行。結果が出力されてました。

ひとまず第一段階クリア。後はEclipse等での開発環境を試して、既存で公開されているプラグインを読み解く所まで行ければ十分かな。

作業進行に際してアドバイスをしてくださった川口さん、ありがとうございました!