19

我目前正在改进我们在 Jenkins (1.430) 上的项目的发布过程。

当前发布工作

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

  1. mvn versions:set -DnewVersion=2.0负责发布的开发人员手动更改所有pom.xml文件的版本(实际上是使用-SNAPSHOT.
  2. 然后,他在 SVN 中创建一个标签(例如http://my-svn-repo/project/tags/V_2_0)。
  3. 创建此标签后,他将登录我们的 Jenkins 服务器,并开始发布构建。
  4. 此构建将询问他要用于构建的标签。该作业被配置为参数化构建,带有参数List Subversion tags
  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_V1http://my-svn-repo/project/$FROM_BRANCHFROM_BRANCH

此解决方案的问题是用户必须输入trunkbranches/BRANCH_Vx,这可能会导致错误。

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

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

谢谢。


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

4

2 回答 2

19

如果您对詹金斯不太熟悉,只需在彼得的答案中添加一些注释。

subversion 插件默认安装在最新版本中(截至 2015 年 9 月)。

然后你应该配置你的项目如下:

  1. 检查“此构建已参数化”(此项目在最新版本中已参数化)
  2. 选择“列出 subverion 标签(和更多)”
  3. 在名称字段中,设置一个可以稍后在 svn url 中引用的变量名称。我这里选择svnbranch。
  4. 在 Repository URL 字段中,给它您的项目 URL(需要包含主干、分支和标签)
  5. 根据需要填写其他字段
  6. 在源代码管理中,引用之前在您的存储库 url 中定义的变量。

检查以下屏幕截图:

在此处输入图像描述

在此处输入图像描述

于 2015-09-17T04:41:44.250 回答
10

您需要 1.32 版本的 subversion 插件。问题 JENKINS-10678已在该版本中实现。

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

于 2011-10-13T12:47:40.603 回答