2

任意のバージョン番号でリリース成果物を生成できるようにする必要がある Jenkins/maven ビルドがあります。バージョン番号は、パラメーターとしてビルド ジョブに渡されます。versions:setバージョンを pom.xml にあるものから $VERSION パラメータに更新するために使用しています。ビルドが実行されると、実際には maven が pom.xml の作業コピーのバージョンを更新しているように見えますが、古いバージョン番号でアーティファクトをビルドします

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <name>someservice</name>
    <groupId>com.domain.group</groupId>
    <artifactId>someservice</artifactId>
    <version>1.0.0-SNAPSHOT</version>

Jenkins ジョブで最上位の Maven ターゲットを呼び出します。

-V
-B
-e
-U
clean
versions:set
-DnewVersion=${VERSION}
package
deploy
-Dmaven.test.skip=true

私のビルド出力は次のようになります ($VERSION が 0.1.2 の場合)

[INFO] ------------------------------------------------------------------------
[INFO] Building someservice 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.2:set (default-cli) @ someservice ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: /svn/group/someservice/trunk
[INFO] Processing change of com.domain.group:someservice:1.0.0-SNAPSHOT -> 0.1.2
[INFO] Processing com.domain.group:someservice
[INFO]     Updating project com.domain.group:someservice
[INFO]         from version 1.0.0-SNAPSHOT to 0.1.2
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.147s
[INFO] Finished at: Wed May 20 11:40:46 PDT 2015
[INFO] Final Memory: 10M/180M
[INFO] ------------------------------------------------------------------------

最初の実行は古いバージョンでビルドされますが、作業ディレクトリが元に戻されていない場合、その後の実行は更新された pom.xml の新しいバージョンで正しくビルドされることに気付きました。成果物がビルドされる前に、pom ファイルを新しいバージョンで更新するにはどうすればよいですか?

制約:

  • pom.xml に変更を加えることは可能かもしれませんが、それは私たちの直接の管理下にあるわけではなく、あまり実用的な解決策ではありません。理想的な世界では、pom はすでに正しいバージョンで更新されており、これをまったく行っていません。
  • Mavenビルドの前にシェルステップを追加して、pom.xmlなどでsed replaceを実行できることはわかっています。それは機能しますが、醜く、より複雑な pom ではうまくスケーリングできません。ネイティブの Maven ソリューションが非常に好まれます。
  • これをジェンキンスとは別にテストしました(つまりmvn versions:set -DnewVersion=0.1.2)、動作は同じです
4

1 に答える 1