[英]Write a File from Jenkins Groovy Script-Console
我正在嘗試找到一種使用 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 直接來自該腳本控制台的命令。
謝謝 :)
["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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.