如何在 Jenkins 中使用 SonarQube 和 Maven 配置 Jacoco

How to configure Jacoco with SonarQube and Maven in Jenkins

我正在尝试启用 Sonarqube 代码覆盖扫描。我在 Eclipse 中从事 Maven 项目,并且已经成功设置了 Jenkins-build,包括 Sonar-scan。

我已经在本地成功使用Jacoco;我将 Jacoco 插件添加到 pom.xml 并通过 Run As-> Maven build... 执行了 jacoco:prepare-agent test jacoco:report。在那次通话之后,html 报告位于 target\site\jacoco 中,它们似乎是正确的。

现在我需要让它在 Jenkins 中工作,但我不知道如何正确配置构建。当前执行 Maven 目标 clean package -faeInvoke Standalone Sonar Analysis 构建步骤。 我发现 sonar.jacoco.reportPath 确实需要设置,但我不知道在哪里设置它或在哪里调用 jacoco:report 目标。另外我不确定我是否也需要将 jacoco 插件添加到 jenkins,或者在 maven 项目中这样做是否足够。

非常感谢任何帮助,如果我能做些什么来改进我的问题,也请告诉我。

是的,您需要在 jenkins 中安装和配置 jacoco 插件。

Foolow 这个 link 解释了它

https://dzone.com/articles/jacoco-jenkins-plugin

我终于成功了。如果有人有类似的问题,我会在这里发布我的解决方案:

在 Jenkins 中,需要配置属性 sonar.junit.reportsPath 和 sonar.jacoco.reportPath。无需在 Jenkins 中执行额外的目标。

在项目pom.xml中需要指定

    <properties>
       <jacoco-maven-plugin.version>0.7.4.201502262128</jacoco-maven-plugin.version>
    </properties>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.jacoco</groupId>
                                    <artifactId>jacoco-maven-plugin</artifactId>
                                    <versionRange>(,0.7.4.201502262128]</versionRange>
                                    <goals>
                                        <goal>prepare-agent</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco-maven-plugin.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

目标prepare-agent必须执行,但它首先生成一个

Resource Path Location Type Plugin execution not covered by lifecycle configuration

为了解决这个问题,需要 pluginManagement 块,因为它忽略了即将发生的问题。这里很明显使用versionRange而不仅仅是version,而且这个特定版本是必需的,更高版本在这里不起作用。