本文大纲
《我的敏捷软件项目管理实践》
代码覆盖率报告同步Sonar
目标
本文讲解以下内容,把前一步生成的代码覆盖率报告同步到Sonarqube进行展示。
展示的效果截图
同步报告信息到Sonarqube平台展示,展示的效果如下图。
展示了:覆盖率、单元测试数、趋势图、还要看详情。




Sonarqube支持代码覆盖率报告
sonarqube支持多种代码覆盖率的报告展示,最常用的当属jacoco报告。它可以将jacoco产出的覆盖率结果上传到sonarqube平台上,然后根据指定的规则来做一些分析。
同步信息到Sonarqube平台
同步报告信息到Sonarqube平台这一步是自动完成的, 只要你正常执行sonarqube 的代码分析动作,就可自动把报告同步到sonarqube平台了。
问:那如何执行sonarqube 的代码分析动作?
答:一般的命令是 mvn sonar:sonar ‘-Dsonar.projectKey=B2b2cShop’ ‘-Dsonar.host.url=http://192.168.xx.xx:9091’ ‘-Dsonar.login=e15bxxxxxxxxxx5e4fc4xxxx3911f’ (需要根据你的实际情况修改参数)
关于“执行sonarqube 的代码分析”是代码质量分析过程的一个工作任务,不在本文讨论范围内。
问:怎么证明自动同步了报告:
sonarqube最新的8.x的版本开始不支持.exec这种格式的报告了(也就是参数sonar.jacoco.reportPaths是不支持的了),jacoco要生成xml格式的报告才能被sonarqube识别(sonar.coverage.jacoco.reportXmlPaths)。
假设当无覆盖率报告文件时,也就是无jacoco.xml文件,在Jenkins任务的控制台日志中,执行sonarqube 的代码分析动作时,日志中说:“No report imported” 意思是无报告可导入。
[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml
[INFO] No report imported, no coverage information will be imported by JaCoCo XML Report Importer
当有覆盖率报告文件时,也就是无有acoco.xml文件,在Jenkins任务的控制台日志中,执行sonarqube 的代码分析动作时,日志中说:“Importing 1 report(s)” 意思是导入一个报告,证明了同步了报告。
[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTest
Report.xml
[INFO] Importing 1 report(s). Turn your logs in debug mode in order to see the exhaustive list.
在Sonarqube展示报告
请登录 Sonarqube平台,就可看到上面说的报告信息了。