Jenkins+Ant+JaCoCo的代码覆盖率集成实践
一、工具介绍
- Jenkins:
Jenkins是一个开源的、基于Java开发的持续集成工具,它可以帮助开发人员自动化构建、测试和部署软件项目。 - Ant:
Apache Ant是一个基于Java的自动化构建工具,类似于Maven,但更为灵活,适用于各种复杂的构建任务。 - JaCoCo:
JaCoCo是一个Java代码覆盖率工具,用于测量代码执行过程中哪些代码行被执行到,从而评估测试的有效性。
二、环境准备
Jenkins服务器环境准备
- Jenkins服务安装:在服务器上安装并配置Jenkins服务,确保其稳定运行,为后续的自动化构建与测试任务提供坚实基础。
- Ant工具安装:下载并安装Apache Ant工具,它是我们自动化构建流程中的重要一环,能够处理复杂的构建任务。
- JaCoCo工具安装:安装JaCoCo代码覆盖率工具,这是评估测试有效性的关键。我们将利用它来收集和分析代码覆盖率数据。
- Web服务源码与.class文件:准备Web服务的源代码文件(.java)以及编译后的.class文件,这些文件是构建和测试任务的基础。
Web服务器环境准备
- JaCoCo工具安装:在Web服务器上同样需要安装JaCoCo工具,以便与Jenkins服务器协同工作,共同实现代码覆盖率的收集与分析。
- Web服务jar包:部署Web服务的jar包至Web服务器,这是Web服务运行的基础,也是测试任务的目标对象。
三、集成实践
流程图
前置准备工作
- Jenkins服务器配置:
- 确保Jenkins服务已正确安装并处于运行状态。如需指导,请参考《Linux安装Jenkins指南》进行学习或实践操作。
- Jenkins插件安装:
- 在Jenkins服务器上安装
HTML Publisher
插件。详细步骤及离线安装方法,请查阅《Jenkins离线安装插件》以获取帮助或进行实战演练。
- 在Jenkins服务器上安装
- Ant工具下载:
- 在Jenkins服务器上完成
Ant
工具的下载与安装流程。
- 在Jenkins服务器上完成
- 工具下载:
- 在Jenkins服务器和Web服务器上,下载并准备好
jacoco
工具。jacoco作为代码覆盖率工具的使用详情,可参考《代码覆盖率工具之Jacoco》进行学习或实际操作。
- 在Jenkins服务器和Web服务器上,下载并准备好
- Jenkins服务器资源准备:
- 确保Jenkins服务器上已获取Web服务的
java源文件
及class文件
,以便后续构建和测试流程使用。
- 确保Jenkins服务器上已获取Web服务的
- Web服务器部署:
- 在Web服务器上,准备好Web服务的
jar包
,以便进行部署和发布操作。
- 在Web服务器上,准备好Web服务的
实践步骤
在Web服务器中运行Web服务
执行以下命令,在Web服务器上启动Web服务,并启用Jacoco代码覆盖率监测:
java -javaagent:/opt/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=6111,address=192.168.254.139 -Xverify:none -jar /opt/IAM_JAVA/IAM/src/MyApp.jar
在Jenkins服务器上配置Ant构建脚本
- 创建一个名为
build.xml
的文件,并添加以下内容,以便配置Jacoco代码覆盖率报告生成任务:
<?xml version="1.0"?>
<project name="wftestReport" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
<!--Jacoco的安装路径-->
<property name="jacocoantPath" value="/opt/jacoco/lib/jacocoant.jar" />
<!--最终生成.exec文件的路径,Jacoco就是根据这个文件生成最终的报告的-->
<property name="jacocoexecPath" value="/opt/jacoco/project/mergedwftest.exec" />
<!--生成覆盖率报告的路径-->
<property name="reportfolderPath" value="/opt/jacoco/project/report" />
<!--远程服务的ip地址-->
<property name="server_ip" value="192.168.254.139" />
<!--前面配置的服务打开的端口,要跟上面配置的一样-->
<!--这个端口有别于服务的端口,相当于是嵌在服务里的监视器-->
<property name="server_port" value="6111" />
<!--源代码路径,只到java层级就可以了-->
<!--可以配置多个源代码-->
<property name="exam_src" value="/opt/IAM_JAVA/IAM/src" />
<!--<property name="homework-student_src" value="/neworiental/jenkins/workspace/homework-manager-student-summer/seal-common/src/main/java"/>-->
<!--.class文件路径-->
<!--跑的是class,标注的是源码-->
<property name="exam_class" value="/opt/IAM_JAVA/IAM/src/bin" />
<!--<property name="homework-student_class" value="/neworiental/jenkins/workspace/homework-manager-student-summer/seal-common/target/classes"/>-->
<!--合并报告路径-->
<property name="mergePath" value="/opt/jacoco/project/report" />
<!--让ant知道去哪儿找Jacoco-->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${jacocoantPath}" />
</taskdef>
<!--dump任务:根据前面配置的ip地址,和端口号,访问目标服务,并生成.exec文件。-->
<target name="dump">
<jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoexecPath}" port="${server_port}" append="false" />
</target>
<target name="merge">
<!--将路径下的exec文件全部合并,并存放到destfile中-->
<jacoco:merge destfile="/root/jacoco/merged.exec">
<fileset dir="${mergePath}" includes="*.exec" />
</jacoco:merge>
</target>
<!--jacoco任务:根据前面配置的源代码路径和.class文件路径,根据dump后,生成的.exec文件,生成最终的html覆盖率报告。-->
<target name="report">
<!--暂时不删除,一旦删除,其他两个的报告也没了-->
<delete dir="${reportfolderPath}" />
<mkdir dir="${reportfolderPath}" />
<jacoco:report>
<executiondata>
<file file="${jacocoexecPath}" />
</executiondata>
<structure name="代码覆盖率报告">
<group name="seal_exam">
<classfiles>
<fileset dir="${exam_class}" />
</classfiles>
<sourcefiles encoding="utf-8">
<fileset dir="${exam_src}" />
</sourcefiles>
</group>
<!-- <group name="homework-manager-student">
<classfiles>
<fileset dir="${homework-student_class}" />
</classfiles>
<sourcefiles encoding="utf-8">
<fileset dir="${homework-student_src}" />
</sourcefiles>
</group> -->
</structure>
<html destdir="${reportfolderPath}" encoding="utf-8" />
<csv destfile="/opt/jacoco/coverage/report.csv" />
</jacoco:report>
</target>
</project>
- 创建一个名为
build.sh
的Shell脚本文件,并添加以下内容,以便执行Ant构建任务:
#!/bin/sh
source /etc/profile
cd /opt/jacoco/neworiental # build.xml 文件的路径
ant dump
ant report
在Jenkins服务器上创建一个新的构建项目
- 在
Build Steps
中添加Execute shell
步骤,并配置为执行build.sh
脚本。
- 在
Post-build Actions
中添加Publish HTML reports
步骤,以便发布生成的HTML报告。
- 保存配置并启动构建任务。构建完成后,即可在Jenkins项目中查看生成的HTML报告。
- 点击
HTML Report
链接,即可查看详细的代码覆盖率报告。