我正在嘗試找到一種使用 Jenkins Groovy Script-Console 將一些內容寫入檔案的方法。
用例:我們的 CI 使用在所有節點之間共享的卷(依次映射到 EFS)來管理一些狀態機。但是 - 在我們的 CI groovy 共享庫中發現錯誤后,我發現一些狀態檔案已損壞,需要將更正的值寫入它們,同時修復錯誤。
但是,我可以使用 ssh 連接來做到這一點,因為我們正在抽象出我們試圖從中退出的作業人員,并且僅從腳本控制臺和/或 ci 作業中管理我們自己。
我嘗試了所有這些形式,但都失敗了:
"echo 'the text' > /mnt/efs-ci-state/path/to/the-state-file.txt".execute().text
"""
cat <<<EOF > /mnt/efs-ci-state/path/to/the-state-file.txt
the text
EOF
""".execute().text
"bash -c 'echo the text > /mnt/efs-ci-state/path/to/the-state-file.txt'".execute().text
"echo 'the text' | tee /mnt/efs-ci-state/path/to/the-state-file.txt"
有人可以告訴我這樣做的方法嗎?
我也很感謝解釋為什么上面的表單不起作用和/或提示如何執行包括管道和/或 stdio 直接來自該腳本控制臺的命令。
謝謝 :)
uj5u.com熱心網友回復:
["bash", "echo the text > /mnt/efs-ci-state/path/to/the-state-file.txt"].execute().text
或使用普通的groovy:
new File('/mnt/efs-ci-state/path/to/the-state-file.txt').text = "echo the text"
為什么不作業:
選項 1、2、4:回聲和管道是 shell/bash 的一個特性——沒有 bash 它將無法作業
選擇3,你有
c echo和c沒有一個有效的命令使用陣列來執行復雜的命令并與
bash主要部分分離
如果您想捕獲和驗證,我建議您使用這種代碼 stderr
["bash", 'echo my text > /222/12345.txt'].execute().with{proc->
def out=new StringBuilder(), err=new StringBuilder()
proc.waitForProcessOutput(out, err)
assert !err.toString().trim()
return out.toString()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/318451.html
上一篇:兩個函式在C中共享相同的簽名
