更改 Jenkins 内部版本号

Posted

技术标签:

【中文标题】更改 Jenkins 内部版本号【英文标题】:Changing Jenkins build number 【发布时间】:2013-11-07 20:28:21 【问题描述】:

有没有办法在作业完成后更改通过电子邮件发送的内部版本号?问题是 Jenkins 没有完成产品构建,所以我们希望能够获取构建号(即从文本文件中)并更新 Jenkins 中的构建号以匹配它。我已尝试设置内部版本号:

set BUILD_NUMBER=45

但是邮件仍然显示 Jenkins 最初设置的内部版本号。

【问题讨论】:

【参考方案1】:

您可以通过更新 Jenkins 服务器上的文件 $JENKINS_HOME/jobs/job_name/nextBuildNumber 来更改内部版本号。

您还可以安装插件Next Build Number plugin 以使用 CLI 或 UI 更改内部版本号

【讨论】:

请注意,仅在 nextBuildNumber 文件中更改内部版本号是不够的,还需要在“管理 Jenkins”菜单中执行“从磁盘重新加载配置”。【参考方案2】:

对于多分支管道项目,请在脚本控制台中执行此操作:

def project = Jenkins.instance.getItemByFullName("YourMultibranchPipelineProjectName")    
project.getAllJobs().each item ->   
    
    if(item.name == 'jobName') // master, develop, feature/......
      
      item.updateNextBuildNumber(#Number);
      item.saveNextBuildNumber();
      
      println('new build: ' + item.getNextBuildNumber())
    

【讨论】:

【参考方案3】:

通过使用环境变量:

$BUILD_NUMBER =4

【讨论】:

请不要大喊大叫。谢谢。【参考方案4】:

如果您的分支名称包含 Forward Slash(例如使用 git flow),则需要将 Forward Slash 替换为其分支名称中的 Unicode 字符 %2F

这是管道 My-Pipeline-Name 和分支 release/my-release-branch-name

的示例
Jenkins.instance.getItemByFullName("My-Pipeline-Name/release%2Fmy-release-branch-name").updateNextBuildNumber(BUILD_NUMBER)

我能够通过运行以下命令来了解这一点,该命令将列出您的管道的不同作业(分支)

Jenkins.instance.getItem("My-Pipeline-Name").getAllJobs()

希望对你有帮助。

【讨论】:

【参考方案5】:

如果您有权访问脚本控制台(管理 Jenkins -> 脚本控制台),那么您可以执行以下操作:

Jenkins.instance.getItemByFullName("YourJobName").updateNextBuildNumber(45)

【讨论】:

我可以验证这可以完美解决问题。我在两个 jenkins 服务器之间手动复制了构建历史,在新服务器上 nextBuildNumber 是错误的。运行它允许我设置一个正确的新 nextBuildNumber,不需要 jenkins 配置重新加载。 如果你使用的是 GitHub 插件,"YourJobName""organization/repository/branchname" 有效。无需构建即可验证该值:Jenkins.instance.getItemByFullName("YourJobName").getNextBuildNumber() 我可以确认这也适用于 MultiBranch-Pipelines。 “JobName”列在分支页面的顶部:完整的项目名称:PipelineName/BranchName 所以应该是Jenkins.instance.getItemByFullName("YourPipelineName/YourBranchName").updateNextBuildNumber(45) @Quantic meta.***.com/questions/356435/…【参考方案6】:

在作业工作区文件夹下,如:

C:\Program Files (x86)\Jenkins\jobs\job_name

有一个名为nextBuildNumber的文件。

在文件中设置构建号并从磁盘重新加载配置(管理 Jenkins 菜单)将强制您开始的下一个构建将文件中的值设为 BUILD_NUMBER。

【讨论】:

更改 nextBuildNumber 文件后,您是否从磁盘(管理 Jenkins 菜单)重新加载配置? 不!我以为这是自动发生的。 这对我来说非常有效。您必须重新启动服务器才能生效。 如果您有许多用户运行管道,则必须重新启动服务器是一件痛苦的事情。最好避免这种解决方案【参考方案7】:

可以通过插件完成: https://wiki.jenkins-ci.org/display/JENKINS/Next+Build+Number+Plugin

更多信息: http://www.alexlea.me/2010/10/howto-set-hudson-next-build-number.html

如果你不喜欢这个插件:

如果您想通过 nextBuildNumber 文件更改内部版本号,您应该 “管理 Jenkins”页面中的“从磁盘重新加载配置”。

【讨论】:

无需使用插件。 谢谢,你拯救了我的一天。【参考方案8】:

也许这些插件的组合可能会派上用场:

Parametrized build plugin - 定义一些变量来保存你的内部版本号 Version number plugin - 使用变量更改内部版本号 Build name setter plugin - 使用变量更改内部版本号

【讨论】:

非常感谢 - 我能够使用其中一个插件。

以上是关于更改 Jenkins 内部版本号的主要内容,如果未能解决你的问题,请参考以下文章

更改特定目标 Fastlane 的版本和内部版本号

iTunesConnect TestFlight 的 iOS 应用版本和内部版本号

如何通过使用 git 提交号作为 xcode 内部版本号来避免无限循环

如何在 shell 命令中发送 Jenkins 版本号作为参数,该命令将在构建结束后执行

sh 基于git commit自动更改Xcode项目内部版本号

Jenkins 签出SVN指定版本号