如何在脚本失败时退出GitLab作业
问题的出现的原因是:在gitlab的作业中,当脚本执行失败时,需要找到一种方法来退出作业。
解决方法是:
1. 使用以下代码来退出作业:
dosomething1 || exit 1
2. 如果使用了set -e
,则需要使用以下代码来执行某些命令:
dosomething || true
3. 使用|| true
可以使命令管道具有true
返回值,即使命令失败,-e
选项也不会终止脚本。
4. 可以使用set -e
命令来实现上述功能,这不仅适用于bash脚本,甚至在原始Bourne Shell中也支持。
以上是解决问题的方法,更多关于控制操作符的信息可以在这里找到:opensource.com/article/18/11/control-operators-bash-shell。
问题原因:当脚本中的某个命令失败时,希望能够立即退出脚本,避免后续命令的执行。
解决方法:在脚本开头添加
set -e
命令,这会导致当简单命令返回非零退出值时,shell会立即退出。简单命令是指不属于if
、while
、until
测试、&&
或||
列表的任何命令。
如果使用的是bash,则可以使用
set -Eeuo pipefail
来处理更多的错误处理。将这些选项视为新的bash程序的合理默认值。可以参考bash手册以了解这些选项的更多信息。
另外,需要注意的是,如果在脚本中声明了函数,那么在函数体内部需要重新声明set -e
才能扩展此功能。
此外,如果通过source
命令执行脚本,那么shebang行将不起作用。
可以在脚本中稍后使用set +e
来禁用错误失败。
需要注意的是,在不同版本的bash中,-e
(errexit)行为不一致,如果不熟悉脚本,可能会被管道或if-then语句中的错误所困扰。可以捕获想要捕获的错误,但在复杂的脚本中可能无法捕获每个错误。
如果希望对特定命令设置异常情况,而不使用set -e
,是否有办法实现呢?