Jenkins构建是否可以因测试覆盖率下降而失败?

39

我看到很多关于如何在Maven支持的Jenkins构建中,如果未达到覆盖率阈值(例如覆盖率必须至少为80%),则构建会失败的帖子。

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


1
这是一个非常好的问题 - 正是我想要的。 - Rob
5个回答

9
我没有尝试过,但是假设你正在使用maven cobertura插件,我相信可以按照这里的文档进行配置以失败告终。 Jenkins不会遵守失败吗? 我还看到有一个开放功能请求

不幸的是,Codehaus已经消失了。我已经更新了链接,我认为它是正确的。 - Don Branson

5

将上次覆盖率百分比保存在侧面。使用Groovy脚本(通过Groovy插件运行),该脚本利用Jenkins Java API来将当前覆盖水平与先前的水平进行比较,如果下降,则构建失败。如果您认真决定采用这种方法,我可以提供更多详细信息和代码示例。


我本来希望有一个比那更简单的答案。不过好吧,也许那就是我必须要做的。你怎么通过Groovy、Bash或Ruby脚本从rcov获取最后的覆盖率百分比呢? - Rob
@Rob,我们在谈论Ruby Metrics插件,对吧?你能否提供一个简单的RCOV报告给我,这样我就可以试着玩一下了吗? - malenkiy_scot
不,我仍然不明白你想要什么。就算从我的 Jenkins 站点中粘贴 RCOV 报告也没有帮助,其他 RCOV 报告看起来都差不多(而且你无法对静态页面进行操作)。所以你想让我托管一个简单项目并在上面放置 RCOV? - Rob
我不用Ruby,所以没有现成的设置。因此,我需要一个样本报告——似乎只需要一个index.html页面,因为它包含了覆盖率信息。我进行了快速的谷歌搜索,但没有找到任何东西。静态报告会对我有所帮助,因为我可以稍微修改一下来“模拟”覆盖率变化。从Jenkins获得的报告可能不是一个好主意,因为它很可能不简单。请编写一个非常简单的应用程序(两个文件,每个文件几行代码),并从命令行上运行RCOV。 - malenkiy_scot
好的:我想要利用Ruby Metrics Plugin code来实现以下两种方式之一:(1)仅提取解析RCOV报告的代码,然后在构建过程中从Groovy中调用它;或者(2)修改插件本身,以便在覆盖率下降时使构建失败。 - malenkiy_scot
显示剩余2条评论

4
自从 Cobertura 插件的 1.6 版本,该问题已得到解决,并出现了一个新选项,允许插件在覆盖率低于上一次构建时使构建失败。

1

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


有很多覆盖率插件。你知道有没有一个具有我所要求的功能,还是在猜测吗? - GaryF
啊,好的,我以为你已经在使用一个了。我在我的一个项目中使用Emma(有一个Maven和Eclipse插件),而且通过Jenkins插件,你可以定义你想要的限制(如果你正在寻找一个代码覆盖分析工具的话)。 - dunni
我可以使用EMMA,但您能否更具体地说明我想要设置的确切属性是什么,以实现我在问题中设定的目标。我找不到那个选项。 - GaryF
刚刚检查了我的Jenkins,我错了。使用Jenkins Emma插件,您只能配置Health Treshold,而不能配置构建状态。也许有一个插件,可以根据给定的Health失败构建。我会去检查一下。 - dunni

0
在NCover中,我通过配置文件指定了一定的百分比。如果你想的话,可以创建一个Python脚本(或类似的脚本)来更改该值。除此之外,我认为没有任何配置变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,