jenkins Sonarqube中的代码覆盖率百分比为0%

mcvgt66p  于 2022-11-21  发布在  Jenkins
关注(0)|答案(1)|浏览(499)

我使用Jenkins pipeline为一个Sping Boot 应用程序开发了一些JUnit测试,SonarQube上的覆盖率仍然是0%(我相信这可能是我的脚本或pom.xml的问题)
Jenkins上安装的插件:Sonargraph + Sonarqube +代码覆盖API + Jacoco插件这是我得到的警告

[INFO] Tests run: 19, Failures: 0, Errors: 0, Skipped: 0
[INFO] --- jacoco-maven-plugin:0.8.6:report (report) @ achat ---
[INFO] Skipping JaCoCo execution due to missing execution data file.
[INFO] BUILD SUCCESS

下面是我的Jenkins声纳声明脚本阶段:

sh '  mvn sonar:sonar -Dsonar.sources=src/main/java -Dsonar.css.node=. 
-Dsonar.java.binaries=. -Dsonar.host.url=http://192.168.2.2:9000/ 
-Dsonar.login=admin   -Dsonar.password=sonar -Dsonar.jacoco.reportPath=build/reports/jacoco.xml'

下面是我在Jenkins的测试阶段:

sh '  mvn test'
jacoco execPattern: 'target/jacoco.exec'

pom.xml中的属性

<properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.0</maven-jar-plugin.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <sonar.surefire.reportsPath>${basedir}/target/surefire-reports</sonar.surefire.reportsPath>
        <sonar.coverage.jacoco.xmlReportPaths>${basedir}/target/jacoco_report/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
        
    </properties>

pom.xml中的插件

<plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.6</version>

                <executions>
                    <execution>
                         <id>post-unit-test</id>
                          <phase>test</phase>
                           <goals>
                           <goal>report</goal>
                       </goals>
                       <configuration>
                      <outputDirectory>${jacoco.path}</outputDirectory>
                   </configuration>
                </execution>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                            <propertyName>surefireArgLine</propertyName>
                            <argLine>${surefireArgLine}</argLine>
                        </configuration>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
                            <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
enxuqcxy

enxuqcxy1#

我希望jacoco和surefire插件必须在哪里找到数据文件以及文件名上达成一致,这一点很清楚,但它们没有达成一致,这也是为什么这个插件不起作用的原因。
此外,对于最近的插件版本,您可能应该使用xml格式的数据文件,而不是二进制版本。在您当前的配置中,它们不仅在位置上不一致,一个插件指定二进制格式,而另一个插件指定xml格式。
我建议您具有如下属性设置:

<sonar.surefire.reportsPath>${basedir}/target/surefire-reports</sonar.surefire.reportsPath>
<sonar.coverage.jacoco.xmlReportPaths>${basedir}/target/jacoco_report/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>

在Jacoco插件中,确保您有:

<execution>
    <id>post-unit-test</id>
    <phase>test</phase>
    <goals>
        <goal>report</goal>
    </goals>
    <configuration>
        <outputDirectory>${jacoco.path}</outputDirectory>
    </configuration>
</execution>

Surefire插件在“配置”块中需要此信息:

<argLine>${surefireArgLine}</argLine>

相关问题