我确实要求开发团队设置构建系统,以便每个构建版本都有一个唯一的内部版本号。
构建是由jenkins使用每个分支的作业完成的。
有一个jenkins插件可以为作业设置下一个buildnumber但是这有点无用,至少有两个原因:
如何获取构建号:我们使用git / mercurial中的分支名称和修订号进行HTTP调用。基于此,集中式服务器正在为我们提供构建号作为响应。如果使用相同的参数调用它两次,您将得到相同的响应(所需的行为)。
现在,我们如何调整jenkins以使用与我们相同的构建数字?显然我可以使用从脚本返回的内部版本号,但是作业编号会有所不同,我怀疑jenkins会知道我在脚本中触及了BUILD_NUMBER变量。
主要是,我需要的是一些我可以运行的作业前启动脚本,一个在将编号分配给作业之前运行的脚本。
答案 0 :(得分:16)
您可以在运行之前使用Environment Injector Plugin评估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
答案 1 :(得分:9)
我拿了dnozay's answer,但至少对于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 [:]
同样,所有的功劳归于dnzay的原始剧本。
编辑:创建新作业时,必须在运行新作业之前运行旧作业,否则它们将从1开始。
答案 2 :(得分:0)
查看Build Name Setter Plugin和Description Setter Plugin。它们使用RegEx和/或变量在构建之后根据构建输出设置构建属性。
例如,您可以使用此RegEx:
At revision (\d)+
和这个替换字符串
Build number is ${BUILD_NUMBER}; Subversion revision \1
您可以设置构建的说明。
如果替换字符串不包含构建的唯一内容(例如${BUILD_NUMBER}
),我建议您不要更改构建名称,因为可能有多个构建版本用于相同的存储库修订。
现在,如何在同一个存储库修订版上构建多个作业是另一回事!看来parameterized builds可以通过HTTP POST启动。因此,您可以拥有一个由SCM更改触发的作业,并使用HTTP工具(例如,wget)来安排每个参数化作业。