我有一个字符串中的Jenkins全局变量-如何计算它?

我有一个字符串中的Jenkins全局变量-如何计算它?,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,我需要接受所有类型的全局Jenkins变量作为字符串(基本上作为ansible-like系统的参数-存储在\vars中的模板) 结果是: [Pipeline] echo "asfd" [Pipeline] echo "${params.REPOSITORY_NAME}" groovy.lang.MissingPropertyException: No such property: params for class: Script1 第一个回音证明param值实际上存在 第二个回音是输入的实

我需要接受所有类型的全局Jenkins变量作为字符串(基本上作为ansible-like系统的参数-存储在
\vars
中的模板)

结果是:

[Pipeline] echo
"asfd"
[Pipeline] echo
"${params.REPOSITORY_NAME}"

groovy.lang.MissingPropertyException: No such property: params for class: Script1
  • 第一个回音证明
    param
    值实际上存在
  • 第二个回音是输入的实际外观
  • 第三个回声应该发出
    asdf
    ,而我得到了异常
有什么想法吗?我已经花了好几个小时了:-(

您可能需要检查:

第一变体 如果您有:
xyz=“REPOSITORY\u NAME”
并且想要参数
REPOSITORY\u NAME
的值,您只需使用:

def xyz = "REPOSITORY_NAME"
echo params."$xyz" // will print the value of params.REPOSITORY_NAME
如果变量
xyz
必须包含包含
参数的完整字符串。
可以使用以下解决方案

@NonCPS
def split(string) {
    string.split(/\./)
}

def xyz = "params.REPOSITORY_NAME"

def splitString = split(xyz)
echo this."${splitString[0]}"."${splitString[1]}"  // will print the value of params.REPOSITORY_NAME
第二变体 如果要将环境变量名称指定为参数,可以使用:

 env.“${params.REPOSITORY_NAME}”
在普通groovy中,
env[params.REPOSITORY\u NAME]
可以工作,但在管道中,这个在沙箱中不起作用

这样,您首先检索
REPOSITORY\u NAME
的值,然后将其用作环境变量的键

直接使用
env.REPOSITORY\u NAME
与尝试使用
REPOSITORY\u NAME
本身作为键不同

例如,假设您有一份名为
MyJob
的工作,其脚本如下:

assert(params.MyParameter == "JOB_NAME")
echo env."${params.MyParameter}"
assert(env."${params.MyParameter}" == 'MyJob')
假设您将
MyParameter
参数设置为
job\u name
,这将在控制台上打印作业名称(MyJob)。两个断言都将通过


请不要忘记先打开一个
节点{}
块,以防您想要检索该节点的环境。

在尝试了所有这些解决方案后,发现这对我的问题有效(听起来与所问的问题非常相似-但不完全确定):


${env[REPOSITORY\u NAME]}

您是否在Jenkins文件中的任何位置声明了您的参数?您看过我的示例了吗?
def-proof=“\”${params.REPOSITORY\u NAME}\“echo-proof
@MattSchuchard?这不等于
env[params.REPOSITORY\u NAME]
?它不起作用。我得到:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Object java.lang.String
签名:staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Object java.lang.String批准此签名可能会引入安全漏洞!建议您拒绝此漏洞。很抱歉,你们都是对的。更新了答案。适用于我的本地Jenkins。env[]语法仅在您的签名未处于沙箱模式(或全局共享库)时才有效。当然,您不需要将其置于双引号中。我在想什么?^^
[Pipeline]echo params.REPOSITORY_NAME==asfd
assert(params.MyParameter == "JOB_NAME")
echo env."${params.MyParameter}"
assert(env."${params.MyParameter}" == 'MyJob')