SonarQube + Maven + JaCoCo + GitLab CI:Sonar在升级到SonarQube 7.9.2后开始显示0%的代码覆盖率。

问题描述 投票:0回答:1
[我们将SonarQube升级到Version 7.9.2 (build 30863), Community Edition后,运行GitLab CI Pipeline会显示0.0%的覆盖率(从大约85%下降),尽管Sonar正在显示所有测试。

.gitlab-ci.yml中执行的Maven构建看起来像这样:

- mvn test sonar:sonar -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_TOKEN}

显然,这要处理臭名昭著的sonar.coverage.jacoco.xmlReportPathssonar.jacoco.reportPaths Sonar-JaCoCo插件设置(请参阅https://docs.sonarqube.org/pages/viewpage.action?pageId=1442166)。

查看管道作业日志后,发现以下内容(项目名称混淆为myProject):

SonarQube升级之前:

[INFO] Sensor JaCoCo XML Report Importer [jacoco] [INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms [INFO] Sensor SurefireSensor [java] [INFO] parsing [/builds/myProject/target/surefire-reports] [INFO] Sensor SurefireSensor [java] (done) | time=87ms [INFO] Sensor JaCoCoSensor [java] [WARNING] Property 'sonar.jacoco.reportPaths' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format). Please check that the JaCoCo plugin is installed on your SonarQube Instance. [INFO] Analysing /builds/myProject/target/jacoco.exec [INFO] Sensor JaCoCoSensor [java] (done) | time=206ms

SonarQube升级后:

[INFO] Sensor JaCoCo XML Report Importer [jacoco] [INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms [INFO] Sensor SurefireSensor [java] [INFO] parsing [/builds/myProject/target/surefire-reports] [INFO] Sensor SurefireSensor [java] (done) | time=86ms [INFO] Sensor JavaXmlSensor [java] [INFO] 1 source files to be analyzed [INFO] Sensor JavaXmlSensor [java] (done) | time=302ms
因此sonar.jacoco.reportPaths设置显然存在一些差异。值得注意的是,我没有明确设置这两个设置中的任何一个。

如何解决JaCoCo报告的解析问题,使其能够正常工作(无论使用旧设置还是新设置)?

[我们将SonarQube升级到7.9.2版(内部版本30863),社区版后,运行GitLab CI Pipeline会显示0.0%的覆盖率(从大约85%下降),尽管Sonar显示了...]]] >>

快速解答

mvn test替换mvn verify。不需要显式的设置声明。

我的调查过程

我已尝试使用显式设置值默认设置来执行构建。

1]

不建议使用的设置的默认默认值:-Dsonar.jacoco.reportPaths=target/jacoco.exec这将导致以下日志,表明此设置对于新的Sonar不再适用:

[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=57ms [INFO] Sensor SurefireSensor [java] [INFO] parsing [/builds/myProject/target/surefire-reports] [INFO] Sensor SurefireSensor [java] (done) | time=23ms [INFO] Sensor Removed properties sensor [java] [WARNING] Property 'sonar.jacoco.reportPaths' is no longer supported. Use JaCoCo's xml report and sonar-jacoco plugin. [INFO] Sensor Removed properties sensor [java] (done) | time=1ms

显然,覆盖范围保持在0.0%

另请参阅关于此主题的与SO相关的Ant问题:Display Sonar Code Coverage with jacoco.exec file in Sonar LTS 7.9.2

2)

新设置的默认默认值:-Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml注意:尽管(由于某种原因)没有在https://docs.sonarqube.org/pages/viewpage.action?pageId=1442166中记录此默认值,但我只是通过在本地jacoco.xml目录中搜索target才找到它的。

覆盖率保持在0.0%,GitLab CI作业日志开始终于清晰显示了一些内容:

[INFO] Sensor SonarCSS Rules [cssfamily] (done) | time=1ms [INFO] Sensor JaCoCo XML Report Importer [jacoco] [WARNING] Report doesn't exist: '/builds/myProject/target/site/jacoco/jacoco.xml' [INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=4ms [INFO] Sensor SurefireSensor [java]

很可惜,如果没有显式设置,则在运行时不会写入此日志。它将大大简化调查。所以现在我们有了一个了解:在我的GitLab CI管道上没有生成/target/site。显然,这是因为脚本仅包含mvn test,而通过Maven Build Lifecycle还不够。

查看Maven + Sonar示例:它们包含mvn verify sonar:sonarmvn install sonar:sonar

因此,我们开始:

3)

mvn verify+新设置的显式默认值:-Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml这有效!覆盖率显示在SonarQube上,与JaCoCo相关的日志部分中没有错误:

[INFO] Sensor JaCoCo XML Report Importer [jacoco] [INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=94ms [INFO] Sensor SurefireSensor [java] [INFO] parsing [/builds/myProject/target/surefire-reports] [INFO] Sensor SurefireSensor [java] (done) | time=92ms [INFO] Sensor JavaXmlSensor [java] [INFO] Sensor JavaXmlSensor [java] (done) | time=7ms

[4)

mvn verify,无显式设置。所以最后我尝试了没有任何设置值的方法,并且有效:

- mvn verify sonar:sonar -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_TOKEN}

摘要

    sonar.jacoco.reportPaths设置不适用于新的SonarQube版本(7.9.2+)。
  • 新的sonar.coverage.jacoco.xmlReportPaths设置的默认值为target/site/jacoco/jacoco.xml
  • 根本原因是未生成/target/site/jacoco目录(包括jacoco.xml和JaCoCo报告的所有其他文件)
  • 我要做的就是将mvn test替换为mvn verify

  • 未明确设置sonar.coverage.jacoco.xmlReportPaths的值时,[[主要声纳陷阱]没有写关于“找不到报告文件”的错误日志。 SonarQube开发人员对其进行修复将是一件好事。
  • java maven sonarqube code-coverage jacoco
    1个回答
    0
    投票
    快速解答
    © www.soinside.com 2019 - 2024. All rights reserved.