174

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

set BUILD_NUMBER=45

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

4

8 回答 8

340

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

Jenkins.instance.getItemByFullName("YourJobName").updateNextBuildNumber(45)
于 2016-04-27T22:03:24.167 回答
38

可以使用插件完成: 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”页面“从磁盘重新加载配置”。

于 2014-04-22T13:40:52.457 回答
32

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

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

有一个文件名为nextBuildNumber.

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

于 2015-08-06T06:10:46.220 回答
10

如果您有包含正斜杠的分支名称(例如使用git flow),则需要将正斜杠替换为分支名称中的 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()

希望能帮助到你。

于 2018-11-20T17:54:18.307 回答
5

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

于 2013-10-28T22:41:01.300 回答
4

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

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

于 2020-02-01T11:04:37.097 回答
3

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

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())
    }
}
于 2020-08-25T19:44:14.097 回答
-5

通过使用环境变量:

$BUILD_NUMBER =4
于 2018-07-29T21:56:27.243 回答