2016-01-22 67 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 
}