如何自动增加Jenkins构建编号?

6

如何通过脚本或其他方式自动增加Jenkins构建编号?目前,我使用"配置"选项手动增加编号,但我希望能够自动完成此操作。


1
它会在每次触发的构建中自动递增。你说的“现在我正在使用配置选项做同样的事情,并手动增加”,是什么意思?Jenkins提供的环境变量“BUILD_NUMBER”将在构建日志中显示,如果你回显它。 - Mayur Nagekar
@Mayur 这里有两个问题。1. 当构建失败时,构建编号仍会增加。2. 我正在使用插件“Invoke Top-Level Maven Targets”,在该插件中,假设我将版本设置为50。如果它失败了,下一次我不会保留51,直到构建成功。所以这个数字我是手动保留的。我希望它自动增加。如果我在同一个插件中使用“BUILD_NUMBER”,即使失败也会递增。我希望它只在构建成功的情况下递增。 - KP_JavaDev
好的,明白了。Jenkins将构建号维护在一个名为nextbuildnumber的文件中。每次启动构建时,它会自动递增该数字。如果您希望通过shell脚本登录来控制它,可以检查您的构建结果。如果构建通过(您可能需要检查退出代码),让它递增该数字,否则将其重置为旧的数字。此外,您可能需要清除该构建的目录/工作区。请登录Jenkins从机以了解内部情况。 - Mayur Nagekar
有办法增加这个数字,但在任何时候都不能更改以匹配已经存在的构建。 - Slav
1个回答

22
您所要求的(即在多个作业之间保持构建编号相同)在Jenkins中是不可能的。这是根据Jenkins创建者自己的设计完成的:"[JENKINS]假定构建号是唯一且单调递增的。"。您可以将其更改为较高的值,但将其更改为相同的数字将彻底破坏Jenkins,因此不可能。
构建运行编号只是一个运行编号。它应该是连续的。它在任何方面都不是版本号。
然而,有几种方法可以将版本信息传递到构建历史记录中。 Description Setter Plugin 这就是我使用的。它不会更改构建编号,而是自动更改描述。此外,由于这是一个描述,因此还可以随时手动修改。
它看起来像这样: Description Setter build number 请注意,构建#50#51实际上具有相同的版本号1.3.0.394376。在这个版本字符串中,1.3.0 是当前的发布版本号,由项目属性决定,而394376 实际上是一个 SVN 修订号,从 $SVN_REVISION_1 构建变量获得。因此,每当在 SVN 中进行新的提交,我都会得到一个新的修订号。但是,如果没有提交并且出于任何原因重新构建作业(例如在 #50#51 中),我的版本号保持不变,因为没有代码更改。

我配置的方式是:

  • 下载Description Setter Plugin
  • 在您的生成步骤中的某个位置输出版本号*
  • 我只需输入:
    echo Version is: ${internalVersionNumberFromWherever}.${SVN_REVISION_1}
  • 接下来,在后置生成操作中设置设置生成描述
  • 设置正则表达式,以从控制台提取版本号: Version is: (.*)
  • 将其他内容留空,RegEx 在 (.*) 中捕获的内容将用作描述。
  • 或者,您还可以进一步设置描述文本为Build - \1。其中\1是来自RegEx的第一组(.*)的引用。
  • 随时可以通过从构建历史记录中选择生成运行并单击右侧的“编辑描述”链接(前提是用户已配置了“更新”权限)来手动更改运行的描述。
注意,如果您的构建在输出版本文本之前失败,则描述设置插件将无法捕获它。如果您总是想看到版本,则将版本号的显示设置为第一步骤。 构建名称设置插件 此插件将实际更改构建编号 enter image description here
但是请记住,每个构建号都必须是唯一的
确保的最佳方法是将${BUILD_NUMBER}添加到您想要的任何任意数字中(就像上面的图像中那样)。这样,您可以拥有类似于50.12350.124的构建编号,其中50是您的版本,而123124则是连续构建运行编号,而Jenkins会确保保持${BUILD_NUMBER}唯一。
最后,还有一个我没有亲自尝试过的版本号插件 ,它可能会对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接