使用Jenkins / Git增加Maven项目版本

时间:2012-03-21 15:02:22

标签: git maven hudson jenkins maven-release-plugin

我正在使用Jenkins构建Maven Java项目并将它们部署到Nexus存储库。我也使用Git,虽然我更习惯Subversion,所以我的Git知识有限。

我想Jenkins / Maven:

  1. 将功能分支合并到集成分支
  2. 构建合并代码,运行单元测试
  3. 如果它们通过,则增加Maven版本号
  4. 将合并代码推送到origin的集成分支
  5. 将工件部署到Nexus存储库
  6. 我收集了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中存在本地版本解析问题。

1 个答案:

答案 0 :(得分:8)

好的,这很难做到。但这是可行的。让我一步一步地解释这个想法。

  1. 首先,我们需要将两个分支合并在一起。使用Jenkins Git插件非常容易,因为它有feature built in 合并之前合并 选项在高级中可用项目配置中的部分。

  2. 所以我们得到了这两个分支之间合并的代码,我们可以转移到构建项目 - 像往常一样,Maven风格的Jenkins项目。

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

    1. 使用maven-release-plugin进行工作。是的,这是可能的,因为没有人说你需要把URL放在你的pom中,因为它可以用两种不同的方式提供。该插件将使用命令行开关-DconnectionUrl=提供的插件。如果没有提供,它将检查release.properties文件以从那里获取它。最后一个保留是转到pom.xml ang get ${project.scm.connection}变量。因此,您可以轻松地使用该插件完成所有脏工作而不会有任何麻烦,并使用Jenkins提供的不同技术引入该属性。
    2. 您可以将maven-versions-plugin(特定版本:设置版本:提交目标)与maven-scm-plugin组合使用来进行标记,承诺改变。
    3. 在这两种情况下,您都可以使用后续步骤仅在构建成功时运行选项并像往常一样调用顶级Maven目标。对于上面提到的或特定插件所描述的所有设置,可以选择在文本字段中轻松提供它们。 为了将工件上传到Nexus仓库,我将使用Jenkins内置功能将部署工件部署到Maven存储库,这在您的项目配置中是可用的。这将要求您在POM定义或属性中提供存储库配置。

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