Gitlab-CI:有条件的allow_failure

问题描述

我最近开始为我的代码实现自动测试,并且我注意到CI不会捕获编译器的警告-即使有警告,测试也显示为成功。 我最初为编译器添加一个标志,以将警告转换为错误allow_failure=True,但是问题是,编译器在第一个警告->错误中停止并且没有遍历整个编译过程。 然后,我使用解释here的技巧将警告写到文件中,然后测试文件是否不为零:

    - make 2> >(tee make.warnings)
    - test ! -s make.warnings

整个编译完成后,如果在文件中写入了警告,则会出现错误-使用allow_failure=True,这适用于我没有错误/警告的情况,也适用于我有错误/警告的情况警告。但是,如果我遇到真正的错误,这也会在CI中显示为警告,并且不会由于allow_failure=True而停止管道。

我无法找到一种方法allow_failure=True,具体取决于脚本中运行的内容(不创建新阶段)或使用某些条件(即文件是否为空)。有没有一种简单的方法可以使我丢失?

解决方法

由于本身没有条件,请查看 GitLab 13.8(2021 年 1 月):

使用退出代码控制作业状态

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

以前,allow_failure 只接受 truefalse 的布尔值,但我们在此版本中进行了改进。

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

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

https://about.gitlab.com/images/13_8/allow_fail.png -- Control job status using exit codes

参见 DocumentationIssue

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