【问题标题】:How to detect compiler warnings in gitlab CI如何在 gitlab CI 中检测编译器警告
【发布时间】:2020-01-10 11:06:13
【问题描述】:

在我们的 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 报告。

我将如何在不让构建作业失败的情况下执行此操作,因为我希望在发生编译器错误时该作业失败。

更新

对于以后遇到此问题的任何人,而不是最佳实践,这就是我解决它的方法:

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 管道状态。

【问题讨论】:

    标签: gcc gitlab-ci compiler-warnings


    【解决方案1】:

    似乎这种需求的解决方案(例如,请参阅问题“添加新 CI 状态:has-warnings”https://gitlab.com/gitlab-org/gitlab-runner/issues/1224)已经引入了allow_failure 选项,以便一项工作可以是编译本身, 不允许失败(如果失败,则管道失败),另一项工作可以是检测允许失败的警告(如果找到)那么管道就不会失败)。

    还请求定义warning regex in the .gitlab-ci.yml,但它还不存在。

    【讨论】:

    • 我希望错过一些明显的东西;在我的期望中,警告检测是内置的。你找到的链接我也做了,但不是我喜欢的 ;-) 无论如何,我确实根据你的建议设置了我的管道。
    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 2011-03-16
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多