Fil*_*ipe 14 if-statement compiler-warnings gitlab-ci
我最近开始为我的代码实现自动测试,我注意到 CI 没有捕获编译器的警告 - 即使有警告,测试也显示为成功。我最初为编译器添加了一个标志,将警告转换为错误 和allow_failure=True,但问题是编译器在第一个警告->错误时停止,并且不会完成整个编译。然后,我使用此处解释的技巧将警告写入文件中,然后测试该文件是否不为零:
- make 2> >(tee make.warnings)
- test ! -s make.warnings
Run Code Online (Sandbox Code Playgroud)
整个编译完成后,如果有警告写入文件,这将给出错误 - 并且使用allow_failure=True,这适用于我没有错误/警告的情况,但也适用于我有警告的情况。但是,如果我有真正的错误,这也会在 CI 中显示为警告,并且不会因为allow_failure=True.
我找不到一种方法来allow_failure=True依赖脚本中运行的内容(无需创建新阶段)或使用某些条件(即文件是否为空)。有没有一种简单的方法可以做到我所缺少的?
Von*_*onC 19
由于本身没有条件,请查看GitLab 13.8(2021 年 1 月):
\n\n\n使用退出代码控制作业状态
\n您可以使用
\nallow_failure关键字来防止失败的作业导致整个管道失败。以前,
\nallow_failure仅接受true或的布尔值false,但我们\xe2\x80\x99在此版本中进行了改进。现在您可以使用
\nallow_failure关键字来查找特定的脚本退出代码。这为您提供了更大的灵活性和对管道的控制,防止基于退出代码的故障。
\nRun Code Online (Sandbox Code Playgroud)\n\ntest_job_1:\n script:\n - echo "Run a script that results in exit code 1. This job fails."\n - exit 1\n allow_failure:\n exit_codes: 137\n\ntest_job_2:\n script:\n - echo "Run a script that results in exit code 137. This job is allowed to fail."\n - exit 137\n allow_failure:\n exit_codes:\n - 137\n - 255\n
如果您可以使用脚本的退出状态作为条件,那么就足够allow_failure更具体了。