簡體   English   中英

從 Jenkins Groovy Script-Console 編寫文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM