[英]How to pass variables into Groovy script executed in Jenkins pipeline parameter?
[英]Jenkins Pipeline / Groovy Script with undefined variables
我正在嘗試將我的大型多配置Jenkins作業轉換為管道語法,因此除其他外,我可以將它分成多個節點並將我的多個階段合並為一個作業。 這是我遇到麻煩的部分:
def build_test_configs = [:]
def compilers = ['gnu', 'icc']
def configs = ['debug', 'default', 'opt']
for (int i = 0; i < configs.size(); i++) {
for (int j = 0; j < compilers.size(); j++) {
def node_name = ""
if ("${compilers[j]}" == "gnu") {
node_name = "node001"
} else {
node_name = "node002"
}
build_test_configs["${node_name} ${configs[i]}"] = {
node ("${node_name}") {
stage("Build Test ${node_name} ${compilers[j]} ${configs[i]}") {
unstash "${node_name}-tarball"
sh "$HOME/software/jenkins_scripts/nightly.sh ${configs[i]} ${compilers[j]} yes $WORKSPACE"
}
}
}
}
}
parallel build_test_configs
我的問題是${compilers[j]
和$configs[i]
是未定義的,當我到達我試圖在第13行建立build_test_configs
字典的build_test_configs
時。看來第8行的檢查是工作得很好。
我本身沒有錯誤消息。 該腳本不會產生任何運行時錯誤。 意外的輸出是階段的名稱是:
而且nightly.sh
腳本也會傳遞null
參數。
我認為這是預期的行為:Jenkins Pipeline腳本是用Groovy編寫的,但實際執行的是對它的轉換(他們使用的術語是“繼續傳遞樣式轉換”)。 例如,某些部分將在主節點上運行,某些部分在從節點上運行。
這涉及到很多神奇的東西,但在我們的層面上,這意味着我們必須使用我們使用的語法和構造中的約束。
請參閱本文的“基礎知識”段落 :
要了解管道行為,您必須了解有關其執行方式的幾點。
另請參閱JENKINS-41335討論腳本中變量的支持。
編輯:嗯,是的,正如評論中所指出的,新的聲明性模型允許定義一個環境 ,其變量將以您需要的方式傳遞...不知道如何在沒有JENKINS-41335的情況下在腳本管道中執行此操作似乎進一步的演變現在將在宣告土地上發生:/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.