为Jenkins工作流程(Pipeline)构建设置构建号

19

我正在将Jenkins工作流的任务迁移到基于新模板的工作流任务。由于构建号用作工作流生成的构建产物版本的一部分,所以我必须从比旧工作流更大的数字开始新工作流的构建号。不幸的是,“下一个构建号”插件无法与工作流管道配合使用。

是否有人知道一个好方法来解决这个问题?

6个回答

19

或者,您可以将类似以下的代码片段添加到您的管道/工作流作业DSL脚本中(也称为Jenkinsfile):

offset = 5
currentBuild.displayName = "#" + (currentBuild.number + offset)

这正是我需要的! - Dr.Pil
2
请注意,这只是外观上的变化,不会改变实际的构建版本号。 - MarkHu

15

遗憾的是,上述列出的方法在我使用文件夹时无法正常工作。我不得不在 Jenkins 脚本控制台中采用以下方法:

job = Jenkins.getInstance().getItemByFullName("BSKAzureConversion-Jobs/master", Job.class)
job.nextBuildNumber = 92
job.save()

1
如果在第3行使用job.saveNextBuildNumber(),这对我的多分支流水线有效。 - David V
1
要从多分支管道中找到您的作业名称,请运行以下命令:def jobs = Jenkins.getInstance().getAllItems(); println(jobs)然后,如@DavidV上面所述:def job = Jenkins.instance.getItemByFullName("YourTeam/your_project/features%2Fbranchname"); job.nextBuildNumber = 301; job.saveNextBuildNumber(); - kivagant
这个替代方案对我有用。谢谢。 我添加了一个println来检查更改后的情况。 def job = Jenkins.getInstance().getItemByFullName("package/build-package", Job.class)println(job.nextBuildNumber)job.nextBuildNumber = 254 println(job.nextBuildNumber) job.saveNextBuildNumber() - byOnti

13

请在Jenkins脚本控制台中运行下面的脚本。将"workFlow"更改为您的工作名称。

def job = Jenkins.instance.getItem("workFlow")
job.nextBuildNumber = 10
job.saveNextBuildNumber()

3
这段代码片段没有将新的构建编号写入到“nextBuildNumber”文件中。因此,如果您(平稳地)重新启动Jenkins并触发构建,则会使用“nextBuildNumber”文件中存在的任何构建编号(而不是上面片段中指定的编号)。使用job.saveNextBuildNumber()替代job.save()可以解决这个问题。 - Amit

2

一些注意事项:

  • Jenkins Jobs和Folders不可序列化。需要使用@NonCPS
  • 禁用Groovy Sandbox,因为像Jenkins.instance这样的全局变量否则无法访问
  • Jenkins.instance.getItem()与文件夹不兼容。请针对env.JOB_NAME使用Jenkins.instance.getItemByFullName
  • 设置job.nextBuildNumber将在下一个构建生效,所以继续启动下一个构建
  • 确保你从pipeline返回,以便启动构建不会以错误的构建号继续

代码:

@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
}

1

我使用了@Jayan的答案,并进行了修改以支持从该工作流程获取分支,因为getItem("workflow/job/mybranch")无法正常工作。

def job = Jenkins.instance.getItem("workFlow").getItemByBranchName("mybranch")
job.nextBuildNumber = 10
job.saveNextBuildNumber()

0

我还发现了另一种方法,可以使用 'jenkins-cli' 来完成这个任务。它适用于访问脚本控制台不可用的受限安装(Cloudbees Enterprise Jenkins)。

java -jar jenkins-cli.jar   -s https://instanceURL/ \
          set-next-build-number workflow-name  33

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