2016-04-01 2 views
3

У меня есть простой заводной список в моем трубопроводе, который добавляет некоторые карты:Итерация заводной список в Дженкинс Pipeline DSL

def componentList = [] 

def componentMapEntry1 = [:] 
componentMapEntry1['componentName']="Dashboard_Core" 
componentList << componentMapEntry1 

def componentMapEntry2 = [:] 
componentMapEntry2['componentName']="Dashboard_Equities" 
componentList << componentMapEntry2 

def cme3 = [:] 
cme3["componentName"] = "home" 
componentList << cme3 

Когда работа выполнена, я проверка размера

echo "size of list "+componentList.size() 

...

[Pipeline] echo 
size of list 3 

Я могу распечатать список

println componentList 

...

[Pipeline] echo 
[{componentName=Dashboard_Core}, {componentName=Dashboard_Equities}, {componentName=home}] 

я могу сделать для петли и перебирать список

for (i = 0; i <componentList.size(); i++) { 
    println componentList[i] 
} 

...

[Pipeline] echo 
{componentName=Dashboard_Core} 
[Pipeline] echo 
{componentName=Dashboard_Equities} 
[Pipeline] echo 
{componentName=home} 

До сих пор все хорошо.

Проблема возникает, когда я пытаюсь использовать стандартный заводной итератор:

componentList.each { 
    println "adding "+it.componentName 
} 

В этом случае я получаю только первый элемент

[Pipeline] echo 
adding Dashboard_Core 

Почему я получаю только первый элемент здесь? Я пробовал это несколько раз, и использование .each() похоже только возвращает первый элемент. Когда я запускаю тот же код в командной строке, он, естественно, iterates as groovy would expect. Является ли функция .each {} переписываться каким-то образом?

+0

Я сомневаюсь, что ...: '[[имя_компьютера: Dashboard_Core], [имя_компьютера: Dashboard_Equities], [имя_компьютера: 'home']]. Each {println" добавление $ it.componentName "}' работайте, как ожидалось? Как насчет '['Dashboard_Core', 'Dashboard_Equities', 'home']. Collect {[имя_компьюта: it]} .each {println" добавление $ it.componentName "}'? –

+0

Первый нет, он показывает только первый элемент, как мой. Вторая неудача в среде песочницы: org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: неклассифицированное поле java.util.LinkedHashMap $ Entry componentName – Neil

+0

Сколько лет версии groovy на ваших серверах? Мои деньги на древнем ... –

ответ

6

Метод each на закрытии еще не работает в сценарии Pipeline. Исправлено исправление. Между тем используйте цикл C-style for.

+0

Или создайте отдельный метод и сделать его @NonCPS – Rik

+1

Проблема все еще не работает (Pipeline Plugin 2.4). Кто-нибудь знает, когда эта проблема будет исправлена? –

Смежные вопросы