我需要接受所有类型的全局Jenkins变量作为字符串(基本上是像ansible这样的系统的参数-存储在\vars
中的模板)。
def proof = "\"${params.REPOSITORY_NAME}\""
echo proof
def before = "\"\${params.REPOSITORY_NAME}\""
echo before
def after = Eval.me(before)
echo after
结果是:
[Pipeline] echo
"asfd"
[Pipeline] echo
"${params.REPOSITORY_NAME}"
groovy.lang.MissingPropertyException: No such property: params for class: Script1
param
值确实存在。 asdf
,但我得到了例外。有什么想法吗?我很忙:-(
答案 0 :(得分:1)
您可能要检查: groovy: Have a field name, need to set value and don't want to use switch
如果您有:xyz="REPOSITORY_NAME"
并且想要参数REPOSITORY_NAME
的值,则可以简单地使用:
def xyz = "REPOSITORY_NAME"
echo params."$xyz" // will print the value of params.REPOSITORY_NAME
如果变量xyz
必须包含完整的字符串,包括params.
,则可以使用以下解决方案
@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}”
在普通的常规env[params.REPOSITORY_NAME]
中可以使用,但是在管道中,此功能在沙盒中不能使用。
这样,您首先要检索REPOSITORY_NAME
的值,然后将其用作环境变量的键。
直接使用env.REPOSITORY_NAME
不同于尝试使用REPOSITORY_NAME
本身作为密钥。
例如说您有一个名为MyJob
的工作,其脚本如下:
assert(params.MyParameter == "JOB_NAME")
echo env."${params.MyParameter}"
assert(env."${params.MyParameter}" == 'MyJob')
这将在您将MyParameter
参数设置为JOB_NAME
的情况下将作业的名称(MyJob)打印到控制台。这两个断言都会通过。
如果您要检索该节点的环境,请不要忘记先打开一个node{}
块。
答案 1 :(得分:0)
尝试了所有这些解决方案后,发现这可以解决我的问题(听起来与所问的问题非常相似-尽管不确定):
${env[REPOSITORY_NAME]}