首页 > 解决方案 > Jenkinsfile 比较两个环境

问题描述

我想比较两个环境并根据结果运行 iff 条件。我试过以下

            steps {

                script {
                    if (${BUILD_NUMBER}.toInteger() != ${DEPLOY_BUILD_NUMBER}.toInteger()) {
                        echo "DEPLOY_BUILD_NUMBER not equal to BUILD_NUMBER."
                        sh "exit 1"
                    }
                }
             .....
             }

但因以下错误而失败

java.lang.NoSuchMethodError: No such DSL method '$' found among steps

这样做的正确方法是什么?

标签: jenkinsjenkins-pipeline

解决方案


[免责声明:未经实际测试。]

请参阅Groovy 语法,4.4.1。字符串插值

在这里,我们有一个带有引用局部变量的占位符的字符串:

def name = 'Guillaume' // a plain string
def greeting = "Hello ${name}"

assert greeting.toString() == 'Hello Guillaume'

所以,鉴于groovy.lang.GString

java.lang.String如果没有插值表达式,双引号字符串是普通的,但groovy.lang.GString如果存在插值,则为实例。

支持toInteger()这应该适合你:

...
if ("${BUILD_NUMBER}".toInteger() != "${DEPLOY_BUILD_NUMBER}".toInteger()) {
...

但显然它没有,所以只需比较字符串(并可能在之前修剪它们)。

PS:只是出于好奇:你从哪里得到<local variable>.toInteger()的?


推荐阅读