问题 Maven通过Hudson发布


我正在设置Hudson使用批处理任务插件来对我们的内部存储库进行maven发布。我是这样做的:

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

我对人们使用的其他方法以及这些方法的优缺点感兴趣。此外,任何陷入困境的人都会遇到。


13192
2018-04-23 15:35


起源



答案:


由于一些原因,我总是手工完成释放。首先,如果你必须回滚它,当你可以回到原始版本位置并执行它时会更容易。其次,因为您需要解决所有快照依赖关系作为该过程的一部分。

我们的开发过程让我们将依赖关系保留在先前版本的当前版本之外,直到修复需要升级。这意味着,如果我发布Nexus,Maven等,那么我会看到快照,这意味着我必须首先发布这些快照。这个过程实际上不可能自动化,因为它根据自上一版本以来的变化而变化。

也就是说,我们有一个特殊的机器(在Sonatype它只是一个虚拟机)设置只适用于构建。这样做是为了保证不会发生可能会意外影响构建的环境变化(如jdk更改)。它还使任何人都可以更轻松地获取发布流程,因为它随时可以使用。


8
2018-04-25 21:08



遗憾的是,我认为手动版本是一种技术上可接受但在政治上不可接受的解决方案。我会提到Sonatype的一位资深人士 亲自 建议我们手工完成发布。 - sal
替代方案是您执行发布:手动准备目标,或至少发布:prepare -Ddryrun = true,直到您完全确定所有条件都已完成,然后您可以启动构建过程并合理地确定它是去上班。 - Brian Fox
我真的很喜欢这个主意。释放:prepare -Ddryrun = true首先执行应该可以防止我们可能遇到的大多数问题。 - sal


答案:


由于一些原因,我总是手工完成释放。首先,如果你必须回滚它,当你可以回到原始版本位置并执行它时会更容易。其次,因为您需要解决所有快照依赖关系作为该过程的一部分。

我们的开发过程让我们将依赖关系保留在先前版本的当前版本之外,直到修复需要升级。这意味着,如果我发布Nexus,Maven等,那么我会看到快照,这意味着我必须首先发布这些快照。这个过程实际上不可能自动化,因为它根据自上一版本以来的变化而变化。

也就是说,我们有一个特殊的机器(在Sonatype它只是一个虚拟机)设置只适用于构建。这样做是为了保证不会发生可能会意外影响构建的环境变化(如jdk更改)。它还使任何人都可以更轻松地获取发布流程,因为它随时可以使用。


8
2018-04-25 21:08



遗憾的是,我认为手动版本是一种技术上可接受但在政治上不可接受的解决方案。我会提到Sonatype的一位资深人士 亲自 建议我们手工完成发布。 - sal
替代方案是您执行发布:手动准备目标,或至少发布:prepare -Ddryrun = true,直到您完全确定所有条件都已完成,然后您可以启动构建过程并合理地确定它是去上班。 - Brian Fox
我真的很喜欢这个主意。释放:prepare -Ddryrun = true首先执行应该可以防止我们可能遇到的大多数问题。 - sal


最近,一个m2release插件引起了我的注意。看起来不错。虽然,我本来希望我的发布过程完全是“免费调整”。我的意思是我们必须提供4个输入参数来处理完整版本:

  1. 发布版本(例如1.0.0)
  2. 新的开发版本(例如1.0.1-SNAPSHOT)
  3. SCM中的发布标记(例如发行版1.0.0或1.0.0)
  4. SCM中的标记基本路径

前2个具有可接受的默认值。错误修复版数字的版本对我来说非常好。

可以在pom中指定编号4。它不会改变。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <configuration>
        <tagBase>https://example.com/svn/myProject/releases</tagBase>
    </configuration>
</plugin>

这是第三个阻止我按下按钮完全自动化发布的第三个。默认的发布标签标签不会为我们这样做,所以我们必须指定它:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <configuration>
        <tag>release-${pom.version}</tag>
        <tagBase>https://example.com/svn/myProject/releases</tagBase>
    </configuration>
</plugin>

现在,虽然这可能正是我所需要的,但我最终得到了一个带有-SNAPSHOT的svn标签。 :(所以我必须在Hudson作业配置中传递tag参数。此外,我必须为我们制作的每个版本更改它...这不是我需要的。


所以,最后,在hudson + m2release hudson插件+正确配置的maven发布插件中有一个maven2类型的项目是迄今为止我见过的所有发布过程的母亲。虽然不完美,但它为我节省了很多紧张的工作。

JS。


2
2018-01-29 20:16



当前版本的maven-release-plugin(2.2.1)有一个新功能可以解决您的问题#3。在此处查看“覆盖默认标记名称格式”部分: maven.apache.org/plugins/maven-release-plugin/examples/... - Matthew Jaskula
在你的pom.xml中指定更正确 <tag>release-@{project.version}</tag>,否则它被我的Maven的SNAPSHOT版本取代。 - dma_k


我总是手动触发一个明显的利弊:-)


0
2018-04-23 15:55





我们一直在试验Hudson Maven发布插件,虽然我有点挑战它正确地归功于发布,没有像我们的构建文件中硬编码密码这样的恶意。


0
2017-07-08 03:05