shell - gitlab-ci中的脚本不输出错误

标签 shell gitlab-ci

我有一个在 gitlab CI 上使用的 shell 脚本,它运行提供的命令。问题是如果命令失败它不会显示错误,它只是显示ERROR: Job failed: exit code 1。我在本地尝试了该脚本,它能够输出失败的命令,有没有办法可以强制它在退出作业之前通过我的脚本显示错误?

我的脚本的特定部分

output="$( (cd "$FOLDER"; eval "$@") 2>&1 )"
if [ "$output" ]; then
    echo -e "$output\n"
fi

最佳答案

捕获适用于每个 shell 的错误的一种方法是将两个命令与逻辑 OR || 结合起来。

从子 shell 捕获错误:

output="$( (cd "$FOLDER"; eval "$@") 2>&1 )" || errorcode="$?"

如果失败,将保存上一个命令的错误代码。

如果重要命令失败,则退出并显示自己的错误代码

output="$( (cd "$FOLDER"; eval "$@") 2>&1 )" || exit 12

对于更复杂的事情,我们可以定义一个将在 OR 之后调用的函数。

handle_error() {
# do stuff
}

output="$( (cd "$FOLDER"; eval "$@") 2>&1 )" || handle_error

关于shell - gitlab-ci中的脚本不输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48419152/

相关文章:

shell - 是否可以将 shell 命令的结果放入剪贴板?

python - 在没有 shell=True 的情况下使用 python 运行外部程序?

arrays - 如何将 GitLab CI 变量设置为 gitlab-ci 中的数组?

ruby-on-rails - Gitlab CI 和 Rails Postgres 崩溃

gitlab - 由于 yml 无效,管道中出现错误

linux - 直接在提示符上运行控制台应用程序有什么区别

python - 试图理解 pythonpath 变量

regex - 解析每一行的Linux脚本,检查正则表达式并修改该行

node.js - 如何在 Node :10 container in GitLabCI中执行docker命令

python - 环境激活后gitlab-ci未运行pytest