首页 > 其他分享 >Jenkins+Ant+JaCoCo的代码覆盖率集成实践

Jenkins+Ant+JaCoCo的代码覆盖率集成实践

时间:2024-10-16 11:03:18浏览次数:5  
标签:Web Ant 构建 服务器 Jenkins JaCoCo

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服务运行的基础,也是测试任务的目标对象。

三、集成实践

流程图

image

前置准备工作

  1. Jenkins服务器配置
  2. Jenkins插件安装
    • 在Jenkins服务器上安装HTML Publisher插件。详细步骤及离线安装方法,请查阅《Jenkins离线安装插件》以获取帮助或进行实战演练。
  3. Ant工具下载
    • 在Jenkins服务器上完成Ant工具的下载与安装流程。
  4. 工具下载
    • 在Jenkins服务器和Web服务器上,下载并准备好jacoco工具。jacoco作为代码覆盖率工具的使用详情,可参考《代码覆盖率工具之Jacoco》进行学习或实际操作。
  5. Jenkins服务器资源准备
    • 确保Jenkins服务器上已获取Web服务的java源文件class文件,以便后续构建和测试流程使用。
  6. Web服务器部署
    • 在Web服务器上,准备好Web服务的jar包,以便进行部署和发布操作。

实践步骤

在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构建脚本

  1. 创建一个名为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>
  1. 创建一个名为build.sh的Shell脚本文件,并添加以下内容,以便执行Ant构建任务:
#!/bin/sh
source /etc/profile
cd /opt/jacoco/neworiental # build.xml 文件的路径
ant dump
ant report

在Jenkins服务器上创建一个新的构建项目

  1. Build Steps中添加Execute shell步骤,并配置为执行build.sh脚本。

image

  1. Post-build Actions中添加Publish HTML reports步骤,以便发布生成的HTML报告。

image

image

  1. 保存配置并启动构建任务。构建完成后,即可在Jenkins项目中查看生成的HTML报告。

image

  1. 点击HTML Report链接,即可查看详细的代码覆盖率报告。

image

标签:Web,Ant,构建,服务器,Jenkins,JaCoCo
From: https://www.cnblogs.com/test-gang/p/18457884

相关文章

  • qt5报错无法枚举xxx字体:qt.qpa.fonts: Unable to enumerate family ' "WenYue XinQing
    问题描述:使用qt5时,出现错误提示:qt.qpa.fonts:Unabletoenumeratefamily'"WenYueXinQingNianTi(Non-CommercialUse)"'虽然不影响正常使用,但是还是希望解决。猜测:可能是qt5在自动枚举字体时,系统中安装的字体名称过长或其他参数不合规导致qt5无法枚举。如果此字体不是项......
  • 1.5K+ Star!assistant-ui:一套构建AI聊天界面的组件库
    assistant-ui简介assistant-ui[1]是一套用于构建AI聊天界面的React组件库。它集成了多种模型提供商,如OpenAI、Anthropic、AWS、Google等,并支持自定义API集成。它旨在简化AI聊天界面的开发过程,使开发者能够快速构建出功能丰富的聊天应用。项目特点主要特点模型提供商支......
  • 深入解析CSS中的!important规则
    深入解析CSS中的!important规则一、引言在CSS的世界里,样式的优先级通常由选择器的特异性、在样式表中的位置(后来的规则覆盖先前的规则)以及继承等因素决定。然而,!important规则就像一把双刃剑,它可以打破这些规则,赋予某些样式声明更高的优先级。本文将深入探讨!important的......
  • 使用Pydantic和SqlAlchemy实现树形列表数据(自引用表关系)的处理,以及递归方式处理数据差
    在我的设计框架业务中,字典大类、部门机构、系统菜单等这些表,都存在id、pid的字段,主要是作为自引用关系,实现树形列表数据的处理的,因为这样可以实现无限层级的树形列表。在实际使用Pydantic和SqlAlchemy来直接处理嵌套关系的时候,总是出现数据在Pydantic的对象转换验证上,爬坑一段时间......
  • 代码覆盖率工具之Jacoco
    代码覆盖率工具之JacocoJaCoCo(JavaCodeCoverage)是一款面向Java语言的开源代码覆盖率工具,以其小型化和轻量化著称。它能够提供代码在测试过程中的覆盖率信息,帮助开发人员和测试人员识别未测试的代码部分,从而提高代码质量和测试的完整性。JaCoCo可以嵌入到Ant、Maven等构建工具中......
  • jenkins
     说明:权限检查:这里只是简单地输出一个消息,实际项目中可能需要集成权限检查系统。生成配置:根据实际需求生成配置文件。拉取代码:使用Git从GitHub仓库拉取代码。物料检查出:检查依赖材料或资源是否就绪。代码检查:使用Maven执行代码静态分析。构建审批:需要手动审批才能继续构......
  • 【Linux】【Jenkins】后端maven项目打包教程-Linux版
    本次安装版本:2.4+jenkins详细安装教程1、安装git环境2、安装mavne环境2.1下载依赖2.2、解压、赋权2.2、配置环境变量2.3、验证安装3、jenkins-插件下载3.1、进入jenkins-->系统管理3.2、进入系统管理-->插件管理3.3、下载==两个==插件(如果之前下载了,这里是搜索不到的,请......
  • 科研绘图系列:R语言象限热图(quadrant heatmap)
    文章目录介绍加载R包数据韦恩图vennRHHO2对象其他系统信息介绍在高通量数据分析中,比较两种实验条件下的差异表达(DE)模式是常见的。传统上,研究人员会设定一个截止值(例如p值=0.05或FDR5%)。然而,采用这些特定的截止值似乎是武断的。例如,可能在这些特定截止......
  • 深入理解Java并发读写锁——ReentrantReadWriteLock
    ReentrantReadWriteLock使用场景ReentrantReadWriteLock是Java的一种读写锁,它允许多个读线程同时访问,但只允许一个写线程访问(会阻塞所有的读写线程)。这种锁的设计可以提高性能,特别是在读操作的数量远远超过写操作的情况下。在并发场景中,为了解决线程安全问题,我们通常会使用关......
  • Avantes光谱仪PVD和CVD制程等离子体光谱诊断
    薄膜材料因其在多个方面的优异性能,使得应用十分广泛,薄膜的制备有多种方法,磁控溅射法是当今制备薄膜比较常用的一种方法。而用磁控溅射法制备出高质量薄膜的关键是薄膜生长过程中的工艺参数选择与稳定性控制。为此在薄膜生长中的工艺参数对薄膜的各种性能影响方面做了大量探讨与......