У меня есть следующий код Groovy:
// @NonCPS
def printList(params) {
def jobs = [:]
println params
params.split(",").each { param ->
println "Param: ${param}"
}
}
text = "Foo,Bar,Baz,Qux"
printList(text)
который работает, как и ожидалось, при вызове из команды groovy
:
$ groovy test.groovy
Foo,Bar,Baz,Qux
Param: Foo
Param: Bar
Param: Baz
Param: Qux
Хотя при тестировании в рамках задания без песочницы в Jenkins у меня разные результаты:
[Pipeline] echo
Foo,Bar,Baz,Qux
[Pipeline] echo
Param: Foo
[Pipeline] End of Pipeline
Проблема в том, что печатается только первый элемент, а не все.
Однако код работает должным образом в Jenkins только при использовании вспомогательного метода @NonCPS
.
Почему @NonCPS
необходимо для правильного перебора списка элементов? И есть ли обходной путь без использования @NonCPS
(особенно в изолированной среде)?