Set build number for Jenkins workflow (pipeline) builds

后端 未结 5 1243
野趣味
野趣味 2021-02-05 09:57

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

相关标签:
5条回答
  • 2021-02-05 10:25

    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()
    
    0 讨论(0)
  • 2021-02-05 10:31

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

    def job = Jenkins.instance.getItem("workFlow")
    job.nextBuildNumber = 10
    job.saveNextBuildNumber()
    
    0 讨论(0)
  • 2021-02-05 10:31

    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
    
    0 讨论(0)
  • 2021-02-05 10:38

    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
    }
    
    0 讨论(0)
  • 2021-02-05 10:43

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

    offset = 5
    currentBuild.displayName = "#" + (currentBuild.number + offset)
    
    0 讨论(0)
提交回复
热议问题