2016-10-10 94 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> || :