Jenkins运行Groovy脚本遇MissingPropertyException(COUNTER属性)错误求助
解决Groovy脚本中
MissingPropertyException: No such property: COUNTER错误 错误原因
Groovy的三重双引号字符串(""" """)会自动进行变量插值,你写的shell脚本里的$COUNTER、$numSubscriptionId被Groovy误认为是Groovy环境下的变量,但这些变量并没有在Groovy代码中定义,因此抛出MissingPropertyException。
解决方案
有两种可行的修改方式:
方式1:将shell脚本的三重双引号替换为三重单引号
单引号字符串在Groovy中不会进行变量插值,所有内容会原封不动传递给shell执行:
def runAzureMockExecution(Map m = [:]) { Map args = [ ENDPOINT : "", action : "", vmCount : "", numSubscriptionId : "", ] args << m println(args) def ENDPOINT = args.ENDPOINT def action = args.action def vmCount = args.vmCount def numSubscriptionId = args.numSubscriptionId sh(''' arr=(); COUNTER=0 while [ $COUNTER -lt $numSubscriptionId ]; do suffix=$RANDOM arr+=($suffix" ") let COUNTER=COUNTER+1 done ''') } runAzureMockExecution( ENDPOINT: "https://sample-url.com", action: "ADD", vmCount: 1, numSubscriptionId: 5 )
方式2:对shell变量的$符号进行转义
在每个shell变量的$前添加反斜杠,告诉Groovy这是shell的变量,不要进行插值:
def runAzureMockExecution(Map m = [:]) { Map args = [ ENDPOINT : "", action : "", vmCount : "", numSubscriptionId : "", ] args << m println(args) def ENDPOINT = args.ENDPOINT def action = args.action def vmCount = args.vmCount def numSubscriptionId = args.numSubscriptionId sh(""" arr=(); COUNTER=0 while [ \$COUNTER -lt \$numSubscriptionId ]; do suffix=\$RANDOM arr+=(\$suffix" ") let COUNTER=COUNTER+1 done """) } runAzureMockExecution( ENDPOINT: "https://sample-url.com", action: "ADD", vmCount: 1, numSubscriptionId: 5 )
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

