Jenkins中的Groovy脚本:评估字符串



我需要在Jenkins Groovy 中重现以下Python代码

city='Petersburg'
varname='city'
varvalue=eval(varname)
print(varvalue) # prints 'Petersburg'

也就是说,我需要将一个变量的值分配给另一个变量,知道源变量的名称为字符串。请提供用JenkinsGroovy编写的相同代码(我可以将其插入到Jenkinsfile中(。补充细节:基于这篇文章,我尝试了groovy eval类

city='Petersburg'
varname='city'
varvalue=Eval.me(varname)
println(varvalue)

它在Jenkins控制台输出中输出以下错误

hudson.remoting.ProxyException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: expecting ''', found '<EOF>' @ line 1, column 15.
varvalue='city

我还尝试了以下代码(使用GroovyEval作为Python执行(

city='Petersburg'
varname='city'
Eval.me('varvalue='' + varname)
println(varvalue)

whitch产生了相同的错误

hudson.remoting.ProxyException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: expecting ''', found '<EOF>' @ line 1, column 15.
varvalue='city

Eval.me函数在单独的执行上下文中评估脚本,因此在访问之前无法访问您定义的变量(请参阅Eval文档(
因此,要使用它,您必须通过参数的绑定,这样它才能识别它,类似于:

city='Petersburg'
varname='city' 
varvalue=Eval.me('city', 'Petersburg', varname)
println(varvalue)​

但是传递参数绑定可能与您试图实现的目标相矛盾,因此您可以使用evaluate函数,该函数允许使用此脚本绑定作为变量范围来动态评估groovy表达式。类似于:

city='Petersburg'
varname='city' 
varvalue=evaluate(varname)
println(varvalue)​

您也可以使用varvalue=evaluate varname,因为groovy允许在使用单个参数运行函数时省略括号。

最新更新