为 Jenkins 工作流(管道)构建设置构建号
Set build number for Jenkins workflow (pipeline) builds
我正在将 jenkins-workflow 作业迁移到新的基于模板的工作流作业。因为内部版本号用作工作流生成的构建工件版本的一部分,所以我必须使用比旧工作流大的数字开始新工作流的内部版本号。不幸的是 'Next Build Number' 插件不适用于工作流管道。
有人知道这样做的好方法吗?
在 Jenkins 脚本控制台中尝试 运行 下面的脚本。将 "workFlow" 更改为您的作业名称
def job = Jenkins.instance.getItem("workFlow")
job.nextBuildNumber = 10
job.saveNextBuildNumber()
我还找到了另一种方法 'jenkins-cli'。它适用于无法访问脚本控制台的锁定安装 (Cloudbees Enterprise Jenkins)
java -jar jenkins-cli.jar -s https://instanceURL/ \
set-next-build-number workflow-name 33
或者,您可以将这样的片段添加到您的 Pipeline/Workflow 作业 DSL 脚本(又名 Jenkinsfile):
offset = 5
currentBuild.displayName = "#" + (currentBuild.number + offset)
不幸的是,上面列出的方法在使用文件夹时对我不起作用。我在 Jenkins 脚本控制台中使用了以下内容:
job = Jenkins.getInstance().getItemByFullName("BSKAzureConversion-Jobs/master", Job.class)
job.nextBuildNumber = 92
job.save()
一些注意事项:
- Jenkins 作业和文件夹不可序列化。需要使用
@NonCPS
- 禁用 Groovy 沙盒,因为像
Jenkins.instance
这样的全局变量无法访问
Jenkins.instance.getItem()
不适用于文件夹。使用 Jenkins.instance.getItemByFullName
对 env.JOB_NAME
- 设置
job.nextBuildNumber
将在后续构建生效,所以继续开始下一个
- 确保您 return 离开您的管道,这样初始构建就不会继续使用错误的构建号
代码:
@NonCPS
def updateBuildNumber(build_number) {
def job = Jenkins.instance.getItemByFullName(env.JOB_NAME, Job.class)
job.nextBuildNumber = build_number
job.saveNextBuildNumber()
build env.JOB_NAME
return true
}
我使用了@Jayan 的答案并对其进行了修改以支持从该工作流中获取一个分支,因为 getItem("workflow/job/mybranch")
没有工作
def job = Jenkins.instance.getItem("workFlow").getItemByBranchName("mybranch")
job.nextBuildNumber = 10
job.saveNextBuildNumber()
我正在将 jenkins-workflow 作业迁移到新的基于模板的工作流作业。因为内部版本号用作工作流生成的构建工件版本的一部分,所以我必须使用比旧工作流大的数字开始新工作流的内部版本号。不幸的是 'Next Build Number' 插件不适用于工作流管道。
有人知道这样做的好方法吗?
在 Jenkins 脚本控制台中尝试 运行 下面的脚本。将 "workFlow" 更改为您的作业名称
def job = Jenkins.instance.getItem("workFlow")
job.nextBuildNumber = 10
job.saveNextBuildNumber()
我还找到了另一种方法 'jenkins-cli'。它适用于无法访问脚本控制台的锁定安装 (Cloudbees Enterprise Jenkins)
java -jar jenkins-cli.jar -s https://instanceURL/ \
set-next-build-number workflow-name 33
或者,您可以将这样的片段添加到您的 Pipeline/Workflow 作业 DSL 脚本(又名 Jenkinsfile):
offset = 5
currentBuild.displayName = "#" + (currentBuild.number + offset)
不幸的是,上面列出的方法在使用文件夹时对我不起作用。我在 Jenkins 脚本控制台中使用了以下内容:
job = Jenkins.getInstance().getItemByFullName("BSKAzureConversion-Jobs/master", Job.class)
job.nextBuildNumber = 92
job.save()
一些注意事项:
- Jenkins 作业和文件夹不可序列化。需要使用
@NonCPS
- 禁用 Groovy 沙盒,因为像
Jenkins.instance
这样的全局变量无法访问 Jenkins.instance.getItem()
不适用于文件夹。使用Jenkins.instance.getItemByFullName
对env.JOB_NAME
- 设置
job.nextBuildNumber
将在后续构建生效,所以继续开始下一个 - 确保您 return 离开您的管道,这样初始构建就不会继续使用错误的构建号
代码:
@NonCPS
def updateBuildNumber(build_number) {
def job = Jenkins.instance.getItemByFullName(env.JOB_NAME, Job.class)
job.nextBuildNumber = build_number
job.saveNextBuildNumber()
build env.JOB_NAME
return true
}
我使用了@Jayan 的答案并对其进行了修改以支持从该工作流中获取一个分支,因为 getItem("workflow/job/mybranch")
没有工作
def job = Jenkins.instance.getItem("workFlow").getItemByBranchName("mybranch")
job.nextBuildNumber = 10
job.saveNextBuildNumber()