12

我需要在此示例中获取名称作业,我有一个代码用于使用该代码获取构建参数的先前值

jenkins.model.Jenkins.instance.getItem("nameOfJob").lastBuild.getBuildVariables().get("NameOfParameter");

现在工作的名称是硬编码的,我需要得到这个名称将是当前工作的名称。我该怎么做?

4

7 回答 7

12

Groovy 动态参数无法访问 jenkins 工作的其余部分所拥有的常用环境变量。

这是获取工作名称的有效技巧:

def build = Thread.currentThread().toString()
def regexp= ".+?/job/([^/]+)/.*"
def match = build  =~ regexp
def jobName = match[0][1]
于 2015-02-26T14:56:19.950 回答
5

如果您在项目中运行一个步骤,则有一个环境变量 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

你需要做一些字符串操作来分离工作和构建

于 2013-09-03T20:48:02.533 回答
5

以下适用于我的 uno-choice 插件参数 Groovy 脚本(意味着在绑定构建之前):

def job = this.binding.jenkinsProject

如果您对职位名称感兴趣,那么:

def jobName = this.binding.jenkinsProject.name
于 2015-07-03T09:18:21.357 回答
1
(Thread.currentThread().toString() =~ /job\/(.*?)\//)[0][1]
于 2017-02-15T11:31:16.203 回答
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 文档中的类名有点棘手,所以这里有一些提示:

于 2019-07-25T13:52:01.947 回答
1

这在脚本管道的脚本块中对我有用

${env.getEnvironment().get('JOB_NAME')}
于 2019-10-16T14:54:35.603 回答
0

def jobName = env.JOB_NAME在 2.176 Enterprise rolling 上对我来说效果很好。这具有被列入白名单的额外好处,因此您可以在锁定的 Jenkins 中使用它。

于 2019-11-07T20:53:01.637 回答