2011-09-23 91 views
2

我在Jenkins中使用了一個shell腳本,它在某個點使用curl將文件上載到服務器。我希望看到產生的任何捲曲產生,但也檢查它是否是我期望的輸出。如果不是,那麼我想將shell錯誤代碼設置爲> 0,這樣Jenkins就知道腳本失敗了。在Jenkins中從curl獲取shell錯誤代碼,同時仍然在控制檯中顯示輸出

我第一次嘗試使用curl -f,但是這會導致在上傳失敗並且錯誤輸出永遠不會到達客戶端時立即切斷管道。然後我試圖這樣的事情:

curl ...params... | tee /dev/tty | \ 
    xargs -I{} test "Expected output string" = '{}' 

此作品從一個正常的SSH外殼,但在詹金斯控制檯輸出我看到:

tee: /dev/tty: No such device or address 

我不知道這是爲什麼,因爲我認爲詹金斯是使用正常的SSH shell與slave進行通信。在任何情況下,整個xargs +測試的東西都讓我覺得有點破解。

有沒有一種方法可以在Jenkins中實現這一點,以便我可以看到輸出並測試它是否與特定的字符串匹配?

回答

3

當Jenkins通過SSH與slave通信時,沒有終端分配,所以沒有/dev/tty設備用於該進程。

也許你可以把它發送到/dev/stderr而不是?它將成爲交互式會話中的終端和非交互式會話中的一些日誌文件。

+1

我仍然不明白爲什麼/ dev/stdout不起作用,但是謝謝/ dev/stderr工作正常並寫入Jenkins控制檯。 –

+0

rundeck是一樣的 – KCD

0

您是否想過使用Publish over SSH Plugin而不是使用捲曲?可以爲你節省一些頭痛。

如果您只是將文件從主設備複製到從設備,那麼還有一個插件,copy to slave Plugin

不能寫任何評論,所以我不得不張貼它作爲答案。

+0

我不能通過SSH發佈,但如果有辦法做到這一點作爲HTTP POST,那麼這可能是一個有趣的選擇。我看了一下Jenkins的插件列表,但沒有看到我跳出來。 –

相關問題