我正在使用 Jenkins 腳本管道并且無法理解如何在彼此中嵌套環境變數,這是一個 MWE:
// FROM https://jenkins.io/doc/pipeline/examples/#parallel-multiple-nodes
def labels = []
if (HOST == 'true') {
labels.add(<HOSTNAME>)
}
def builders = [:]
for (x in labels) {
def label = x
builders[label] = {
ansiColor('xterm') {
node(label) {
stage('cleanup') {
deleteDir()
}
stage('build') {
env.test = "TESTA"
env.intern = '''
TEST = "${env.test}"
'''
sh '''
echo $intern
printenv
'''
}
}
}
}
}
parallel builders
這里的想法是env.test包含 value TESTA,它設定env.intern為TEST = TESTA這是我想要發生的事情。在此之后,代碼只是列印出值。可悲的結果是TEST = "${env.test}"。
如何在 Jenkins 腳本化管道中使用嵌套字串環境變數?
uj5u.com熱心網友回復:
此處的語法差異在于 Groovy 中的文字字串與內插字串與 shell 步驟方法中的 shell 解釋器。
": Groovy 中的內插字串': Groovy 中的文字字串和 shell 解釋器中的內插字串
本質上,一個 Groovy 變數"在管道執行中內插,環境變數"在管道執行內'和 shell 解釋器內內插(并且管道內也必須在env物件內訪問,但是是第一類變數運算式在外殼步驟方法中)。
因此,我們可以用以下方法固定分配的值env.intern:
env.intern = "TEST = ${env.test}"
其中分配的值env.test將插入 Groovy 字串中并分配給鍵env處的管道物件intern。然后,shell 解釋器也可以在 shell 步驟方法中訪問它,并且管道的其余部分已經正確并且將按預期運行。
uj5u.com熱心網友回復:
請嘗試以下操作:
env.intern = "TEST = ${env.test}"
正如您現在設定的那樣,實際結果env.intern將是"TEST= ${env.test}". 只要你在設定env.test之前設定env.intern你應該是好的。另外,值得注意的是,如果您更改了 的值,env.test那么您需要重置 的值,env.intern否則它將保持env.test其設定的原始值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/348753.html
上一篇:在宣告性管道中并行運行
