2013-03-18 69 views
10

我已经配置了一个Jenkins作业来自动发布我的Maven项目。这是通过使用以下内容完成的:mvn --batch-mode clean release:prepare release:perform 在批处理模式下,发布版本和开发版本将自动确定。这正是我想要的。Maven版本:批处理模式下的下一个开发版本

问题是我想增加版本的第二个数字而不是第三个。所以当我发布1.2.0版本时,下一个开发版本必须是1.3.0-SNAPSHOT。不是1.2.1-SNAPSHOT。 添加命令行参数不是一个选项,因为这迫使我不断编辑构建作业。

有关如何更改用于确定下一个开发版本的算法的任何建议?

+1

反对使用** 1.2-SNAPSHOT **而不是** 1.2.0-SNAPSHOT **的一些反对意见。 – khmarbaise 2013-03-18 15:12:03

+2

为什么不使用jenkins m2 release插件? https://wiki.jenkins-ci.org/display/JENKINS/M2+Release+Plugin – willome 2013-03-18 15:14:21

+0

我们可能想要在未来使用第三位数字来发布bug,但现在只需要2位数就足够了。我甚至不知道发布插件。看起来非常有用,但似乎无法解决非默认版本模式中版本增量的问题。它确实有助于选择正确的版本。 – bergvandenp 2013-03-18 21:53:53

回答

0

正如Khmarbaise所建议的,我也认为没有解决您的问题。

是否有任何规则,可以自动告诉你,如果你必须改变第二个或第三个数字?事实上,我不这么认为。说这个,你不能要求Maven/Jenkins为你选择它,一次是主要版本数字,另一个是次要版本数字。

您必须通过参数对其进行更改,或让用户通过Jenkins M2 Release插件进行配置,如willome所建议的。 它只能是一个手动操作。

0

如果您在Jenkins中使用参数化版本,则可以在不编辑作业的情况下使用命令行参数。检查作业配置页面中的“此版本是否已参数化”选项。

这不会让Jenkins完全独立执行发布(这很好,我们不希望机器人接受我们的工作!) - 当您从Jenkins内部手动启动构建时,您会能够设置你配置的任何参数。

+0

http://www.whyimcray.com/wp-content/uploads/2015/06/humans_jerbs.jpg – 2015-12-16 22:48:17

+1

你和我不同意机器人无产阶级;) – 2015-12-16 22:48:47

+1

你可以从我冷冰冰的手中拿出我的发布版本! – 2015-12-17 00:42:25

0

您可以使用自定义groovy脚本来自动为maven-release-plugin提供releaseVersion和developmentVersion。然后maven的命令看起来像somwthing:

MVN清洁版本:干净的版本:准备发布:执行-DreleaseVersion = $ {} releaseVersion = -DdevelopmentVersion $ {} developmentVersion

按照以下步骤在this answer和更改Groovy脚本的一部分适合您的使用情况(例如该部分):

def newFixVersion = 0; 
if (hasSnapshotPart) { 
    newMinorRelVersion = minorVersion; 
    newMinorDevVersion = minorVersion + 1; 
} else { 
    //TODO: either throw an exception here or change the newMinorRelVersion newMinorDevVersion appropriately to suite your use-cases: 
     //throw new IllegalArgumentException("The pom at location " + POM_LOCATION + " contains the version " + projectVersion + " which is not a snapshot version (missing " + SNAPSHOT_PART + "). This is a released version and nothing should happen to it!"); 
} 
0

我有同样的问题,我想解决这个问题,而不运行多个命令或通过手动插入的版本。

这里是我的Y(或小)增量的解决方案:

我运行Groovy脚本在初始化阶段。此脚本创建release.properties。添加到您的项目/在你的pom.xml建立/插件部分:

 <plugin> 
      <groupId>org.codehaus.gmavenplus</groupId> 
      <artifactId>gmavenplus-plugin</artifactId> 
      <version>1.5</version> 
      <dependencies> 
       <dependency> 
        <groupId>org.codehaus.groovy</groupId> 
        <artifactId>groovy-all</artifactId> 
        <version>2.4.6</version> 
       </dependency> 
      </dependencies> 
      <executions> 
       <!-- Force maven-release-plugin to increase MINOR, not PATCH, and create tag as vX.Y.Z --> 
       <execution> 
        <id>release-parameters</id> 
        <phase>initialize</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
        <configuration> 
         <scripts> 
          <script> 
           <![CDATA[ 
            final String SNAPSHOT = '-SNAPSHOT' 

            Properties releaseProps = new Properties() 
            File releasePropsFile = new File('release.properties') 
            String releaseVersion = '${project.version}'.replace('-SNAPSHOT', '') 
            String[] vNumbers = releaseVersion.split('\\.') 
            String snapshotVersion = vNumbers[0] + '.' + (Integer.parseInt(vNumbers[1]) + 1) + '.' + '0' + SNAPSHOT 

            releaseProps.setProperty('scm.tag', 'v' + releaseVersion) 
            releaseProps.setProperty('project.rel.${project.groupId}:${project.artifactId}', releaseVersion) 
            releaseProps.setProperty('project.dev.${project.groupId}:${project.artifactId}', snapshotVersion) 
            releaseProps.store(releasePropsFile.newWriter(), null) 
           ]]> 
          </script> 
         </scripts> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

这个脚本vX.Y.Z也改变了标签在你的供应链管理。初始化阶段未执行发行版:准备阶段。要解决此问题,您可以运行一个发布前“MVN安装”,或更改您发布命令:

mvn --batch-mode initialize clean release:prepare release:perform 

关于release.properties:https://maven.apache.org/maven-release/maven-release-plugin/examples/non-interactive-release.html

1

我知道这是一个有点老的文章,但我没有在网上找到我真正喜欢的答案,并且我能够想出一些可能适合其他人的答案...

我希望增加minorVersion,因为OP的状态是,我能够通过在我的项目POM中使用构建帮助器插件(解析版本)和发布插件的组合来实现。请注意POM中引用的“初始化”阶段和maven运行属性...

下面是POM的摘录,我们使用构建助手插件来解析我们可以在发布插件中引用的版本...

<plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <version>${maven.build.helper.plugin.version}</version> 
       <executions> 
        <execution> 
         <id>parse-versions-for-release</id> 
         <phase>initialize</phase> 
         <goals> 
          <goal>parse-version</goal> 
         </goals> 
         <configuration> 
          <propertyPrefix>parsedVersion</propertyPrefix> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-release-plugin</artifactId> 
       <version>${maven.release.plugin.version}</version> 
       <configuration> 
        <autoVersionSubmodules>true</autoVersionSubmodules> 
        <tagNameFormat>@{project.artifactId}[email protected]{project.version}</tagNameFormat> 
        <useReleaseProfile>false</useReleaseProfile> 
        <developmentVersion>${parsedVersion.majorVersion}.${parsedVersion.nextMinorVersion}.0-SNAPSHOT</developmentVersion> 
       </configuration> 
      </plugin> 

现在我们可以只运行一个漂亮的正常释放,但将在“初始化”阶段,触发版本解析(并确保之前寻找解析版本中,它发生)......

mvn initialize release:clean release:prepare release:perform