Вы используете Функция множественного назначения Groovy неправильно.Это работает, когда вы присваиваете коллекцию значений списку новых переменных.Вы не можете использовать этот тип назначения для назначения значений существующему объекту.Ваш код также дает сбой при выполнении в простом Groovy:
def env = [foo: 'bar']
(env.var1, env.var2, env.var3) = my_func()
println env
def my_func(){
def a =10
def b =10
def c =10
return [a,b,c]
}
Вывод:
1 compilation error:
expecting ')', found ',' at line: 3, column: 14
В среде Jenkins, env
переменная представлена не картой, а EnvActionImpl
объект , что означает, что он даже не поддерживает plus()
или putAll()
методы.Он переопределяет только методы getProperty()
и setProperty()
, поэтому вы можете получить доступ к свойствам с env.name
точечной нотацией.
Решение
Самое простое решение вашей проблемы - правильно использовать множественное назначение изатем установите переменные env из переменных.Рассмотрим следующий пример:
node {
stage("A") {
def (var1, var2, var3) = my_func()
env.var1 = var1
env.var2 = var2
env.var3 = var3
}
stage("B") {
println env.var1
}
}
def my_func() {
def a = 10
def b = 10
def c = 10
return [a, b, c]
}
Имейте в виду, что переменные var1
, var2
и var3
не могут уже существовать в текущей области видимости, иначе компилятор сгенерирует исключение.