我需要在此示例中获取名称作业,我有一个代码用于使用该代码获取构建参数的先前值
jenkins.model.Jenkins.instance.getItem("nameOfJob").lastBuild.getBuildVariables().get("NameOfParameter");
现在工作的名称是硬编码的,我需要得到这个名称将是当前工作的名称。我该怎么做?
Groovy 动态参数无法访问 jenkins 工作的其余部分所拥有的常用环境变量。
这是获取工作名称的有效技巧:
def build = Thread.currentThread().toString()
def regexp= ".+?/job/([^/]+)/.*"
def match = build =~ regexp
def jobName = match[0][1]
如果您在项目中运行一个步骤,则有一个环境变量 JOB_NAME
在 groovy 中你可以访问
String jobName = System.getenv('JOB_NAME')
如果您希望它发布构建然后检查此答案如何使用 Groovy 在 Jenkins 中获取有关当前构建项目的特定信息?
根据附加问题,要在设置阶段访问 Jenkins 作业名称,您需要使用支持 groovy 的EnvInject 插件- 它需要返回地图
println "currentJob -->${currentJob}"
println "currentBuild --> ${currentBuild}"
[currentJob: currentJob, currentBuild: currentBuild]
这是我使用 shell 作业回显新环境时的输出
Started by user anonymous
[EnvInject] - Loading node environment variables.
[EnvInject] - Preparing an environment for the build.
[EnvInject] - Keeping Jenkins system variables.
[EnvInject] - Keeping Jenkins build variables.
[EnvInject] - Evaluation the following Groovy script content:
println "currentJob -->${currentJob}"
println "currentBuild --> ${currentBuild}"
[currentJob: currentJob, currentBuild: currentBuild]
currentJob -->hudson.model.FreeStyleProject@5ffe31a7[_xxx]
currentBuild --> _xxx #6
[EnvInject] - Injecting contributions.
Building on master in workspace /var/lib/jenkins/workspace/_xxx
[_xxx] $ /bin/sh -xe /tmp/hudson3812821436584477615.sh
+ echo _xxx #6
_xxx #6
+ echo hudson.model.FreeStyleProject@5ffe31a7[_xxx]
hudson.model.FreeStyleProject@5ffe31a7[_xxx]
Finished: SUCCESS
你需要做一些字符串操作来分离工作和构建
以下适用于我的 uno-choice 插件参数 Groovy 脚本(意味着在绑定构建之前):
def job = this.binding.jenkinsProject
如果您对职位名称感兴趣,那么:
def jobName = this.binding.jenkinsProject.name
(Thread.currentThread().toString() =~ /job\/(.*?)\//)[0][1]
首先确保您使用“执行系统 Groovy 脚本”步骤(而不是“执行 Groovy 脚本”)。
获取作业名称的最简单答案是:
String JOB_NAME = build.project.name;
JOB_NAME
就像在 shell 脚本中一样使用。
但是由于您实际上需要一个作业实例,因此请使用:
build.project.lastBuild.getBuildVariables().get("NameOfParameter");
但是,要获取当前构建的参数(目前实际上正在运行),只需使用:
// string
// (bool is also a string -- "true"/"false" string)
def someStr = build.buildVariableResolver.resolve("someBuildParam");
// mapping to int
def someInt = build.buildVariableResolver.resolve("someBuildParam") as int;
Jenkins 文档中的类名有点棘手,所以这里有一些提示:
这在脚本管道的脚本块中对我有用
${env.getEnvironment().get('JOB_NAME')}
def jobName = env.JOB_NAME
在 2.176 Enterprise rolling 上对我来说效果很好。这具有被列入白名单的额外好处,因此您可以在锁定的 Jenkins 中使用它。