如何配置单个Jenkins作业以从主干或分支进行发布过程?

Rom*_*las 18 hudson maven maven-release-plugin jenkins

我目前正在加强Jenkins(1.430)项目的发布过程.

当前的发布工作

今天,对于一个特定项目,我们有一个专门负责发布流程的工作.完整的程序如下:

  1. 负责发布的开发人员手动更改所有pom.xml文件的版本(实际上是使用mvn versions:set -DnewVersion=2.0)来摆脱-SNAPSHOT.
  2. 然后,他在SVN中创建了一个标签(例如,http:// my-svn-repo/project/tags/V_2_0).
  3. 创建此标记后,他会登录我们的Jenkins服务器,并启动发布版本.
  4. 这个构建将询问他想要用于构建的标记.该作业配置为参数化构建,带有参数List Subversion标记.
  5. 然后,Jenkins将从此标记构建工件,并将它们部署在我们的Nexus实例上.
  6. 完成此操作后,开发人员将pom.xml版本设置为新的开发版本(即2.1-SNAPSHOT).

这种方法的优点是我只有Jenkins作业,因为构建只依赖于标记.

但是,此过程涉及太多人为干预(pom.xml,提交,标签等的更改).

新的发布工作

现在,我使用Maven发布插件.我创建了一个工作,向启动构建的用户提出三个信息:

  • 发行版的版本(releaseVersion发布插件的参数);
  • 发布版本,发布后(developmentVersion发布插件的参数);
  • 标签的名称(tag发布插件的参数).

这项工作正常,除了一点:作业基于中继或SVN的分支.这意味着如果我有2个分支(除了主干),我将需要创建3个发布作业:每个分支一个.

保持两个世界中最好的一个想法(即使用mvn发布,但保留1个发布作业),添加一个构建参数,该参数将询问用户中继/分支的路径.因此,我将设置并要求用户输入参数,而不是在作业配置中设置http://my-svn-repo/project/trunk(或http://my-svn-repo/project/branches/BRANCH_V1).http://my-svn-repo/project/$FROM_BRANCHFROM_BRANCH

这种解决方案的问题在于,用户必须输入任一trunkbranches/BRANCH_Vx,这可能导致错误.

理想情况下,我希望有一个构建参数,让我可以选择分支(包括主干),因为选择标签时存在参数List Subversion标签...

所以我的问题是:有没有更好的方法来配置一个可以在所有分支上工作的Jenkins作业?

谢谢.


编辑:我发现验证字符串 Jenkins插件可以很有趣,以确保用户定义的值尊重某些正则表达式.这对我的情况很有帮助......

dez*_*zhi 17

如果你不熟悉詹金斯,只是为彼得的答案添加一些注释.

默认情况下,subversion插件安装在最新版本中(2015年9月).

然后,您应该按如下方式配置项目:

  1. 检查"此构建已参数化"(此项目在最新版本中进行参数化)
  2. 选择"List subverion tags(and more)"
  3. 在名称字段中,设置一个可变名称,稍后可以在svn url中引用该名称.我在这里选择svnbranch.
  4. 在存储库URL字段中,为其提供项目URL(需要包含主干,分支和标记)
  5. 根据您的需要填写其他字段
  6. 在源代码管理中,引用之前在存储库URL中定义的变量.

查看以下截图:

在此输入图像描述

在此输入图像描述

  • 如果使用$ svnbranch,提交后挂钩会触发此构建吗?只是好奇 (2认同)

Pet*_*tze 9

你需要版本1.32的subversion插件.该问题JENKINS-10678在该版本中实现.

然后你只给它你的项目URL(需要包含主干,分支和标签),它将为你提供主干和你的分支.

  • 有没有办法将其与非标准分支结构一起使用?我的项目的存储库使用 `./branches/Users/<user>/<branch>/`,因此该插件认为只有一个分支(`Users`)。 (2认同)