2017-02-04 2 views
0

Я бегу Дженкинс сборки Flow Plugin со следующим сценарием:Дженкинс Groovy Parallel Variable не работает

def builds = [:] 

[1,2].each { 
    builds[it] = { build("test", parm: ("$it")) } 
} 

parallel builds 

Однако, в то время как хэш (билды [он]) получает правильно заполняется, то PARM всегда нуль , Я также пробовал следующее:

builds[it] = { build("test", parm: $it)) } 
builds[it] = { build("test", parm: it)) } 

Но оно всегда равно нулю.

Может ли кто-нибудь дать мне какие-либо указания относительно того, как я могу использовать $ it или любую другую переменную в заданиях построения, пожалуйста.

ответ

2

Похоже, вы работаете в ошибку в модуле Build Flow (я видел аналогичные проблемы с Pipeline DSL). Нет эксперта, но, похоже, он связан с закрытыми затворами и областью видимости внешних переменных, которые предоставляются конструкциями each или foreach. Например (smilar в вашем примере):

def builds = [:] 

[1,2].each { 
    builds[a] = { print "${it}\n" } 
} 

parallel builds 

печатает:

null 
null 

в то время:

def builds = [:] 

[1,2].each { 
    def a = it; 
    builds[a] = { print "${a}\n" } 
} 

parallel builds 

напечатает

1 
2 

, как и ожидалось. Итак, используйте локальную переменную, чтобы сохранить значение итерации.

+0

Удивительный, не понял, что была ошибка, но ваше решение отлично работает, спасибо. – bazza2000

+1

Возможно, это не ошибка, и это похоже на общий характер, нашел это сообщение в блоге о проблеме http://blog.freeside.co/2013/03/29/groovy-gotcha-for-loops-and-closure-scope / –

0

Согласно build flow documentation я считаю, что синтаксис должен быть:

builds[it] = { build("test", param1: it) } 

т.е. имя param1 аргумент должен буквально прочитать param с последующим последовательным целым числом, начиная с 1

+0

Я до сих пор не получил никакого значения параметра, переданного на задание – bazza2000

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