持续集成七 Jenkins配置sonar 配置多模块覆盖率为0问题

2021-01-29 10:55:14 浏览数 (1)

1.没单元测试类或者网上说的中文路径问题

出现:Skipping JaCoCo execution due to missing execution data file. 报错

2.soanrScanner分析参数

代码语言:javascript复制
提示你找不到字节码文件,读取sonar.java.binaries属性
Bytecode of dependencies was not provided for analysis of source files, you might end up with less precise results. Bytecode can be provided using sonar.java.libraries property.

但是我们父项目里没有target/claaes文件夹
No files nor directories matching 'target/classes'

无效
Invalid value for sonar.java.binaries

如果配置sonar.java.binaries=target虽然能够是编译通过,但是,就会造成覆盖率为0的情况。

按照上一篇sonar scanner配置方式,它支持单个模块的扫描,但是配置多个模块的时候会出现扫描为0 的情况,我们直接看官方说明:https://docs.sonarqube.org/latest/analysis/languages/java/

我们使用sonar scanner的时候,需要配置上面参数,但是有些参数是必填的,

如:sonar.java.binaries,根据官方说法:它不支持通配符:

代码语言:javascript复制
#该属性配置的路径支持多个,但不支持通配符
sonar.java.binaries=target/classes
#支持第三方包支持通配符
sonar.java.libraries
#测试类的字节码文件路径,不支持通配符
sonar.java.test.binaries
#第三方测试包字节码
sonar.java.test.libraries

#java版本,未提供时,使用sonarQube默认插件的版本
sonar.java.source=1.8

关于覆盖率的文档:https://docs.sonarqube.org/latest/analysis/coverage/

代码语言:javascript复制
#覆盖率报告路径,他是一个通用命令,支持多种语言设置
sonar.coverageReportPaths
#java的覆盖率报告路径:jacoco
sonar.coverage.jacoco.xmlReportPaths
#不推荐使用;
sonar.jacoco.reportPaths

#checkstyle报告路径
sonar.java.checkstyle.reportPaths
#pmd报告
sonar.java.pmd.reportPaths
#findbugs
sonar.java.spotbugs.reportPaths

根据上面信息我们得出结论,就是Jenkins使用sonar Scanner扫描的时候,插件对参数进行分析,然后执行的 ,但是它的参数配置并不符合我们多个模块的扫描要求,

既然Jenkins上的sonarScan不能使用,那么我们可以使用maven插件里的sonar插件,我也想过其他插件,或是其他配置方法,比如ant sonar配置,这个还有搭建ant,然后还要写复杂的配置,然后还有 Cobertura 微服务覆盖率扫描插件,都需要过多的配置,我也没那么多精神搞这些东西。

就用简单的就行了。

注意这里没有sonar:sonar,因为这里我用的是sonarqube with maven 的插件,他会自动添加sonar:sonar 和sonar.host.url,这里如果在加sonar:sonar 他会执行两遍

-Dmaven.sonar.dynamicAnalysis=reuseReports -Dsonar.projectKey=nai-paas-analysis -Dsonar.exclusions=**/Test*.java,**/*Test.java -Dsonar.projectName=xxx

可能大家有注意到,这样配置和在【Build】里配置不是一样的吗???

其实虽然命令是一样的,但是,他们所起到的效果是不一样的,如果在【Build】里去执行sonar命令,那么在项目界面那里就不会与sonarQube的链接,就是下面的两个,而且,在【Build】里执行sonar命令,必须加上sonar.host.url,这个和我们在本地mvn运行一样,但是在sonarQube analysis with maven 里配置的话,就不需要,因为我们之前就已经配置过了sonarQube server,然后我们安装过sonar scanner的插件,不需要sonar:sonar 和sonar.host.url

3.sonarQube配置错误

这个配置的是xml文件,在覆盖率扫描的时候,项服务器这部请求拿到了配置属性按这个配置解析就会报错。

代码语言:javascript复制
java.lang.IllegalStateException: Failed to parse JaCoCo XML report: /home/jenkins/data/workspace/test-ss/microservice-manager/auth/auth-common/target/coverage-reports/jacoco.exec
        at org.sonar.plugins.jacoco.XmlReportParser.parse(XmlReportParser.java:96)
        at org.sonar.plugins.jacoco.JacocoSensor.importReport(JacocoSensor.java:73)
        at org.sonar.plugins.jacoco.JacocoSensor.importReports(JacocoSensor.java:64)
        at org.sonar.plugins.jacoco.JacocoSensor.execute(JacocoSensor.java:48)

0 人点赞