sor*_*rin 9 continuous-integration automation jenkins
我确实有开发团队的要求来设置构建系统,因此每个构建都将具有所有分支的唯一构建号.
构建是由jenkins使用每个分支的作业完成的.
有一个jenkins插件可以为作业设置下一个buildnumber但是这有点无用,至少有两个原因:
如何获取构建号:我们使用git/mercurial中的分支名称和修订号进行HTTP调用.基于此,集中式服务器正在为我们提供构建号作为响应.如果使用相同的参数调用它两次,您将得到相同的响应(所需的行为).
现在,我们如何调整jenkins以使用与我们相同的构建数字?显然我可以使用从脚本返回的内部版本号,但是作业编号会有所不同,我怀疑jenkins会知道我在脚本中触及了BUILD_NUMBER变量.
主要是,我需要的是一些我可以运行的作业前启动脚本,一个在将编号分配给作业之前运行的脚本.
dno*_*zay 17
您可以使用Environment Injector插件在运行之前评估Groovy脚本.我有几乎相同的要求,但对我来说,只有job_prefix_名称相同的作业共享相同的唯一nextBuildNumber(换句话说,job_prefix2_其名称中的其他作业共享不同nextBuildNumber).
在本Evaluated Groovy Script节中,请使用:
import jenkins.model.*
// Access to the Jenkins instance
jenkins_instance = jenkins.model.Jenkins.instance
// Select jobs that match.
job_name = "^job_prefix_.*"
allItems = jenkins_instance.items
chosenJobs = allItems.findAll{ job -> job.name.matches(job_name) }
// Get the max
build_number = chosenJobs.collect{ it -> it.nextBuildNumber }.max()
// Increase next build number
currentJob.nextBuildNumber = build_number + 1
// and use it.
def map = [BUILD_NUMBER: build_number]
return map
Run Code Online (Sandbox Code Playgroud)
我接受了dnozay的回答,但至少对于Jenkins 1.586,这对我来说效果不佳.以下是我遇到的问题:
BUILD_NUMBER我在作业中使用的变量不同.此时似乎设置BUILD_NUMBER,即使Override Build Parameters已设置,也为时已晚.nextBuildNumber此脚本和Jenkins都会增加.所以这是基于他的回答的更新版本:
import jenkins.model.*
// Access to the Jenkins instance
jenkinsInstance = jenkins.model.Jenkins.instance
// Select jobs that match.
jobName = "^job_prefix.*"
allItems = jenkinsInstance.items
chosenJobs = allItems.findAll{ job -> job.name.matches(jobName) }
// Get the max
buildNumber = chosenJobs.collect{ job -> job.nextBuildNumber }.max()
// Increase next build number for all matching jobs
chosenJobs.each{ job -> job.updateNextBuildNumber(buildNumber) }
return [:]
Run Code Online (Sandbox Code Playgroud)
同样,所有功劳都归于dnzay的原始剧本.
编辑:创建新作业时,必须在运行新作业之前运行旧作业,否则它们将从1开始.
| 归档时间: |
|
| 查看次数: |
6445 次 |
| 最近记录: |