Bamboo 可以进行持续构建,但希望使用 Sonar 进行质量指标跟踪。必须在 Bamboo 中捕获单元测试通过/失败和 Clover 代码覆盖率指标。但是,这些相同的值也应该发送到 Sonar,以免通过运行单元测试和 Clover 两次来增加构建持续时间。

已经能够使用“sonar.dynamicAnalysis=reuseReports”指令和 maven 构建将这些指标从 Bamboo 构建发送到 Sonar。但是 Sonar 中的“规则合规性”指标变为 0%。

基于事先修补而不使用指令,规则合规性得分更高。所以很明显,使用该指令会以某种方式阻止计算该指标。

有谁知道如何使用该指令并获得规则合规性分数?或者他们可以指出一些可以帮助诊断的东西吗?使用“-e”选项运行 maven 并没有提供任何特别有用的东西。

最佳答案

经过多次尝试和错误,我终于能够让 Sonar、Jacoco 和 Bamboo 和谐地协同工作。我记录了过程 here !,但我会在这里复制我的解决方案以确保它始终可用。

对于我的应用程序,我实际上使用了 Sonar 运行器任务。你有更明确的步骤来安装和配置 Sonar 运行器,安装指南中没有提到。首先,您必须安装 sonar-runner 并在您的 sonar-runner.properties 中指定以下属性:

#----- Default Sonar server
sonar.host.url=http://localhost:9000

#sonar.jdbc.url=jdbc:postgresql://localhost/sonar
#sonar.jdbc.driver=org.postgresql.Driver

#----- Global database settings
sonar.jdbc.username=user
sonar.jdbc.password=passwd

在顶部的 ant 构建脚本中包含 jacoco xmlns:
<project basedir="." default="build" name="project" xmlns:jacoco="antlib:org.jacoco.ant">
    <property environment="env" />

    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
       <classpath path="libs/independent/jacocoant.jar"/>
    </taskdef>

接下来,您必须将 jacoco 覆盖添加到您的 ant 构建脚本中:
<jacoco:coverage enabled="${tests.code.coverage}" destfile="${jacoco.exec.dest}">
    <junit fork="yes" printsummary="withOutAndErr" dir="${tests.working.dir}">
    ...

最后,您需要告诉 Sonar , Bamboo ,使用 jacoco 结果并重用构建中生成的报告。您可以通过将以下属性添加到任务配置中的“自定义额外参数”来实现 Bamboo 作业中的 Sonar 分析。配置以下选项:
-DbuildNumber=${bamboo.buildNumber}
-Dsonar.core.codeCoveragePlugin=jacoco
-Dsonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec
-Dsonar.dynamicAnalysis=reuseReports
-Dsonar.surefire.reportsPath=tests/test-reports

一旦我配置了所有这些,我的测试覆盖率就开始出现在 Sonar 中,并列出了 # success tests。

只要确保您将 sunfire 属性设置为重复使用从您的单元测试生成的报告。否则,即使您告诉 Sonar 重复使用报告, Sonar 也不知道在哪里可以找到它们。希望对您的下一次尝试有所帮助。

关于java - Bamboo + sonar.dynamicAnalysis=reuseReports = 0% 规则合规性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8081246/

10-13 23:52