经过多次尝试和错误,我终于能够让 Sonar、Jacoco 和 Bamboo 和谐地一起工作。我记录了这个过程here http://docs.marvelution.com/display/BAMSON/Documentation+Home?focusedCommentId=15171631comment-15171631!,但我将在此处复制我的解决方案以确保它始终可用。
对于我的应用程序,我实际上使用了声纳运行器任务。您有更明确的步骤来安装和配置声纳运行器,安装指南中未提及。首先,您必须安装 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
将 jacoco xmlns 包含在顶部的 ant 构建脚本中:
<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 作业中声纳分析的任务配置中的“自定义额外参数”来完成此操作。配置以下选项:
-DbuildNumber=${bamboo.buildNumber}
-Dsonar.core.codeCoveragePlugin=jacoco
-Dsonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec
-Dsonar.dynamicAnalysis=reuseReports
-Dsonar.surefire.reportsPath=tests/test-reports
配置完所有这些后,我的测试覆盖范围开始显示在声纳中,并列出了#个成功的测试。
只需确保设置 sunfire 属性以重用从单元测试生成的报告即可。否则,即使您告诉声纳重复使用报告,声纳也不会知道在哪里找到它们。希望对您下次尝试有所帮助。