首页 > 其他分享 >jacoco+jenkins集成代码覆盖率

jacoco+jenkins集成代码覆盖率

时间:2024-04-01 20:12:47浏览次数:28  
标签:集成 HTML sh neworiental jenkins 安装 jacoco

1.需先在jenkins服务器上安装apache-ant(已安装)

检查ant是否安装: ant -version

 

2.然后在jenkins服务器和测试环境上都安装jacoco(jenkins服务器和summer服务器已安装)

cd /neworiental/jacoco

wget https://repo1.maven.org/maven2/org/jacoco/jacoco/0.8.5/jacoco-0.8.5.zip

unzip jacoco-0.8.5.zip

 

3.jenkins中安装HTML Publisher plugin(已安装)

如何安装:Manage Jenkins --Manage Plugins --Available中搜索HTML Publisher 后点击安装

检查是否安装成功:到Manage Jenkins --Manage Plugins--Installed中可以搜到即已安装

 

二、jvm参数配置

启动java服务时需要增加:

-javaagent:/neworiental/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=17297,address=172.26.130.4 -Xverify:none

 

参数说明如下:

1) -javaagent: 的后面跟jacoco的安装路径

2) includes= :选择你要覆盖率的服务,也就是包名,*即所有文件

3) port=:选择你要打开的端口,jacoco的端口,与所对应的服务端口不能一样,与其他端口也不能冲突

4) address= tomcat服务所在机器的ip地址(如果想在跟服务同一台机器上执行ant任务的话,需要改为127.0.0.1)

5) -Xverify:none,避免启动报错的情况

 

如何操作:

在测试环境服务器/neworiental路径下,找到app-jenkins-homework.sh和app-jenkins.sh 脚本,在脚本中启动java服务语句中添加上面参数

app-jenkins-homework.sh 中:

 

app-jenkins.sh 中:

 

三、在jenkins服务器的/neworiental/codeCoverage/环境/路径下新建build.xml

 1 <?xml version="1.0" ?>
 2 <project name="wftestReport" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
 3     <!--Jacoco的安装路径-->
 4     <property name="jacocoantPath" value="/neworiental/jacoco/lib/jacocoant.jar"/>
 5 
 6     <!--最终生成.exec文件的路径,Jacoco就是根据这个文件生成最终的报告的-->
 7     <property name="jacocoexecPath" value="/neworiental/codeCoverage/summer/mergedwftest.exec"/>
 8 
 9     <!--生成覆盖率报告的路径-->
10     <property name="reportfolderPath" value="/neworiental/codeCoverage/summer/report"/>
11 
12     <!--远程服务的ip地址-->
13     <property name="server_ip" value="172.26.130.4"/>
14 
15     <!--前面配置的服务打开的端口,要跟上面配置的一样-->
16     <!--这个端口有别于服务的端口,相当于是嵌在服务里的监视器-->
17     <property name="server_port" value="17297"/>
18 
19 
20     <!--源代码路径,只到java层级就可以了-->
21     <!--可以配置多个源代码-->
22     <property name="exam_src" value="/neworiental/jenkins/workspace/exam-summer/seal-exam/src/main/java" />
23     <property name="homework-student_src" value="/neworiental/jenkins/workspace/homework-manager-student-summer/seal-common/src/main/java" /> 
24 
25     <!--.class文件路径-->
26     <!--跑的是class,标注的是源码-->
27     <property name="exam_class" value="/neworiental/jenkins/workspace/exam-summer/seal-exam/target/classes"/>
28     <property name="homework-student_class" value="/neworiental/jenkins/workspace/homework-manager-student-summer/seal-common/target/classes"/>
29 
30     <!--合并报告路径-->
31     <property name="mergePath" value="/neworiental/codeCoverage/summer/report" />
32 
33 
34 
35     <!--让ant知道去哪儿找Jacoco-->
36     <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
37         <classpath path="${jacocoantPath}" />
38     </taskdef>
39 
40     <!--dump任务:根据前面配置的ip地址,和端口号,访问目标服务,并生成.exec文件。-->
41     <target name="dump">
42         <jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoexecPath}" port="${server_port}" append="false"/>
43     </target>
44     <target name="merge">
45         <!--将路径下的exec文件全部合并,并存放到destfile中-->
46         <jacoco:merge destfile="/root/jacoco/merged.exec">
47             <fileset dir="${mergePath}" includes="*.exec"/>
48         </jacoco:merge>
49     </target>
50 
51 
52 
53   <!--jacoco任务:
54              根据前面配置的源代码路径和.class文件路径,
55       根据dump后,生成的.exec文件,生成最终的html覆盖率报告。-->
56   <target name="report">
57     <!--暂时不删除,一旦删除,其他两个的报告也没了--> 
58       <delete dir="${reportfolderPath}" />
59       <mkdir dir="${reportfolderPath}" /> 
60         <jacoco:report>
61             <executiondata>
62                 <file file="${jacocoexecPath}" />
63             </executiondata>             
64             <structure name="代码覆盖率报告">          
65                 <group name="seal_exam"><classfiles><fileset dir="${exam_class}" /></classfiles><sourcefiles encoding="utf-8"> <fileset dir="${exam_src}" /></sourcefiles></group>
66                 <group name="homework-manager-student"><classfiles><fileset dir="${homework-student_class}" /></classfiles><sourcefiles encoding="utf-8"><fileset dir="${homework-student_src}" /></sourcefiles></group>               
67             </structure>
68           <html destdir="${reportfolderPath}" encoding="utf-8" />    
69           <csv destfile="/neworiental/jacoco/coverage/report.csv" />         
70         </jacoco:report>
71   </target>
72 </project>

dump中参数解释

1) address:目标的jacoco的ip地址

2) port:目标的jacoco开放的端口号

3) dump:是否转储执行数据。

4) reset:执行导出后是否重置数据

5) destfile:生成的数据的存放位置

6) append:如果设置为 true,执行数据文件已存在,覆盖率数据追加到现有文件中。如果设置为 false,现有执行数据文件将被替换。

 

四、生成覆盖率报告

需保证要跑覆盖率的服务已启动,然后在jenkisn服务器的build.xml文件所在路径依次执行下面两个命令:

ant dump

ant report

 

五、集成到jenkins

jenkins操作:

1.新建一个新的构建项目

 

2.输入项目名称,选择freestyle project

3.在Build中选择Execute shell

 

4.在commond中输入sh /neworiental/codeCoverage/summer/build.sh

 

build.sh:将第四步中的两个命令写到这个脚本中了

 

5.在Add post-build action中选择Publish HTML report

 

6.HTML中第一行输入生成报告的路径

 

7.保存配置并构建该项目,构建完成后即可生成HTML报告

 

8.点击HTML Report即可查看报告

 

注:代码覆盖率依赖jenkins服务器/neworiental/jenkins/workspace中的代码,workspace中文件每天都会删除,所以构建前请保证目标服务当天构建过。

 

 

 

 

 

 

标签:集成,HTML,sh,neworiental,jenkins,安装,jacoco
From: https://www.cnblogs.com/hd-test/p/18109273

相关文章

  • SpringBoot集成MyBatis-Plus快速入门Demo
    目录1.MyBatis-Plus概述2.MyBatis-Plus框架结构3. MyBatis-Plus快速入门3.1 创建表3.2 创建工程3.3 导入依赖3.4添加配置文件application.yml,配置数据库信息3.5 创建实体类(包括自动填充)3.6创建配置类(包括配置乐观锁、分页、逻辑删除等插件) 3.7编写自动填......
  • Django 中集成 CKEditor 富文本编辑器详解
    Django中集成CKEditor富文本编辑器详解原文链接:https://blog.csdn.net/Rocky006/article/details/135130010概要在Web应用中,富文本编辑器是提高用户体验的重要组件之一。CKEditor是一款流行的、功能丰富的富文本编辑器。在Django项目中集成CKEditor不仅可以提升内容......
  • 微服务集成Spring Cloud Alibaba Seata(一)Seata服务搭建
    1、Seata介绍Seata是阿里开源的一款分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。数据库事务我们都知道,事务都是遵循ACID原则。而通过使用Seata可以实现在两个服务模块通过RPC调用时触发事务,如果有异常会实现业务数据回滚,保证数据的一致性。官网地址:https://......
  • Jenkins Pipeline 记录
    pipeline{agent{//确认任务执行的节点可以是any任何节点none不选择节点label'150'}options{//设置参数timeout(time:4,unit:'HOURS')//超时时间1小时,如果不加unit参数默认为1分buildDiscarder(logRotator(numToKeepStr:'5'))//保留三个历史构建版本dis......
  • 五、Yocto集成QT5(基于Raspberrypi 4B)
    Yocto集成QT5本篇文章为基于raspberrypi4B单板的yocto实战系列的第五篇文章:一、yocto编译raspberrypi4B并启动二、yocto集成ros2(基于raspberrypi4B)三、Yocto创建自定义的layer和image四、Yocto创建静态IP和VLAN本章节实操代码请查看github仓库:meta-rpi-robot......
  • Linux服务器运行jenkins
    环境说明linux系统版本:lsb_release-a  JDK版本:1.8  maven版本:3.9.6  不同的操作系统以及软件版本,可能会遇到不一样的问题,一定要注意版本问题。 .1.jenkins版本选择。官网如下,选择一个长期支持板,会稳定很多,也需要考虑JDK版本的支持。因此自己选择使用2.346......
  • 模型调优的艺术:超参数调整与集成方法
    目录1.前言2.超参数搜索策略2.1.网格搜索(GridSearch)2.2.随机搜索(RandomSearch)3.模型集成技术3.1.Bagging(BootstrapAggregating)3.2.Boosting4.实例:优化现有模型性能5.总结1.前言         模型调优是机器学习实践中至关重要的一环,它关乎模型能否在新......
  • SpringBoot集成Junit单元测试找不到bean报错:expected at least 1 bean which qualifie
    发生缘由调用封装的MinIOstarter运行环境电脑系统版本:Windows1064bitIdea:2023.2(UltimateEdition)Maven:apache-maven-3.6.0Docker:Dockerversion26.0.0,build2ae903eMinIO:加载本地镜像,不清楚版本号jdk版本:jdk-8spring.boot.version:2.3.9.RELEASEminio依赖:7.1.......
  • FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr
    ​FFmpeg内置了aac音频格式,在《FFmpeg开发实战:从零基础到短视频上线》一书的“5.2.2 Linux环境集成mp3lame”又介绍了如何给FFmpeg集成mp3格式,常见的音频文件除了这两种之外,还有ogg和amr两种格式也较常用。其中ogg格式的编解码依赖于libogg和libvorbis,而amr格式的编解码依赖于op......
  • 【Kingbase8数据库】springboot jpa集成Kingbase8各种报错
    AccesstoDialectResolutionInfocannotbenullwhen‘hibernate.dialect’notset去了stackoverflow:java-SpringBootJPA-AccesstoDialectResolutionInfocannotbenullwhen‘hibernate.dialect’notset-StackOverflow不是PostgreSQL,那就换成mysql的嘛:spr......