设置Jenkins工作流(管道)构建的内部版本号

时间:2016-01-22 16:39:45

标签: jenkins jenkins-workflow

我正在将jenkins-workflow作业迁移到基于新模板的工作流作业。因为构建号用作构建工件版本的一部分,所以工作流产生我必须以比旧工作流更大的数字开始新工作流的构建号。不幸的是,“Next Build Number”插件不适用于工作流程管道。

有人知道这样做的好方法吗?

6 个答案:

答案 0 :(得分:16)

或者,您可以将这样的代码段添加到您的Pipeline / Workflow作业DSL脚本(又名Jenkinsfile)中:

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

答案 1 :(得分:10)

不幸的是,上面列出的方法在使用文件夹时对我不起作用。我在Jenkins脚本控制台中使用了以下内容:

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

答案 2 :(得分:8)

尝试在Jenkins脚本控制台中运行以下脚本。将“workFlow”更改为您的作业名称

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

答案 3 :(得分:2)

一些注意事项:

  • Jenkins作业和文件夹不可序列化。需要使用@NonCPS
  • 禁用Groovy Sandbox,因为Jenkins.instance之类的全局变量无法访问
  • Jenkins.instance.getItem()无法与文​​件夹配合使用。对Jenkins.instance.getItemByFullName
  • 使用env.JOB_NAME
  • 设置job.nextBuildNumber将在后续构建中生效,因此请继续开始下一个
  • 确保您退出管道,以便初始构建不会继续使用错误的内部版本号

代码:

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

答案 4 :(得分:0)

我还通过使用'jenkins-cli'找到了另一种方法。它适用于无法访问脚本控制台的锁定安装(Cloudbees Enterprise Jenkins)

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

答案 5 :(得分:0)

我使用了@Jayan 的答案并对其进行了修改以支持从该工作流程中获取分支,因为 getItem("workflow/job/mybranch") 不起作用

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