GitLab CI:如何在新的编译器警告上失败

GitLab CI: How to fail on new compiler warnings

我们正在努力控制旧的遗留代码库,同时开发新功能。目前,代码编译时会出现大量编译器警告和来自静态代码分析器的警告。出于这个原因,引入新警告的代码进入生产环境的情况并不少见,因为新警告在混乱中丢失了。

目前我们正在使用 Jenkins 进行夜间构建,并在出现新警告时使构建失败。然而,当 Jenkins 检测到新的警告时,代码已经在几个小时前合并了。所以我们不仅要缩短反馈周期,还要确保只合并不引入新警告的更改。

据我所知,可以在推送到 GitLab 时触发 Jenkins 构建。但是 Jenkins 只能将警告计数与之前的构建进行比较。但是我们需要与不同分支的构建进行比较。

能否以某种方式配置 GitLab CI 或 GitLab EE 和 Jenkins 的组合以检测合并请求是否引入新警告?

是的,这是可能的,但这是一个 open-ended 问题,很大程度上取决于构建需要多长时间以及您将如何比较结果。

您不必 运行 只检查您已签出的分支机构。您可以并行设置两个作业 运行 在当前分支和开发分支上进行测试,将它们作为 artifacts 传递给第三个作业并在那里进行比较。

您可能希望将构建状态存储在您的开发分支上,并 download the artifact 存储到您当前的作业中,并将其与本地结果进行比较。您还可以将它们存储在数据库、文件服务器或其他任何合适的地方。

最后,您可以尝试使用 SonarQube 等外部代码质量工具,它可以更深入地了解新旧内容。

与此同时开发了一些工具,允许一个不完美但非常接近的工作流程。

Jenkins 有 Warnings Next Generation Plugin 可以将在一个 Jenkins 作业中发现的警告与在另一个 Jenkins 作业中发现的警告进行比较。所以我们设置了一个工作来编译我们的开发分支,每次有新的提交被推送到它。然后我们将结果用作基线。 GitLab 中为每个合并请求触发的另一个作业然后使用此基线来确定合并请求引入的新警告。

这相当有效。