Jenkins 构建会因覆盖率下降而失败吗?

Posted

技术标签:

【中文标题】Jenkins 构建会因覆盖率下降而失败吗?【英文标题】:Can a Jenkins build be failed for coverage going down? 【发布时间】:2011-09-23 02:01:23 【问题描述】:

我已经看到许多关于如果不满足覆盖率阈值(即覆盖率必须至少为 80% 否则构建失败)的给定项目的 Maven 支持的 Jenkins 构建失败的帖子。

我想知道如果覆盖率低于上次构建,即如果构建 N 的覆盖率为 20%,N+1 为 19%,那么是否有一种方法可以配置 Jenkins 以失败构建失败。我不想设置明确的阈值,但我希望覆盖率保持稳定或随着时间的推移变得更高。

【问题讨论】:

这是一个很好的问题 - 正是我想要的。 【参考方案1】:

我没有尝试过,但假设您使用的是 maven cobertura 插件,我相信它可以配置为失败,如 here 所记录的那样。 jenkins 会不尊重失败吗?

我也看到了open feature request。

【讨论】:

遗憾的是,codehaus 已经消失了。我已经更新了我认为正确的链接。【参考方案2】:

在旁边保存最后的覆盖百分比。使用 Groovy 脚本(通过Groovy Plugin 运行)利用Jenkins Java API 将当前覆盖级别与之前的覆盖级别进行比较,如果它下降则构建失败。如果您认真决定采用这种方式,我可以提供更多详细信息和代码示例。

【讨论】:

我希望得到比这更简单的答案。但是,好吧,也许这就是我必须做的。您从哪里通过 Groovy 获得 rcov 的最后一个覆盖百分比?或者,bash 或 ruby​​ 脚本? @Rob,我们说的是 Ruby Metrics 插件,对吧?能否请您提供一份简单的 RCOV 报告,以便我使用它? 是的,Ruby Metrics 插件。不确定我应该如何为您提供一份简单的 RCOV 报告? 不,我还是不明白你想要什么。这不像从我的 jenkins 网站粘贴 RCOV 报告会有帮助,其他 RCOV 报告看起来都有点相似(而且你无论如何都无法使用静态页面)。所以你想让我主持一个简单的项目并把 RCOV 放在上面? 我不使用 Ruby - 所以我没有准备好设置。这就是我需要样本报告的原因——index.html 页面似乎就足够了,因为它包含了覆盖信息。我做了一个快速的谷歌搜索,没有找到任何东西。静态报告会对我有所帮助,因为我可以稍微修改它以“模拟”覆盖范围的变化。来自您的 Jenkins 的报告不是一个好主意,因为它很可能并不简单。用一个非常简单的测试编写一个非常简单的应用程序(两个文件,每个文件几行代码),然后从命令行在其上运行 RCOV。【参考方案3】:

自1.6 version of Cobertura 插件以来,该问题已得到修复,并且出现了一个新选项,允许插件在覆盖率低于之前的构建时使构建失败。

【讨论】:

【参考方案4】:

这应该可以在插件的配置部分进行配置,计算覆盖率。例如。对于 PMD 插件,您可以在“构建设置”部分的作业配置页面上配置不稳定或失败构建的限制。

【讨论】:

有一堆覆盖插件。您是否知道具有我要询问的功能或您正在推测的功能? 啊,好吧,我以为你已经在使用了。我在我的一个项目中使用 Emma(有一个 Maven 和一个用于 Emma 的 Eclipse 插件),并且使用 Jenkins 插件,您可以定义您想要的此类限制(如果您正在寻找代码覆盖率分析工具)。 我可以使用 EMMA,但您能否更具体地了解我想要设置的确切属性以实现我在问题中提出的内容。我看不到那个选项。 刚刚检查了我的 Jenkins,确实我错了。使用 Jenkins Emma 插件,您只能配置 Health Treshold,但不能配置构建状态。也许有一个插件,您可以在其中使具有给定 Health 的构建失败。我会检查的。【参考方案5】:

在 NCover 中,我通过配置文件指定了某个百分比。您可以创建一个 python 脚本(或者如果您愿意,可以类似地更改该值)。除此之外,我认为没有任何配置变量

【讨论】:

以上是关于Jenkins 构建会因覆盖率下降而失败吗?的主要内容,如果未能解决你的问题,请参考以下文章

grunt karma 覆盖在 jenkins 上失败,但在 windows/unix 上有效

使用Jenkins Sonar插件构建成功后,Sonar没有显示代码覆盖率

Jenkins执行批处理文件失败

在 Jenkins 中显示 SCCT 覆盖率

实践Jenkins集成Cobertura自动化构建SpringBoot工程

干货分享实践Jenkins集成Cobertura自动化构建SpringBoot工程