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