list.py 的輸出是 ['test1','test2','test3']
當我在 jenkins 宣告式管道中使用 list.py 來創建動態階段時,
output = sh(script: "python3 list.py", returnStdout: true )
for(int i=0; i < output.size(); i )
{
stage(output[i])
{
echo output[i]
}
}
我得到的輸出是第 1 階段:[
階段 2 : t
第三階段:e
第 4 階段: s ....... 依此類推,它逐個元素拆分
但實際輸出應該是,stage 1: test1
第 2 階段:測驗 2
第 3 階段:test3
如何獲取此輸出,如何拆分以僅獲取 jenkins 宣告性管道中串列的值????
uj5u.com熱心網友回復:
output是一個字串變數而不是一個串列。( output = "['test1','test2','test3']")
解決方案:轉換output為串列
output = sh(script: "python3 list.py", returnStdout: true ).replace('[','').replace("'",'').replace(']','').split(',')
for(int i=0; i < output.size(); i ) {
stage(output[i]) {
echo output[i]
}
}
uj5u.com熱心網友回復:
sh(或bat) 步驟回傳的輸出將始終是一個字串,然后您可以根據需要將其轉換為任何其他 groovy 物件。
因為您的輸出實際上是 groovy 格式,所以您可以使用該evaluate函式來運行輸出并將其作為 groovy 串列獲取。
就像是:
def output = sh script: "python3 list.py", returnStdout: true
def values = evaluate "return ${output}"
values.each {
stage(it) {
echo it
}
}
您也可以使用,def values = Eval.me("['test1','test2','test3']")但需要管理員批準才能使用該Eval方法。
另一種方法是自己決議字串,方法是從輸出字串中洗掉所有[ ]和'字符,然后用逗號 ( ,)拆分它。
就像是:
def output = sh script: "python3 list.py", returnStdout: true
def values = output.replaceAll(/[\[\]']/,'').tokenize(',')
values.each {
stage(it) {
echo it
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/371286.html
上一篇:詹金斯:在測驗時自動重新設定主節點,然后在使用jenkins管道測驗成功時推送
下一篇:具有帶空格的字串的選擇引數
