我需要接受所有类型的全局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
值确实存在 - 第二个回波是输入的实际样子
- 第三个回波应该发出CCD_ 3,而我得到了异常
有什么想法吗?我已经花了几个小时了:-(
您可能需要检查:groovy:有一个字段名,需要设置值和don';我不想使用交换机
第一种变体
如果您有: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}”
在普通的groovy中,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')
这将把作业的名称(MyJob(打印到控制台,假设您已经将MyParameter
参数设置为JOB_NAME
。两个断言都将通过。
请不要忘记先打开一个node{}
块,以防您想检索该节点的环境。
在尝试了所有这些解决方案后,发现这适用于我的问题(听起来与所问的问题非常相似-但不完全确定(:
${env[REPOSITORY_NAME]}