Set build number for Jenkins workflow (pipeline) b

2020-05-26 09:56发布

I am migrating jenkins-workflow job to new template based workflow job. Because the build number is used as part of the version of build artifacts the workflow produces I have to start build number of the new workflow with a number greater than the old workflow. Unfortunately 'Next Build Number' plugin does not work with workflow pipeline.

Anybody knows a good way do this?

5条回答
何必那么认真
2楼-- · 2020-05-26 10:11

I also found another way of doing this by using 'jenkins-cli'. It works for locked down installations where access to script console is not available (Cloudbees Enterprise Jenkins)

java -jar jenkins-cli.jar   -s https://instanceURL/ \
          set-next-build-number workflow-name  33
查看更多
萌系小妹纸
3楼-- · 2020-05-26 10:12

Unfortunately the methods listed above didn't work for me when using folders. I resorted to the following in the Jenkins script console:

job = Jenkins.getInstance().getItemByFullName("BSKAzureConversion-Jobs/master", Job.class)
job.nextBuildNumber = 92
job.save()
查看更多
做自己的国王
4楼-- · 2020-05-26 10:13

Try running below script in Jenkins Script Console.. Change "workFlow" to your Jobname

def job = Jenkins.instance.getItem("workFlow")
job.nextBuildNumber = 10
job.saveNextBuildNumber()
查看更多
趁早两清
5楼-- · 2020-05-26 10:16

A few notes:

  • Jenkins Jobs and Folders are not serializable. Need to use @NonCPS
  • Disable Groovy Sandbox, as globals like Jenkins.instance are not accessible otherwise
  • Jenkins.instance.getItem() won't work well with folders. Use Jenkins.instance.getItemByFullName against the env.JOB_NAME
  • Setting job.nextBuildNumber will take effect subsequent build, so go ahead and kick off the next one
  • Make sure you return out of your pipeline so the initiating build doesn't continue with bad build number

Code:

@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
}
查看更多
smile是对你的礼貌
6楼-- · 2020-05-26 10:22

Or, you could add a snippet like this to your Pipeline/Workflow job DSL script (aka Jenkinsfile):

offset = 5
currentBuild.displayName = "#" + (currentBuild.number + offset)
查看更多
登录 后发表回答