【发布时间】:2011-12-06 19:04:16
【问题描述】:
我目前正在改进我们在 Jenkins (1.430) 上的项目的发布流程。
当前发布工作
今天,对于一个特定项目,我们有一项专门用于发布流程的工作。 完整的流程如下:
- 负责发布的开发人员手动更改所有 pom.xml 文件的版本(实际上是使用
mvn versions:set -DnewVersion=2.0)以摆脱-SNAPSHOT。 - 然后,他在 SVN 中创建了一个标签(例如http://my-svn-repo/project/tags/V_2_0)。
- 创建此标签后,他会登录我们的 Jenkins 服务器,并开始发布版本。
- 此构建将询问他要使用哪个标签进行构建。该作业被配置为 Parameterized build,带有参数 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 作业?
谢谢。
编辑:我发现Validating String Jenkins 插件可以确保用户定义的值尊重某些正则表达式。这对我来说很有帮助...
【问题讨论】:
-
你也可以在这里修改我的答案:stackoverflow.com/a/41632406/2886891
标签: maven hudson jenkins maven-release-plugin