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

发布于 2024-12-09 21:09:23 字数 1829 浏览 0 评论 0原文

我目前正在 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. 此构建将询问他想要在构建中使用哪个标签。该作业被配置为参数化构建,并带有参数列出 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_BRANCH,并要求用户输入FROM_BRANCH参数。

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

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

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

谢谢。


编辑:我找到了 验证字符串< /a> Jenkins 插件可能很有趣,可以确保用户定义的值遵循某些正则表达式。这对我的情况很有帮助......

I am currently enhancing the release process of our projects on Jenkins (1.430).

Current release jobs

Today, for one specific project, we have one job dedicated to the Release process.
The complete procedure is the following:

  1. The developer who is in charge of the release changes manually the version of all the pom.xml files (in fact using mvn versions:set -DnewVersion=2.0) to get rid of the -SNAPSHOT.
  2. Then, he creates a tag in SVN (http://my-svn-repo/project/tags/V_2_0 for example).
  3. Once this tag has been created, he logs on our Jenkins server, and starts a Release build.
  4. This build will ask him which tag he wants to use for the build. The job is configured as a Parameterized build, with the parameter List Subversion tags.
  5. Jenkins will then build the artifacts from this tag, and deploy them on our Nexus instance.
  6. Once this is done, the developer set the pom.xml versions to the new development version (i.e. 2.1-SNAPSHOT).

The advantage of this method is that I have only Jenkins job, as the build will rely only on a tag.

However, this procedure involves too many human interventiosns (changes of the pom.xml, commits, tags, etc.).

New release jobs

Now, I use the Maven release plugin.
I've created a job that asks three information to the user who launches the build:

  • the version of the release (parameter releaseVersion of the release plugin);
  • the version of development, after the release (parameter developmentVersion of the release plugin);
  • the name of the tag (parameter tag of the release plugin).

This job works fine, except for one point: the job is based on the trunk or on a branch in SVN.
This means that if I have 2 branches (in addition to the trunk), I will need to create 3 release jobs: one per branch.

One idea to keep the best of the two worlds (i.e. using mvn release, but keeping 1 release job) it to add a build parameter that will ask the user for the path of the trunk / branch.
So instead of setting http://my-svn-repo/project/trunk (or http://my-svn-repo/project/branches/BRANCH_V1) in the job configuration, I will set http://my-svn-repo/project/$FROM_BRANCH, and ask the user to input the FROM_BRANCH parameter.

The problem with this solution is that the user will have to input either trunk or branches/BRANCH_Vx, which may lead to errors.

Ideally, I would love to have a build parameter that let me the choice of the branch (including trunk), as the parameter List Subversion tags exist for the choice of tags...

So my question: is there a better way to configure one Jenkins job that can work on all the branches?

Thanks.


Edit: I found the Validating String Jenkins plugin that can be interesting to ensure that the value defined by the user respects some regular expression. That is helpful in my case...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

卖梦商人 2024-12-16 21:09:23

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

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

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

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

检查以下屏幕截图:

“在此处输入图像描述"

在此处输入图像描述

Just to add some notes to Peter's answer if you are not so familiar with jenkins.

The subversion plugin is installed by default in recent versions(as for Sep 2015).

Then you should configure your project as following:

  1. check "This build is parameterized" (this project is parametrized in newest versions)
  2. choose "List subverion tags (and more)"
  3. in the name field, set a varaiable name which can be referenced later in the svn url. I choose svnbranch here.
  4. in the Repository URL field, give it your project URL (which needs to contain trunk, branches, and tags)
  5. fill other field as your needs
  6. in source code management, reference the variable defined before in your repository url.

check following screenshots:

enter image description here

enter image description here

神魇的王 2024-12-16 21:09:23

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

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

You need version 1.32 of the subversion plugin. The issue JENKINS-10678 was implemented in that version.

Then you only give it your project URL (which needs to contain trunk, branches, and tags) and it will offer you the trunk together with your branches.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文