Jenkins管道中的Groovy字符串比较

mc8*_*c88 1 groovy jenkins-pipeline

我正在尝试比较詹金斯管道中的两个字符串。代码大致如下所示:

script {

def str1 = 'test1.domainname-test.com'
def str2 = 'test1.domainname-test.com'

if ( str1 == str2 ) {
    currentBuild.result = 'ABORT'
    error("TENANT_NAME $TENANT_NAME.domainname-test.com is already  defined in domainname-test.com record set. Please specify unique name. Exiting...")
}

}
Run Code Online (Sandbox Code Playgroud)

由于简单起见,str1由前面的命令提供。我收到此错误:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field java.lang.String domainname
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我也尝试过equals方法,结果相同。好像它粘在那些圆点上,认为这是某种性质。提前致谢

Szy*_*iak 7

您缺少TENANT_NAME变量名周围的大括号。在您的示例中:

error("TENANT_NAME $TENANT_NAME.domainname-test.com is already  defined in domainname-test.com record set. Please specify unique name. Exiting...")
Run Code Online (Sandbox Code Playgroud)

$标志适用于TENANT_NAME.domainname。由于TENANT_NAME是字符串,当您尝试domainname从String类访问属性时,Groovy解释了以下部分,并且您没有找到这样的字段:字段java.lang.String域名异常。

为避免此类问题,请用包裹您的变量名,这样{}就可以了。

error("TENANT_NAME ${TENANT_NAME}.domainname-test.com is already  defined in domainname-test.com record set. Please specify unique name. Exiting...")
Run Code Online (Sandbox Code Playgroud)