在我们的 gitlab 服务器上设置 CI 构建的步骤中,我似乎找不到有关如何设置编译器警告检测的信息。构建输出示例:
[100%] Building CXX object somefile.cpp.o
/home/gitlab-runner/builds/XXXXXXX/0/group/project/src/somefile.cpp:14:2: warning: #warning ("This is a warning to test gitlab") [-Wcpp]
#warning("This is a warning to test gitlab")
^
然而构建结果是success
代替warning
或类似的东西。理想情况下,结果在功能的合并请求中也可见(如果可能的话,阻止合并)。
我无法想象我是唯一一个试图实现这一目标的人,所以我可能正在寻找错误的方向。我发现的“最佳”解决方案是以某种方式手动解析构建输出并生成 JUnit 报告。
我将如何在不让构建作业失败的情况下执行此操作,因为我希望在发生编译器错误时作业失败。
Update
对于后来偶然发现这个问题的任何人,代替最佳实践,这就是我解决它的方法:
stages:
- build
- check-warnings
shellinspector:
stage: build
script:
- cmake -Bcmake-build -S.
- make -C cmake-build > >(tee make.output) 2> >(tee make.error)
artifacts:
paths:
- make.output
- make.error
expire_in: 1 week
analyse build:
stage: check-warnings
script:
- "if [[ $(cat make.error | grep warning -i) ]]; then cat make.error; exit 1; fi"
allow_failure: true
这将构建输出错误存储在make.error
在第一阶段,下一阶段会查询该文件是否有警告,并导致该阶段失败allow_failure: true
来创建passed with warning
我正在寻找的管道状态。
似乎这种需求的解决方案(例如,请参阅问题“添加新的 CI 状态:有警告”https://gitlab.com/gitlab-org/gitlab-runner/issues/1224 https://gitlab.com/gitlab-org/gitlab-runner/issues/1224)已经介绍了允许失败 http://docs.gitlab.com/ce/ci/yaml/README.html#allow_failure选项,以便一项工作可以是编译本身,即not允许失败(如果失败,则管道失败),另一个工作可以是检测此类警告is允许失败(如果找到一个则管道不会失败)。
也可以定义.gitlab-ci.yml 中的警告正则表达式 https://gitlab.com/gitlab-org/gitlab/issues/23816已请求但尚不存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)