如何在jenkins中使用groovy获取当前构建的节点名

2eafrhcq  于 2022-11-01  发布在  Jenkins
关注(0)|答案(2)|浏览(290)

我在Jenkins中运行了一个管道作业,我想知道它运行所在的节点的名称。有没有办法从作业的Groovy脚本中获取节点名称?
我已经尝试了下面的代码:

print currentBuild.getBuiltOn().getNodeName()

错误为:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified method org.jenkinsci.plugins.workflow.job.WorkflowRun getBuiltOn

我也试过这个:

def build = currentBuild.build()
print build.getExecutor().getOwner().getNode().getNodeName()

但结果是“”。

3ks5zfa0

3ks5zfa01#

有一个环境变量“NODE_NAME”具有此属性。
您可以按如下方式访问它:

echo "NODE_NAME = ${env.NODE_NAME}"

编辑管道作业时,可以通过转至“管道语法”帮助链接(页面左侧)找到所有可用的环境变量,然后查找“全局变量”部分,并单击进入“全局变量参考”。其中有一个“env”部分列出了可用的环境变量。

8ftvxx2r

8ftvxx2r2#

虽然没有文档说明,但确实可以从管道的CpsThread类中获取Node和Executor对象,当然,它们只在node { }块中定义:

import org.jenkinsci.plugins.workflow.cps.CpsThread;

@NonCPS
obtainContextVariables() {
    return CpsThread.current().getContextVariables().values;
}

node('myNode') {
    print('Node: ' + obtainContextVariables().findAll(){ x -> x instanceof Computer }[0].getNode())
    print('Executor: ' + obtainContextVariables().findAll(){ x -> x instanceof Executor }[0])
}

相关问题