Я пытаюсь создать Jenkinsfile
для обработки различных шагов в среде prod vs dev.Я пытался использовать шаблон anyOf
с expression
, который проверяет переменную окружения JOB_URL
, чтобы определить, какой сборке сервер / инструкция по сборке следовать.
Jenkinsfile в конечном итоге ищетчто-то вроде следующего:
stage('In Prod') {
when {
allOf {
expression { params.P1 == 'x' }
expression { params.P2 == 'y' }
expression { env.JOB_URL.contains('prod_server.com') }
}
}
...
}
stage('In Dev') {
when {
allOf {
expression { params.P1 == 'x' }
expression { params.P2 == 'y' }
expression { env.JOB_URL.contains('dev_server.com') }
}
}
...
}
Ожидаемое поведение:
- В Dev -> Run
In Dev
step - В Prod -> Run
In Prod
step
Фактическое поведение:
- In Dev -> run
In Prod
AND In Dev
step - In Prod -> run
In Prod
step
Да, я проверил, чтобы убедиться, что JOB_URL
на dev
не содержит prod_server.com
.
Я также попытался !env.JOB_URL.contains('dev_server.com')
в качестве дополнительного выражения дляшаг prod
с тем же результатом.
Я знаю только достаточно groovy
, чтобы пройти через Jenkins, и я немного новичок в синтаксисе конвейера Jenkins, так что, возможно, я неправильно понял поведение здесь, но из чегоЯ понимаю из документации Jenkins expression
:
при возврате строк из ваших выражений, которые ониst может быть преобразовано в логическое значение или вернуть значение null, чтобы получить значение false.Простое возвращение «0» или «false» будет по-прежнему принимать значение «true».
И в качестве проверки работоспособности я подтвердил, что в документации groovy
говорится, что contains
должен возвращатьсяa boolean
.