2012-03-21 99 views
6

我使用Jenkins构建Maven Java项目并将它们部署到Nexus存储库。我也使用Git,尽管我更习惯Subversion,所以我的Git知识是有限的。Jenkins/Git增量Maven项目版本

我想詹金斯/ 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中有本地版本解析问题。

+0

查看[maven version plugin](http://mojo.codehaus.org/versions-maven-plugin/)'mvn versions:use-next-releases'或'mvn versions:set -DnewVersion = xyz' – 2012-03-21 20:36:10

+0

Hi ,我尝试了mvn版本:set -DnewVersion = xyz,但是当部署到Nexus的工件仍然具有旧版本号集时,尽管我可以在日志中看到该变量已传递给Maven。 – 2012-03-22 08:37:04

+0

你说得对,因为你推送原始来源(编译前)。你必须从jenkins工作区推送源代码... – 2012-03-22 08:52:37

回答

8

好的,这是一个相当困难的事情。但它是可行的。让我一步一步解释这个想法。

  1. 首先,我们需要将两个分支合并在一起。这是很容易做到詹金斯Git的插件,因为它有这个feature built in合并之前建立选项是在你的项目配置高级部分可用。因此,我们得到了这两个分支之间的代码合并,我们可以转移到建设项目 - 像往常一样的业务,Maven风格的Jenkins项目。

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

    1. 使用maven-release-plugin来工作。是的,这是可能的,因为没有人说你需要把URL放到你的pom中,因为它可以通过两种不同的方式提供。该插件将使用一个与命令行开关-DconnectionUrl=一起提供的插件。如果没有提供,它将检查release.properties文件以从中获取它。最后的储备是去pom.xml变得${project.scm.connection}变量。因此,您可以轻松使用该插件轻松完成所有肮脏的工作,并使用Jenkins提供的不同技术来引入该属性。
    2. 您可以使用maven-versions-plugin组合(specificaly 版本:设置版本:提交目标)与maven-scm-plugin做标记,并提交更改。

    在这两种情况下,你可以使用后步骤运行仅生成成功选项,并调用顶级的Maven目标如常。对于上面提到的或由特定插件描述的所有设置,都可以在文本字段中轻松提供它们。 为了将你的工件上传到Nexus仓库,我将与Jenkins一起构建将工件部署到Maven仓库,这可以在你的项目配置中找到。这将需要您在POM定义中或作为属性提供存储库配置。

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