Jenkins管道在接受groovy方法中的多个值时出错

Jenkins管道在接受groovy方法中的多个值时出错,jenkins,groovy,Jenkins,Groovy,我正在尝试接受来自groovy方法的多个值进入Jenkins管道,并不断地遇到管道工作流错误,任何关于我在这里做错了什么的指针都将受到极大的赞赏 (env.var1, env.var2, env.var3) = my_func() def my_func(){ def a =10 def b =10 def c =10 return [a, b, c] } 我发现以下错误: expecting ')', found ',' @(env.var1, env.var2, env

我正在尝试接受来自groovy方法的多个值进入Jenkins管道,并不断地遇到管道工作流错误,任何关于我在这里做错了什么的指针都将受到极大的赞赏

(env.var1, env.var2, env.var3) = my_func()

def my_func(){
  def a =10
  def b =10
  def c =10
  return [a, b, c]
}
我发现以下错误:

expecting ')', found ','  @(env.var1, env.var2, env.var3) = my_func()
您使用的功能不正确。当您将一组值分配给一组新变量时,它会起作用。不能使用此类型的指定将值指定给现有对象。在普通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
变量不是由映射表示的,而是表示它甚至不支持
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
变量不能已经存在于当前作用域中,否则编译器将抛出异常