我目前正在开发一个大型 Java 项目,需要以更大更好的方式进行管理。它使用 SVN、Hudson、Sonar。在一天内多次签入后,每晚运行 Hudson 构建,该构建也运行声纳,因此提供了新的统计信息(代码覆盖率、复杂性等)。但是到目前为止,这些数字并不是很有用,因为它们在签入后会告诉情况/数字。
实际情况是,随着每次签入,代码覆盖率都在减少。现在我们要对当前水平的数字进行基准测试。假设代码覆盖率目前为 45% 我们想要的是当且仅当它增加代码代码覆盖率时才应该允许下一次签入,否则不会。
我的问题是如何做到这一点?
我做了一些研究,知道了两种可能的方法
- 使用 SVN 钩子
- 使用像 Hudson 这样的持续构建服务器
对于第一个选项找到的链接/教程:我可以在提交颠覆时运行脚本吗?
以下两个链接似乎表明第二个选项更好(因为它的签到时间要少得多)
- 声纳与 SVN 的集成
- 如何保证所有单元测试在提交之前通过?
- 还建议使用“持续集成游戏”
问题
- 由于我还没有配置 hudson(只是将其用作普通用户来启动构建),因此我从上面的两个链接中不明白的是……Sonar 将在签入完成后运行,那么它将如何阻止用户签入如果某些测试用例失败了?还是我的理解不正确??还是会向所有开发人员发送一封电子邮件,说明签入前后的统计信息?或者只有在测试用例失败时才会发送电子邮件??
- 我的用例略有不同......在决定提交与否之前,我想检查新的覆盖率 %(包括当前的签入更改)和旧的覆盖率 %(签入更改之前),并且仅在新 > 旧时才允许 ...我怎样才能使用 hudson+sonar 做到这一点?任何代码/配置示例?
- 或者我的用例无法通过使用 Hudson ... 而 SVN 挂钩是我唯一的选择??如果是的话,任何关于如何做到这一点的代码示例
让我知道是否需要进一步澄清我的问题