本文大纲

《我的敏捷软件项目管理实践》

代码覆盖率报告同步Sonar

第六章 如何做好编码

目标

本文讲解以下内容,把前一步生成的代码覆盖率报告同步到Sonarqube进行展示。

展示的效果截图

同步报告信息到Sonarqube平台展示,展示的效果如下图。

展示了:覆盖率、单元测试数、趋势图、还要看详情。

image2023-6-9_11-43-9.pngimage2023-6-9_11-43-35.pngimage2023-6-9_11-45-39.pngimage2023-6-9_11-45-3.png

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平台,就可看到上面说的报告信息了。