2016-10-10 95 views
1

在我打電話給terraform的工作中,在部署後,shell被卡住,作業沒有結束,因此我必須中止它。是否有可能將失敗的工作標記爲成功,或者有另一種方法可以在沒有武力的情況下結束這項工作?Jenkins可以將失敗的工作標記爲成功嗎?

+0

你是如何正確調用terraform的?您是否在使用** Execute Shell **來執行作業? – gaoithe

+0

使用terraform應用,在provision.sh中,阻止shell的命令應該是「java -jar slave.jar -jnlpUrl http:// ************:8080/computer/terraform/slave -agent.jnlp「 –

回答

0

在工作摘要/工件/更改/觸發器/結果頁面上,您可以「添加說明」。這是總結結果的好地方,並解釋審查工作結果後發生的情況。描述的第一部分也出現在Build History中。

答: 在shell腳本(或詹金斯作業腳本),你可以使用慶典timeout命令保護可能會被卡住的任何命令。 'timeout [< option>] < duration> < command>'。例如

$ timeout 2s sleep 4 
$ echo $? 
124 

可以在腳本和退出檢查這個退出值成功或使用--preserve狀態選項超時要修改退出代碼,並且認爲是成功的工作。雖然如果某些事情超時,將工作標記爲失敗可能是最有意義的。

jenkins內部執行shell你可以用'set -e'和'set + e'來包裝超時,以便非零退出代碼不會被視爲失敗。像這樣的東西會爲你工作:

set -e  # no error if non-zero exit status 
timeout <timeout> <terraform hanging command> 
set +e 

https://www.gnu.org/software/coreutils/manual/html_node/timeout-invocation.html

+0

感謝您的迴應,在配置terraform啓動期間,仍然在聆聽的JAR這就是爲什麼我想停止作業而不將其標記爲失敗。如果命令達到超時,作業將被標記爲成功? –

+0

Jenkin的Execute Shell構建步驟的最後命令的退出代碼決定了構建步驟的成功/失敗。你說terraform發射罐子。如果你使用'timeout ',那麼'echo'總是成功的'',那麼這將永遠是成功的。 – gaoithe

+0

其實看到這裏:http://serverfault.com/questions/143445/what-does-set-e-do-and-why-might-it-be-considered-dangerous/143576#143576所以你需要的是使用'set -e''set + e'。我將編輯答案。 – gaoithe

0

追加到第一個答案,你有一個set替代只是管道分號。在Bash中討厭的解決方法,但工程。

timeout <timeout> <terraform hanging command> || :