使用Jenkins/Git自动递增Maven项目版本号

8
我正在使用Jenkins构建Maven Java项目并将其部署到Nexus存储库。我也使用Git,尽管我更习惯Subversion,所以我的Git知识有限。
我希望Jenkins/Maven能够:
  1. 将特性分支合并到集成分支
  2. 构建合并的代码,运行单元测试
  3. 如果测试通过,增加Maven版本号
  4. 将合并的代码推送到原始的集成分支
  5. 将构件部署到Nexus存储库
我了解到可以通过以下方式实现Git合并:http://twasink.net/2011/09/20/git-feature-branches-and-jenkins-or-how-i-learned-to-stop-worrying-about-broken-builds/ 我也阅读了很多关于maven-release-plugin的内容。
我不确定如何确切地实现上述结果。如果我将SCM详细信息硬编码到每个项目的POM中,那么maven-release-plugin是否只会在该存储库上而不是Jenkins的本地存储库上执行?
如果我使用Jenkins传递环境变量给Maven来指定版本号的解决方案,那么我预计在我的IDE中会出现本地版本解析问题。

请参考 maven version plugin 中的 mvn versions:use-next-releasesmvn versions:set -DnewVersion=x.y.z - Andrzej Jozwik
你好,我尝试了mvn versions:set -DnewVersion=x.y.z命令,但是当部署到Nexus的构件似乎仍然具有旧的版本号,尽管我可以在日志中看到该变量已传递给Maven。 - DeejUK
你是对的,因为你推送的是编译前的原始代码。你必须从Jenkins工作区推送源代码... - Andrzej Jozwik
1个回答

9

好的,这是一项相当困难的任务。但是它是可行的。让我一步一步地解释这个想法。

  1. 首先我们需要合并这两个分支,使用Jenkins Git插件做到这一点非常容易,因为它内置了此功能: 高级部分中有构建前合并选项。

  2. 现在我们可以将代码合并在这两个分支之间,然后构建项目——像往常一样,基于Maven的Jenkins项目。

  3. 现在我们需要增加项目及其模块的版本号,提交合并的分支并将构建产物推送到仓库。这里我们有两个选择:

    1. 使用maven-release-plugin完成这项工作。是的,这是可能的,因为没有人说你需要把URL放在pom文件中,因为它可以通过两种不同的方式提供。该插件将使用通过命令行开关-DconnectionUrl=提供的URL。如果没有提供,则检查release.properties文件以从中获取URL。最后的保留方案是去pom.xml文件中获取${project.scm.connection}变量。因此,您可以轻松地使用插件完成所有肮脏的工作,而不需要任何麻烦,并使用Jenkins提供的不同技术引入该属性。
    2. 您可以将maven-versions-plugin(特别是versions:setversions:commit目标)与maven-scm-plugin组合使用,以进行标记并提交更改。

    在这两种情况下,您都可以使用后续步骤(Post Steps)仅在构建成功时运行选项,并像往常一样调用顶级Maven目标。对于上述或特定插件描述的所有设置,都有一个文本字段可供轻松提供。

希望这回答了您所有的问题。如果您需要我在任何范围内更具体,请不要犹豫,问我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接