#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()
взял?