我在尋求幫助,瞭解Groovy閉包發生了什麼,以及什麼是「正確」的做法。我有一個Jenkins管道,我在5個平行分支中調用子程序;它需要一個參數,其實際值是一個字符串常量 - 在並行分支的每個調用中不同的參數。我所看到的是,所有5個處決接收的最後並聯支路命名字符串常量:Jenkins並行管道:參數塊中的所有子例程調用都從最後一個塊傳遞參數
段:
def build_if_needed = { project ->
println "build_if_needed: $project"
// ultimately this will kick off a build job...
}
parallel (
aaa : { build_if_needed('aaa')},
bbb : { build_if_needed('bbb')},
ccc : { build_if_needed('ccc')},
ddd : { build_if_needed('ddd')},
eee : { build_if_needed('eee')},
)
輸出:
[Pipeline] parallel
[Pipeline] [aaa] { (Branch: aaa)
[Pipeline] [bbb] { (Branch: bbb)
[Pipeline] [ccc] { (Branch: ccc)
[Pipeline] [ddd] { (Branch: ddd)
[Pipeline] [eee] { (Branch: eee)
[Pipeline] [aaa] echo
[aaa] build_if_needed: eee
[Pipeline] [aaa] }
[Pipeline] [bbb] echo
[bbb] build_if_needed: eee
[Pipeline] [bbb] }
[Pipeline] [ccc] echo
[ccc] build_if_needed: eee
[Pipeline] [ccc] }
[Pipeline] [ddd] echo
[ddd] build_if_needed: eee
[Pipeline] [ddd] }
[Pipeline] [eee] echo
[eee] build_if_needed: eee
[Pipeline] [eee] }
[Pipeline] // parallel
[Pipeline] End of Pipeline
我期待的參數值傾倒在[aaa]中是'aaa',而不是'eee'。它是一個固定的字符串常量,作爲參數傳遞。爲什麼所有5次執行的'build_if_needed'從最終的並行調用中接收到字符串常量?我錯過了什麼?
有沒有辦法做我想做的事情?
我仍然不明白上面顯示的行爲,但我能夠通過遵循本文中的邏輯來解決它http://jenkins-ci.361315.n4.nabble.com/Generating-parallel-flow-用 - 建設 - 流量 - 插件 - td4687604.html。 –