一尘不染

如何说服詹金斯共享几个工作的内部编号?

jenkins

我确实有开发团队的要求来设置构建系统,因此每个构建对于所有分支都将具有唯一的构建编号。

詹金斯使用每个分支的作业进行构建。

有一个jenkins插件可以为工作设置下一个内部版本号,但这至少有两个原因是没有用的:

  • 它会为单个作业设置内部版本号,您不知道如何为所有分支机构设置内部版本号,因为可以随时删除或添加它们
  • 它没有为当前版本设置它

如何获取内部版本号:我们使用git /
mercurial中的分支名称和修订版号进行HTTP调用。基于此,集中式服务器为我们提供了一个内部版本号。如果使用相同的参数两次调用它,您将得到相同的响应(期望的行为)。

现在,我们如何调整詹金斯使用与我们相同的内部版本号?显然,我可以使用从脚本返回的内部版本号,但是工作编号会有所不同,我怀疑詹金斯会知道我接触了脚本内部的BUILD_NUMBER变量。

主要是,我需要的是我可以运行的某种pre-job-start脚本,该脚本可以在将内部版本号分配给作业之前运行。


阅读 208

收藏
2020-07-25

共1个答案

一尘不染

您可以在运行之前使用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
2020-07-25