Дженкинсфайл сравнивает два env

#jenkins #jenkins-pipeline

Вопрос:

Я хочу сравнить два env и запустить условие 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 '

Как правильно это сделать ?


Ответ №1:

[Отказ от ответственности: Не проверено в реальности.]

См. Синтаксис 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()) {
...
 

но, по-видимому, это не так, поэтому просто сравните строки (и, возможно, обрезайте их раньше).

P.S.: Просто из любопытства: откуда ты это <local variable>.toInteger() взял?

found among steps
Как правильно это сделать ?

Ответ №1:

[Отказ от ответственности: Не проверено в реальности.]

См. Синтаксис Groovy, 4.4.1. Интерполяция строк:

Здесь у нас есть строка с заполнителем, ссылающимся на локальную переменную:


Итак, учитывая, что groovy.lang.GString :

Строки в двойных кавычках являются простыми java.lang.String , если нет интерполированного выражения, но являются groovy.lang.GString экземплярами, если присутствует интерполяция.

поддерживает toInteger() , это должно сработать для вас:


но, по-видимому, это не так, поэтому просто сравните строки (и, возможно, обрезайте их раньше).

P.S.: Просто из любопытства: откуда ты это <local variable>.toInteger() взял?