Jin*_*nsu 5 continuous-integration gitlab gitlab-ci gitlab-ci-runner
我正在研究GitLab CI/CD并且我知道如何在正常情况下将标准错误重定向到标准输出。就是使用2>&1or >/dev/null 2>&1。
有时,我需要一些引发错误的命令,但这些错误并不严重。例如,当我部署 docker 应用程序时,我想停止旧容器(如果存在)并忽略容器不存在时将发生的错误。在这种情况下,我只想忽略标准错误并保留进程进行部署。当我使用 时AWS CodeDeploy,错误重定向2>&1确实有效,但在 中GitLab CI/CD,它不起作用。
下图是取消 CI/CD 进程的错误。如果没有命令停止不存在的容器,则不会出现错误并且部署确实可以工作。
如何将 std 错误重定向到 std out 或忽略错误并保持部署GitLab CI/CD?
从它抛出的错误来看,问题根本不在于 stdout 或 stderr,并且您的重定向工作正常。问题在于docker stop以非 0 退出代码退出。在 *nix 系统中,每个命令都以数字代码退出(如exit 0orexit 1或exit 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
Run Code Online (Sandbox Code Playgroud)
这样,如果命令docker stop ng...失败,我们将设置一个变量 $NO_CONTAINER ,该变量的值1应始终以退出代码 0 结尾,让作业照常继续。这根本不重要,我们也不会使用它,我们只需要 OR 来捕获失败并继续。如果容器确实存在并且正确停止,则初始退出代码将为 0,因此 || 永远不会发挥作用。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
3047 次 |
| 最近记录: |