如何在 gitlab CI 中检测编译器警告

2024-04-10

在我们的 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(使用前将#替换为@)

如何在 gitlab CI 中检测编译器警告 的相关文章

随机推荐

  • Web API 2 会话

    我无法从 web api 2 中获取会话数据 我已经验证 cookie 是在 fiddler 中发送的 我知道 Web api 2 的最佳实践是无状态 但由于项目的要求 现在有必要是全状态的 我已经尝试过这个链接 WebAPI 2 属性路由
  • Javascript:相当于 PHP 的 hash_hmac() 与原始二进制输出?

    我正在连接到亚马逊产品广告 API 要签署我的请求 我需要对原始二进制文件HMAC SHA256 哈希的输出 In hash hmac 的 PHP 文档 http php net manual en function hash hmac p
  • 将数据库返回的浮点值舍入为“正确”值

    我有一个数据库列 其中包含 由于某种原因在一段时间内丢失 浮点值 因此 有人用一些小值 比如 0 00025 填充数据库表 当我运行报告时 我实际上得到了 0 000249999999 或者类似的值 因为无法表示输入的值 有没有可靠的方法来
  • R Plotly - 更改悬停信息的字体和不透明度

    我正在尝试更改绘图图中悬停信息框的字体和不透明度 使用 R 我使用了以下代码 但无法弄清楚如何更改悬停框的字体或不透明度 如果这可能的话 plotC lt plot ly tg x FINPERCH y JourneyTime type s
  • 如何自动创建 AWS EB 实例到 VPC 的经典链接

    我在 EB 上有一个经典应用程序 需要连接到 VPC 中的 RDS 我可以通过进入 EC2 实例 操作 ClassicLink 链接到 VPC 来手动配置 EB 实例以允许经典链接到 VPC 一旦我这样做了 一切都很好 但是如果没有手动干预
  • Netbeans 7.1.1 中的增强

    尝试运行以下命令 include
  • 检查 PHP 日期时间戳是否正确?

    有没有办法检查 PHP 中的日期时间戳是否正确 我目前正在使用yyyy mm dd hh mm ss在 MySQL 中 并希望确保当用户以与正确格式匹配的形式提供日期 时间戳时 直到有人提供了良好的 无错误 有效的 checkdate 示例
  • 按顺序对要上传的文件列表进行排序

    我的目标是让 python 使用 telegram upload 按升序将文件从设置的目录上传到 telegram 我的脚本似乎无法按顺序上传 它以随机顺序上传文件 我用过sorted功能无济于事 查看我的脚本 您可以看到我尝试过的一些事情
  • XercesDOMParser 和 XInclusion

    我试图让 xincludes 在现有系统中工作 该系统使用 xercesc 中的 XercesDOMParser 来解析来自客户端的传入 xml 我正在使用 Apache Xercesc v3 0 1 从输入流读取的传入 XML 是
  • JQuery 自动完成,结果是链接

    我正在尝试创建一个 JQuery 自动完成框 其中建议自动完成的单词是链接 类似于 Facebook 或 Quora 上发生的情况 基本上 我希望自动完成结果下拉 并且我希望人们能够单击它们并导航到不同的页面 这是我当前使用的代码
  • cURL 中的“c”代表什么?

    我知道 cURL 是一个命令行实用程序 可让您发送 HTTP 请求 但 c 代表什么 从他们的网站 cURL 是项目的名称 这个名字是 Client for URLs 最初 URL 拼写为大写 以使其显而易见 处理 URL 事实上它也可以发
  • 更高级别的 Python GUI 工具包,例如为 TreeView/Grid 传递字典

    使用 PyGTK 启动了我的第一个 Python pet 项目 虽然它是一个非常强大的 GUI 工具包并且看起来很棒 但我还是有一些烦恼 所以我考虑转向其他东西 因为它还不太广泛 环顾四周SO https stackoverflow com
  • 使用 openat 重新打开目录

    看起来 可以使用openat to re打开一个已经打开的目录 例如 在我的 Linux 系统上我可以执行以下操作 define GNU SOURCE include
  • 服务器和本地之间的 Mercurial?

    我正在进行一个门户开发工作 我有时会遇到一些麻烦 例如丢失 覆盖错误的文件等 所以我决定使用 Mercurial 来进行此开发 我第一次使用源代码管理的经历 我在这个项目的服务器 bluehost 上工作 有什么办法可以在本地保存更新备份吗
  • 跨线程Winforms控件编辑[重复]

    这个问题在这里已经有答案了 如果编辑文本的代码 属于 与包含 Windows 窗体的线程不同的线程 如何编辑 Windows 窗体元素中的文本 我得到了例外 跨线程操作无效 控制 textBox1 是从创建它的线程以外的线程访问的 谢谢 您
  • Python 求和 excel 文件

    我有一个包含 3 列的 Excel 文件 请举例如下 Name Produce Number Adam oranges 6 bob Apples 5 Adam Apples 4 steve Peppers 7 bob Peppers 16
  • 读取 ELF 部分的内容(以编程方式)

    我正在尝试检索 ELF 二进制文件中附加部分的内容 此时 我使用以下代码来检索每个部分的名称 include
  • jQuery 验证 - 隐藏错误消息

    我正在使用 jQuery 验证插件 并希望禁用它创建的或元素 容器来显示错误 消息 基本上 我希望带有错误的输入元素具有错误类 但不创建包含错误消息的附加元素 这可能吗 我刚刚想到了 CSS 解决方法 但它并没有真正解决元素仍在创建的事实
  • Spring Cloud Sleuth-获取当前的traceId?

    我正在使用 Sleuth 我想知道是否可以获取当前的 TraceId 我不需要添加任何回复或任何内容 我只想要在某些情况下向开发团队发出警报的电子邮件的traceId Ex import brave Span import brave Tr
  • 如何在 gitlab CI 中检测编译器警告

    在我们的 gitlab 服务器上设置 CI 构建的步骤中 我似乎找不到有关如何设置编译器警告检测的信息 构建输出示例 100 Building CXX object somefile cpp o home gitlab runner bui