Jenkins Pipeline выдает ошибки при принятии нескольких значений из Groovy-метода - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь принять несколько значений из метода 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()

1 Ответ

0 голосов
/ 14 ноября 2018

Вы используете Функция множественного назначения 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 не могут уже существовать в текущей области видимости, иначе компилятор сгенерирует исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...