如何使用JaCoco统计代码覆盖率

从网络查了很多jacoco的统计测试覆盖率的方式,基本都没有找到合适的上下文,以至于不断的尝试,才终于达成目的

一、实现方案

目的

通过Jenkins插件,能够通过pipline的方式同时显示构建的流程及代码覆盖率视图
即:通过在Jenkinsfile文件中定义stage和shell脚本,来显示覆盖率

背景

  • Jenkins服务器+jacoco插件
  • 编译环境:maven
  • 项目结构:springboot

实现方式

1、pom.xml中增加依赖:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.7.201606060606</version>
    <executions>
        <execution>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2、Jenkinsfile中增加以下脚本

stage('Test') {
     steps {
         sh 'mvn clean test'
     }
  }
  
  stage('Generate Test Report') {
    steps {
        script {
           try {
                  sh 'mvn org.jacoco:jacoco-maven-plugin:report'
              } finally {
                  junit 'target/surefire-reports/*.xml'
              }
        }
    }
  }

 stage('Publish Test Coverage Report') {
   steps {
     step([$class: 'JacocoPublisher',
          execPattern: 'target/*.exec',
          classPattern: 'target/classes',
          sourcePattern: 'src/main/java',
          exclusionPattern: 'src/test*'
          ])
      }
  }

3、显示效果如下:
如何使用JaCoco统计代码覆盖率_第1张图片

二、其他方案: 通过Jenkins任务实现jacoco

1、在Jenkins主页上,新建任务
2、任务类型,选择自由风格,这样的话,配置的环节会有“构建后操作”,流水线类型的项目是没有这个配置项的
如何使用JaCoco统计代码覆盖率_第2张图片
3、git地址等按常规配置即可
4、构建阶段,选择shell脚本,mvn clean test
如何使用JaCoco统计代码覆盖率_第3张图片
5、配置构建后操作,这里主要就是report相关的配置了,网络上查到的方式大多都是配置这里的
如何使用JaCoco统计代码覆盖率_第4张图片
6、显示效果如下
如何使用JaCoco统计代码覆盖率_第5张图片
7、问题
这种方式来配置,只能是单独的Jenkins任务,无法和流水线融合。所以,建议使用第一种方案

三、其他问题

1、有些文章中会提到要在pom.xml中增加maven-surefire-report-plugin插件,我在没有配置的情况下,也能正常运行,但是Jenkinsfile的脚本里确实用到了target/surefire-reports/ 这个目录。需要检查mvn test后,target目录下是否有surefire相关的目录,没有的话,还是要把以下插件配置上去。

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>2.4.2</version>
    </plugin>

2、因为Jacoco的版本问题或者是使用gradle的问题,使用的命令可能会有差异,如:脚本里涉及到的

mvn org.jacoco:jacoco-maven-plugin:report

有些文章中会使用如下命令,但我这个版本是无法运行的。

./gradlew test jacocoTestReport --no-daemon

gradle方案,可参考以下文章

gradle实现jacoco+流水线

你可能感兴趣的:(DevOps)