我有一个字符串中的Jenkins全局变量-如何计算它?
我需要接受所有类型的全局Jenkins变量作为字符串(基本上作为ansible-like系统的参数-存储在我有一个字符串中的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值实际上存在 第二个回音是输入的实
\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')