Maven 更新版本目标在 Jenkins 中构建旧版本
Maven update versions goal builds old version in Jenkins
我有一个 Jenkins/maven 构建,我们需要能够生成具有任意版本号的发布工件。版本号作为参数传递给构建作业。我正在使用 versions:set
将 pom.xml 中的版本更新为 $VERSION 参数。当构建为 运行 时,maven 似乎确实更新了 pom.xml 的工作副本中的版本,但是 它使用旧版本号 [=33] 构建了工件=].
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] ------------------------------------------------------------------------
我注意到虽然最初的 运行 将使用旧版本构建,但如果工作目录未恢复,后续 运行s 将使用更新后的新版本正确构建pom.xml。在构建工件之前,如何使用新版本更新 pom 文件?
限制条件:
- 虽然我们可以对 pom.xml 进行更改,但它不在我们的直接控制之下,是一个不太实用的解决方案。在一个理想的世界中,pom 已经更新为正确的版本,我们根本不会这样做。
- 我知道我可以在 Maven 构建之前添加一个 shell 步骤,然后在 pom.xml 或类似的东西上进行 sed 替换。这确实有效,但它很丑陋,并且不能很好地适应更复杂的 poms。本机 Maven 解决方案是首选。
- 我已经独立于 jenkins 进行了测试(即
mvn versions:set -DnewVersion=0.1.2
)并且行为是相同的
当前的 Maven 版本无法实现您想要实现的目标,如 versions-maven-plugin 的 Usage section 所述:
Maven 2.0, 2.1, 2.2 and 3.0 do not currently support re-reading modifications of the pom.xml within one invocation of Maven.
在这里添加另一个构建步骤如何?
我有一个 Jenkins/maven 构建,我们需要能够生成具有任意版本号的发布工件。版本号作为参数传递给构建作业。我正在使用 versions:set
将 pom.xml 中的版本更新为 $VERSION 参数。当构建为 运行 时,maven 似乎确实更新了 pom.xml 的工作副本中的版本,但是 它使用旧版本号 [=33] 构建了工件=].
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] ------------------------------------------------------------------------
我注意到虽然最初的 运行 将使用旧版本构建,但如果工作目录未恢复,后续 运行s 将使用更新后的新版本正确构建pom.xml。在构建工件之前,如何使用新版本更新 pom 文件?
限制条件:
- 虽然我们可以对 pom.xml 进行更改,但它不在我们的直接控制之下,是一个不太实用的解决方案。在一个理想的世界中,pom 已经更新为正确的版本,我们根本不会这样做。
- 我知道我可以在 Maven 构建之前添加一个 shell 步骤,然后在 pom.xml 或类似的东西上进行 sed 替换。这确实有效,但它很丑陋,并且不能很好地适应更复杂的 poms。本机 Maven 解决方案是首选。
- 我已经独立于 jenkins 进行了测试(即
mvn versions:set -DnewVersion=0.1.2
)并且行为是相同的
当前的 Maven 版本无法实现您想要实现的目标,如 versions-maven-plugin 的 Usage section 所述:
Maven 2.0, 2.1, 2.2 and 3.0 do not currently support re-reading modifications of the pom.xml within one invocation of Maven.
在这里添加另一个构建步骤如何?