я сократил некоторые неожиданное поведение (для меня) в Дженкинс Pipeline заводной к следующему: Создание проекта Дженкинс трубопроводов со следующим кодом сценария:Неожиданное поведение в Дженкинс Pipeline Groovy: .each не переборе
def a = ['a','b','c']
def ctx = [ alljobs: a ]
def say(s) {println "$s"}
@NonCPS
def fn(ctx) {
say "ctx.alljobs=$ctx.alljobs"
ctx.alljobs.each { j -> say "$j" }
say "done"
}
say "before fn()"
fn(ctx)
say "after fn()"
Когда я выполняю это в Groovy переводчика за пределами Дженкинс (менее @NonCPS), я получаю выход я ожидал:
before fn()
ctx.alljobs=[a, b, c]
a
b
c
Done.
after fn()
Когда я запускаю работу Дженкинс трубопроводов я вижу следующее:
Started by user John Elion (john.elion)
[Pipeline] echo
before fn()
[Pipeline] echo
ctx.alljobs=[a, b, c]
[Pipeline] echo
after fn()
[Pipeline] End of Pipeline
Finished: SUCCESS
.each не выполняется вообще (я также видел, как он выполнялся один раз - это то, что побудило меня попытаться свести к простому фрагменту кода), и функция отбрасывается - скажем, после того, как цикл не печатается, но высказывается после завершения функции.
Я попытался обернуть различные блоки в try-catch, чтобы увидеть, произошло ли исключение, но не повезло. Я что-то упускаю? Неужели я ошибаюсь, ожидая поведения, которое я вижу в отличном переводчике за пределами Дженкинса?
Ошибка трубопровода? Или я чего-то не хватает?
Я выполняю Jenkins v2.44. Это плотно закрытая среда; Я знаю, что он работает на каком-то Linux; Я считаю, что у меня есть Workflow-cps Pipeline: Groovy 'v.2.26, и я не уверен, какие другие конвейеры или другие плагины имеют отношение.
спасибо.
Одна из нескольких ситуаций где Дженкинс не предоставляет достаточной информации (или любой), если вы сделали что-то не так в своем скрипте. –