2012-07-26 127 views
8

我正在編寫一些Linux shell腳本來移動一些代碼,如果這些腳本可以交互的話,它會很好,很簡單。Jenkins如何處理交互式Shell腳本?

缺點是我想在Jenkins中執行這些腳本中的一些,並且我不完全確定Jenkins如何處理腳本中的用戶提示。我一直無法找到這方面的很多信息,也沒有足夠的資源來進行測試,所以我們將不勝感激。

謝謝你們

+0

您可能想查看[expect(1)](http://linux.die.net/man/1/expect)。 – 2012-07-26 16:38:43

+0

謝謝。我一直在使用期望,但做我想做的事似乎有一些奇怪的變通辦法,我寧願避免 – degausser 2012-07-26 17:22:24

+0

這是一個經典問題。互動的東西在人類呼叫者的有限意義上是很好的。但批處理的東西更適合自動化(腳本調用者)。我建議幾乎所有的東西都是批量使用,除非你正在研究一個字處理器或其他東西,因爲從長遠來看,批處理腳本的高級可組合性最終會取得巨大的成功。這不僅僅是事實,你可以更實際地建立批處理腳本;使用批量接口進行自動化測試也更容易,所以代碼更加可靠。 – user1277476 2012-07-26 17:18:42

回答

7

如果詹金斯執行命令期望輸入,它只是坐在那裏,等待輸入。工作會掛起,你需要手動殺死它。處理這種情況的一種方法是將期望的輸入輸入到命令中,例如,

echo "input" | command 

command < file_with_input 
+0

感謝您的快速響應。我實際上正在嘗試做一些類似'echo「的輸入密碼:」;閱讀密碼「並讓用戶即時輸入密碼。從上面說的(?) – degausser 2012-07-26 17:00:42

+1

看起來這是可以接受的。只有手動終止作業時,'read'纔會被阻止。假設您將結果存儲在環境變量中,則可以在Jenkins作業中相應地設置該變量,如果未設置該變量,則該腳本僅需要用戶輸入。 – 2012-07-26 17:03:15

+0

對不起,我應該更加明確。真正的命令是'scp',所以除非你使用expect,否則會強制提示。你說提示會「阻止」。我意識到它會停止進程並等待輸入,但是用戶能夠在Jenkins內響應該提示嗎? (如果你不知道的話,Jenkins noob的一點點) – degausser 2012-07-26 17:19:03