我目前正在改进我们在 Jenkins (1.430) 上的项目的发布过程。
当前发布工作
今天,对于一个特定的项目,我们有一项专门用于发布过程的工作。完整的程序如下:
mvn versions:set -DnewVersion=2.0
负责发布的开发人员手动更改所有pom.xml文件的版本(实际上是使用-SNAPSHOT
.- 然后,他在 SVN 中创建一个标签(例如http://my-svn-repo/project/tags/V_2_0)。
- 创建此标签后,他将登录我们的 Jenkins 服务器,并开始发布构建。
- 此构建将询问他要用于构建的标签。该作业被配置为参数化构建,带有参数List Subversion tags。
- 然后 Jenkins 将从这个标签构建工件,并将它们部署在我们的 Nexus 实例上。
- 完成后,开发人员将 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_BRANCH
FROM_BRANCH
此解决方案的问题是用户必须输入trunk
或branches/BRANCH_Vx
,这可能会导致错误。
理想情况下,我希望有一个构建参数可以让我选择分支(包括主干),因为存在用于选择标签的参数List Subversion tags...
所以我的问题是:有没有更好的方法来配置一个可以在所有分支上工作的 Jenkins 工作?
谢谢。
编辑:我发现验证字符串Jenkins 插件可能很有趣,以确保用户定义的值尊重某些正则表达式。这对我的情况很有帮助......