Gitlab-CI: 条件allow_failure
Gitlab-CI: conditional allow_failure
我最近开始对我的代码实施自动测试,我注意到 CI 没有捕捉到编译器的警告 - 即使有警告,测试也显示为成功。
我最初为编译器添加了一个标志,将警告转换为错误和 allow_failure=True
,但问题是编译器在第一个警告->错误中停止并且没有完成整个编译。
然后我使用技巧解释 将警告写入文件,然后测试文件是否不为零:
- make 2> >(tee make.warnings)
- test ! -s make.warnings
整个编译完成后,如果有警告写入文件,这将给出错误 - 使用 allow_failure=True
,这适用于我没有 errors/warnings 的情况,但是当我有警告时。但是,如果我有真正的错误,这也会在 CI 中显示为警告,并且不会因为 allow_failure=True
.
而停止管道
我无法找到 allow_failure=True
的方法,这取决于脚本中的某些内容 运行 (没有创建新阶段)或使用某些条件(即文件是否为空) .有没有我缺少的简单方法?
由于本身没有条件,请查看 GitLab 13.8(2021 年 1 月):
Control job status using exit codes
You can use the allow_failure
keyword to prevent failed jobs from causing an entire pipeline to fail.
Previously, allow_failure
only accepted boolean values of true
or false
but we’ve made improvements in this release.
Now you can use the allow_failure
keyword to look for specific script exit codes.
This gives you more flexibility and control over your pipelines, preventing failures based on the exit codes.
See Documentation and Issue.
如果您可以使用脚本的 退出状态 作为条件,那么 allow_failure
就足够了。
我最近开始对我的代码实施自动测试,我注意到 CI 没有捕捉到编译器的警告 - 即使有警告,测试也显示为成功。
我最初为编译器添加了一个标志,将警告转换为错误和 allow_failure=True
,但问题是编译器在第一个警告->错误中停止并且没有完成整个编译。
然后我使用技巧解释
- make 2> >(tee make.warnings)
- test ! -s make.warnings
整个编译完成后,如果有警告写入文件,这将给出错误 - 使用 allow_failure=True
,这适用于我没有 errors/warnings 的情况,但是当我有警告时。但是,如果我有真正的错误,这也会在 CI 中显示为警告,并且不会因为 allow_failure=True
.
我无法找到 allow_failure=True
的方法,这取决于脚本中的某些内容 运行 (没有创建新阶段)或使用某些条件(即文件是否为空) .有没有我缺少的简单方法?
由于本身没有条件,请查看 GitLab 13.8(2021 年 1 月):
Control job status using exit codes
You can use the
allow_failure
keyword to prevent failed jobs from causing an entire pipeline to fail.Previously,
allow_failure
only accepted boolean values oftrue
orfalse
but we’ve made improvements in this release.Now you can use the
allow_failure
keyword to look for specific script exit codes.This gives you more flexibility and control over your pipelines, preventing failures based on the exit codes.
See Documentation and Issue.
如果您可以使用脚本的 退出状态 作为条件,那么 allow_failure
就足够了。