gpt4 book ai didi

continuous-integration - 如何将标准错误重定向到 GitLab 运行程序中的标准输出

转载 作者:行者123 更新时间:2023-12-04 14:15:40 25 4
gpt4 key购买 nike

我正在处理 GitLab CI/CD我知道如何在正常情况下将 std 错误重定向到 std 输出。是用2>&1>/dev/null 2>&1 .

有时,我需要一些抛出错误的命令,但这些错误并不重要。例如,当我部署我的 docker 应用程序时,我想停止我的旧容器(如果它存在)并忽略如果容器不存在会发生的错误。
在这种情况下,我只想忽略 std 错误并保持进程部署。
当我使用 AWS CodeDeploy , 通过 2>&1 重定向错误确实有效,但在 GitLab CI/CD ,它不起作用。

下图是取消 CI/CD 过程的错误。
如果没有停止不存在的容器的命令,就不会出现错误并且部署确实有效。

题。

我如何将标准错误重定向到标准输出或忽略错误并保持部署在 GitLab CI/CD ?

enter image description here

enter image description here

最佳答案

从它抛出的错误来看,问题根本不在于 stdout 或 stderr,而且您的重定向工作正常。问题是docker stop存在非 0 退出代码。在 *nix 系统中,每个命令都以数字代码退出(如 exit 0exit 1exit 986405 )。退出代码的值在这里并不重要,只是它不是 0:一个错误。 Gitlab CI 在每个命令(before_script、script 和 after_script 部分中的每一行)之后检查退出代码,如果其中任何一个不为 0,则管道中的作业失败。如果作业未标有 allow_failure: true然后整个管道失败。
尝试将该命令改为:

...
script:
- pwd
- docker stop ng >/dev/null 2>&1 || NO_CONTAINER=1
- #continues as normal
有了这个,如果命令 docker stop ng...失败,我们将变量 $NO_CONTAINER 设置为 1 的值它应该总是以退出代码 0 结束,让工作照常继续。这根本没有关系,我们不会使用它,我们只需要 OR 来捕获失败并继续。如果容器确实存在并且正确停止,则初始退出代码将为 0,因此 ||永远不会发挥作用。
希望这可以帮助。

关于continuous-integration - 如何将标准错误重定向到 GitLab 运行程序中的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60559436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com