Jenkins 一天或一周只发射一次声纳就足够了吗?

Jenkins 一天或一周只发射一次声纳就足够了吗?,jenkins,sonarqube,Jenkins,Sonarqube,我一直在挖掘声纳的最佳实践。人们的共识似乎是声纳每天或每周只发射一次,例如在夜间。但是,如果使用像Jenkins这样的CI服务器会怎么样?Jenkins建立在每个SVN提交的基础上,运行单元测试,部署到登台环境,运行Selenium测试,等等。据我所知,如果Sonar每天/每周只发射一次,所有这些附加信息都会丢失。最有可能的是,团队的所有代码问题和失败的测试都在下午或周末得到了解决。声纳可能在周日晚上或每晚运行。该应用程序经过预构建和测试,然后根据该信息执行声纳分析。最有可能的情况是,所有测试都

我一直在挖掘声纳的最佳实践。人们的共识似乎是声纳每天或每周只发射一次,例如在夜间。但是,如果使用像Jenkins这样的CI服务器会怎么样?Jenkins建立在每个SVN提交的基础上,运行单元测试,部署到登台环境,运行Selenium测试,等等。据我所知,如果Sonar每天/每周只发射一次,所有这些附加信息都会丢失。最有可能的是,团队的所有代码问题和失败的测试都在下午或周末得到了解决。声纳可能在周日晚上或每晚运行。该应用程序经过预构建和测试,然后根据该信息执行声纳分析。最有可能的情况是,所有测试都通过了,存储库中没有遗留任何重大代码问题,并且QA团队错误地认为没有问题,因为所有Sonar报告都显示为绿色。然而,在一天/一周内,项目可能完全混乱,有损坏的构建等,但从未在Sonar报告中显示:)


我是否在这里遗漏了什么,或者声纳应该在每次提交时执行,或者至少每小时执行一次

Sonar收集的大部分数据都是静态分析信息(复杂性、代码风格冲突等),除非对代码进行重构,否则这些信息在不同的构建中不会有太大的变化,因此每天运行一次就足够了。还要考虑声纳分析会增加你的构建执行时间——在我的工作中,它可以增加2到3分钟的时间来构建一个只需要花费很长时间编译和测试的版本。 如果您想收集每个CI构建的代码覆盖率和测试结果,您可以在Jenkins中这样做,并将Jenkins用作构建健康的早期预警系统,让Sonar对总体代码质量和可维护性进行更长期的分析


正如您在问题中提到的,您仍然可以在Sonar中对代码覆盖率和测试结果进行趋势分析,但并非每个CI构建都有Sonar,这一切都取决于您的需要和您的团队开发新代码、测试和将新功能集成到项目中的速度

如果你有一个带有时间盒的网络sprint,可能是在周末,周一开始的版本是稳定的,因此没有bug,或者只有一些bug。如果您的sprint时间框是一周,我强烈建议您至少每天一次,这样您就可以通过运行单元测试等来获得缺陷,从而使您的项目质量得到良好的实现

我建议采取以下做法:

  • 使用Cobertura这样的代码覆盖率,每天至少运行一次单元测试
  • 使用PMD、checkstyle等代码分析。如果可能,创建适用于您的体系结构的您自己的规则,为您的项目在质量方面创造更多价值
  • 考虑到Sprint的时间限制,为sonar中的构建选择一个频率,并安排一个cron作业,仅在您真正需要时运行它(因为它很耗时)

  • 这些是我在项目中使用的实践,但您必须密切关注您的需求,因为该工具(Sonar)旨在帮助您了解项目质量,因此,您的架构、团队和工程实践。

    每天/每周运行一次Sonar不应被视为“最佳实践”。考虑到可用的硬件和质量度量,这可能是目前最好的方法,但正如您所说,在CI环境中,每次提交都需要反馈(实际上也应该在提交中包含反馈,就像Smalltalk&MOOSE在每次保存方法时所做的那样)。我目前正在处理的部分的代码复杂性和测试覆盖率变化是我喜欢的一些可视化/度量,其粒度比每天一次小得多


    Sonar为构建增加了大量时间是一个实现问题,而不是根本问题,可以通过多种不同的方式解决:缓存信息、在慢速和快速测量之间进行分割、在模块中分割、异步运行,等等。

    在每次提交时,可以使用cobertura执行单元测试,并每晚运行一次声纳分析。然而,我认为这破坏了将Sonar用作集中质量存储库的整个意义。如果在没有声纳的情况下执行cobertura,那么您将在两个地方开始使用质量度量:Jenkins和Sonar。QA人员会查看您的Sonar指标,并说“这很好,但您真的做得如何?”然后您必须开始挖掘不属于Sonar的其他测试报告,您会发现您在项目中做得并不好,毕竟在质量方面……这是真的,这取决于你对质量的定义——根据我的经验,很难有一个地方可以让你概括所有影响产品质量的因素。因此,我使用我的CI系统来提醒我立即出现的质量“中断”(编译失败、测试失败、代码覆盖率下降到阈值以下等等),并保持Sonar用于更长期的趋势分析。正如你在问题中提到的,你仍然可以在Sonar中对代码覆盖率和测试结果进行趋势分析,只是你不会在每个CI构建中都使用它。很好,谢谢。我上面的另一个评论也部分针对您的答案,即一个人将/应该真正只有一个用于质量报告的存储库。詹金斯·科伯图拉的报告可能表明存在严重的质量问题,但从未在声纳中显示。我想知道,人们当然可以使用单元测试报告执行Sonar,但在每次提交时不进行代码分析,并且每天甚至每周执行一次测试报告和代码分析报告。您必须维护单独的Sonar来执行配置,但这可能没问题……Sonar缺乏显示有关测试和代码质量的信息的质量。事实上,Sonar只是一个试图使用第三方工具收集信息的工具,如Cobertura、PMD、Checkstyle和