В вашем блоке if есть переменная env.prod
и передача true
в prod
функциональной переменной def prod
, которая отличается. Этот prod
var определен только для doThing
области действия функции и отличается от env.prod
или просто prod
, доступных в коде groovy. Если вы не измените env.prod
, то всегда будет в doThing()
. Либо измените его значение где-нибудь в коде (в зависимости от логики), либо попробуйте просто:
pipeline {
agent {
label 'any'
}
stages {
stage('Foo') {
steps {
doThing('/opt/prod','athos',true)
doThing('/opt/demo','aramis',true)
doThing('/opt/test','porthos')
doThing('/opt/dev','dartagnan')
}
}
}
}
def doThing(def targetDir, def stackName, def prod=false) {
if ( prod == true ) {
sh """
execute-bin \
-Dbin.target=${targetDir} \
-Dbin.stackName=${stackName} \
-Dbin.prod=true
"""
} else {
sh """
execute-bin \
-Dbin.target=${targetDir} \
-Dbin.stackName=${stackName}
"""
}
}
Редактировать
Я постараюсь прояснить это. Я знаю, что вы можете ссылаться на переменные окружения просто по его имени:
Переменные среды доступны из кода Groovy как env.VARNAME
или просто как VARNAME. Вы также можете написать в такие свойства (только
используя env. Префикс):
env.MYTOOL_VERSION = '1,33' узел {ш
'/ usr / local / mytool- $ MYTOOL_VERSION / bin / start'}
Но есть разница между глобальными переменными и переменными, доступными внутри области действия функции. Если бы вы добавили присваивание из переменной doThing()
prod
в глобальную переменную env.prod
, это также сработало бы
def doThing(def targetDir, def stackName, def prod=false) {
env.prod = prod
if ( env.prod == true ) {
sh """
execute-bin \
-Dbin.target=${targetDir} \
-Dbin.stackName=${stackName} \
-Dbin.prod=true
"""
} else {
sh """
execute-bin \
-Dbin.target=${targetDir} \
-Dbin.stackName=${stackName}
"""
}
}