Gitlab-CI:有条件的allow_failure

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

您可以使用allow_failure关键字来防止失败的作业导致整个管道失败。

\n

以前,allow_failure仅接受true或的布尔值false,但我们\xe2\x80\x99在此版本中进行了改进。

\n

现在您可以使用allow_failure关键字来查找特定的脚本退出代码

\n

这为您提供了更大的灵活性和对管道的控制,防止基于退出代码的故障。

\n
test_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
Run Code Online (Sandbox Code Playgroud)\n

请参阅文档问题

\n
\n

如果您可以使用脚本的退出状态作为条件,那么就足够allow_failure更具体了。

\n