Подтвердить что ты не робот

Groovy.each только один раз повторяется

script не выполняет итерацию по всем значениям массива 'modules'.

class Module {
    public String name = '';
    public Boolean isCustom = false;
    public Module(String name, Boolean custom){
        this.name = name;
        this.isCustom = custom;
    }
}

//creates array from the ext_module env var
modules = [];
EXT_MODULE.split(',').each { 
    modules.add(new Module(it, false));
}


println modules;
modules.each {  
    println "MODULE NAME ::::: ${it.name}"
    if(it.isCustom)
    {
        println "install custom";
    } else {
        println "install non custom";
    }
};

Это результат запуска. Массив отображает 4 элемента, но код внутри черного цвета выполняется только один раз.

Запуск: Печать сообщения [Модуль @71f09325, Модуль @e1ddb41, Модуль @7069a674, Модуль @1f68f952]
Запуск: Печать сообщения ИМЯ МОДУЛЯ::: puppetlabs-ntp
Запуск: Печать сообщения установить нестандартные
Запуск: завершение рабочего процесса
Закончено: УСПЕХ

4b9b3361

Ответ 1

Сообщения "Запуск: сообщение печати" и "Запуск: конец рабочего процесса" указывают, что вы используете новый плагин рабочего процесса: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin. Этот плагин в настоящее время имеет ошибку, вызывающую по крайней мере некоторые итерации Groovy, включающие закрытие, которое должно быть прервано после одной итерации: https://issues.jenkins-ci.org/browse/JENKINS-26481

Ответ 2

Обходной путь - просто использовать старую школу для цикла (code below). Кроме того, NonCPS - это еще один способ обхода проблемы. Для этого есть открытая проблема. См. Здесь: https://issues.jenkins-ci.org/browse/JENKINS-26481

Обновление, 24 октября 2016 г.

/**    * Сбрасывает среду varibles в журнал, используя старую школу для цикла.   */

import com.cloudbees.groovy.cps.NonCPS

def version = '1.0'

@NonCPS
def dumpEnvVars() {
  def str = "Dumping build environment variables...\n"
  for (Map.Entry<String, String> entry : currentBuild.build().environment) {
    str += "    ${entry.key} = ${entry.value}\n"
  }
  echo str
}

return this;

Ответ 3

По состоянию на вчерашний день новый плагин Pipeline был доставлен в версии 2.0 и исправил эту проблему.

.each теперь работают закрытие, но .collect повторяется только один раз.

Ответ 4

Аннотации NonCPS работают для меня на моем этапе библиотеки. Например:

import com.cloudbees.groovy.cps.NonCPS

@NonCPS
def call(ary) {
  ary.each {
    it.whatever
  }

}