2016-01-22 69 views
12

我正在將jenkins-workflow作業遷移到基於新模板的工作流作業。由於構建號被用作工作流生成的構建工件版本的一部分,因此我必須使用比舊工作流更多的數量來啓動新工作流的構建編號。不幸的是,「下一個內部版本號」插件不適用於工作流程管道。爲Jenkins工作流程(管道)構建設置內部版本號

有人知道這樣做的好方法嗎?

回答

6

嘗試在詹金斯腳本控制檯運行下面的腳本..更改「工作流」到你的作業名

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

這段代碼不會將新版本號寫入'nextBuildNumber'文件。因此,如果你(優雅地)重新啓動Jenkins然後觸發一個構建,它最終會使用'nextBuildNumber'文件中的任何內部編號(而不是上面代碼片段中指定的那個編號)。使用'job.saveNextBuildNumber()'而不是'job.save()'來解決這個問題。 – Amit

0

我也發現這樣做的另一種方法,通過使用「詹金斯-CLI」。它適用於鎖定裝置那裏獲取腳本控制檯不可用(CloudBees的企業詹金斯)

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

或者,你可以像這樣的代碼片段添加到您的管道/工作流任務DSL腳本(又名Jenkinsfile):

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

這正是我需要的! –

7

不幸的是,上面列出的方法在使用文件夾時不起作用。我使出的詹金斯腳本控制檯執行以下操作:

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

如果對第3行使用'job.saveNextBuildNumber()',這對我的多分支管道起作用。 –

+0

要從多分支管道中找到您的工作名稱,請運行以下命令: 'def jobs = Jenkins.getInstance()。getAllItems(); println(jobs)' 然後,如上面描述的@DavidV: 'def job = Jenkins.instance.getItemByFullName(「YourTeam/your_project/features%2Fbranchname」); job.nextBuildNumber = 301; job.saveNextBuildNumber();' – kivagant

2

的幾個注意事項:

  • 詹金斯喬布斯和文件夾不能序列化。需要使用@NonCPS
  • 禁用Groovy的沙盒,像Jenkins.instance全局不可訪問,否則
  • Jenkins.instance.getItem()將不能很好地使用文件夾。使用Jenkins.instance.getItemByFullNameenv.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 
}