jacoco+jenkins集成代码覆盖率

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中文件每天都会删除,所以构建前请保证目标服务当天构建过。

 

 

 

 

 

 

posted @ 2024-04-01 20:03  Alieen617  阅读(564)  评论(0编辑  收藏  举报