集成系统测试覆盖率和代码质量检查jacoco+sonarQube+sonarScanner+ant+jenkins环境搭建

本文档详细介绍了如何集成jacoco、sonarQube、sonar-scanner、ant和jenkins,以实现系统测试覆盖率和代码质量检查。首先,介绍了所需的环境和工具下载。接着,逐步讲解了jenkins、ant、sonarQube的安装配置,包括数据库设置和服务配置。此外,还详细阐述了jacoco的监控服务启动代理和ant的构建过程。最后,介绍了如何将所有组件集成到jenkins中,以自动化执行覆盖率分析和代码质量检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


title: jacoco+sonarQube+sonar-scanner+ant+jenkins环境搭建
tags: jacoco,sonarQube,sonar-scanner,ant,jenkins
grammar_cjkRuby: true


这里主要介绍集成和系统测试覆盖率环境搭建,并简单介绍各个工具。
关于单元测试的覆盖率监控(只需要修改ant或maven配置即可),下一篇说明

环境准备

需要环境

jdk1.8+
centos 7
posgresql 9.6

工具下载

jacoco 0.8.2 https://www.eclemma.org/jacoco/
ant 1.10.5 https://ant.apache.org/bindownload.cgi
sonarQube 7.4 https://www.sonarqube.org/
sonar-scanner 3.2 https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
jenkins 2.147 https://jenkins.io/

1.官方文档

官方文档中内容很全,大部分都可以参考配置。

1.1.jacoco官方文档

https://www.eclemma.org/jacoco/trunk/doc/

1.2.sonarQube Analysis Parameters 参考文档

https://docs.sonarqube.org/latest/analysis/analysis-parameters/

1.3.sonar-scanner 参考文档

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

2.基础环境配置安装

2.0.服务配置说明

服务器A:jenkins、ant、sonar-scanner 以及 jacocoant.jar文件,分析覆盖率、生成报告、上传平台、持续集成
服务器B:单独搭建 sonarQube服务,sonarQube的平台,用户展示数据
服务器C:被监控应用程序 以及 jacocoagent.jar文件 ,jacocoagent代理监控覆盖率并提供服务给服务器A来获取
在这里插入图片描述

2.1.搭建步骤一-jenkins安装配置(rpm安装)

这里介绍简单的安装,有问题自行百度,下载rpm包,传到服务器,执行安装命令

rpm -ih jenkins-2.147.noarch.rpm

自动安装完成之后目录:
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log Jenkins日志文件

相关命令:

service jenkins start/stop/restart/status 
启动/停止/重启/查看状态

2.2.搭建步骤二-ant和sonar-scanner环境变量

解压ant和sonar-scanner到 jenkins 服务器上。
编辑/etc/profile和/etc/bashrc,末尾加入,并保存:

export ANT_HOME=/usr/apache-ant-1.10.5
export PATH=$PATH:$ANT_HOME/bin
export SONAR_SCANNER_HOME=/data/sonar-scanner-3.2.0.1227-linux
export PATH=$PATH:$SONAR_SCANNER_HOME/bin

source /etc/profile和/etc/bashrc 使配置生效

[root@centos-7 ~]# source /etc/bashrc
[root@centos-7 ~]# source /etc/profile

验证输入ant和 sonar-scanner 命令验证配置是否成功:

[root@centos-7 ~]# ant -version
Apache Ant(TM) version 1.10.5 compiled on July 10 2018
[root@centos-7 ~]# sonar-scanner -h
INFO: 
INFO: usage: sonar-scanner [options]
INFO: 
INFO: Options:
INFO:  -D,--define <arg>     Define property
INFO:  -h,--help             Display help information
INFO:  -v,--version          Display version information
INFO:  -X,--debug            Produce execution debug output

2.3.搭建步骤三-sonarQube安装配置。

2.3.1.基础配置

解压到服务器(和jenkins不需要同一台),

创建sonar用户(sonarQube不能在ROOT下运行 会报错):

 #创建用户
 adduser sonarUser 
 #设置密码
 pwdword  sonarUser
 #修改目录所有者
 chown -R sonarUser:sonarUser sonarqube-7.4
 #切换到 sonar用户
 su sonarUser
 执行命令:
 sonarqube-7.4/bin/linux-x86-64/sonar.sh start

浏览器输入:http://服务器IP:9000 能出现页面即可。
初始账号密码: admin admin
如不能访问请查看logs下日志,或者后面的常见问题

2.3.2.数据库配置

首先postgresql数据库中 创建sonar数据库 并指定数据库名即可。
数据库用户名密码 要写在最前面 否则会报错无法连接。
sonarqube-7.4/conf/sonar.properties

sonar.jdbc.username=postgres
sonar.jdbc.password=aorise

sonar.jdbc.url=jdbc:postgresql://10.16.4.57:5432/sonar?currentSchema=public

sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin

重启服务

sonarqube-7.4/bin/linux-x86-64/sonar.sh restart

稍微等待长一段时间,需要创建表,访问地址能进入。并且查看数据库有创建相关表。
初始账号密码: admin admin
在这里插入图片描述

2.3.3.services和开机自启动服务配置

系统基本service服务配置目录(此目录勿动,一般情况下只放系统核心基础服务配置,否存放应用注册类服务配置):
/etc/systemd/system
CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,
有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下。

配置过程如下:
我们配置带自启动功能的service 所以目录为:/usr/lib/systemd/system
1、进入目录并编辑创建 sonarQube.service
cd /usr/lib/systemd/system
vim sonarQube.service
2、输入如下内容,并保存:

[Unit]
Description=sonarQube
#顾名思义,在网络加载完成后触发
After=network.target

[Service]
#指定执行用户信息
User=sonarUser
Group=sonarUser
#执行模式
Type=forking
#指定pid文件,只需要修改路径和 sonar.sh文件一致
PIDFile=/data/sonarqube-7.4/bin/linux-x86-64/SonarQube.pid
#指定start和stop方法的执行命令
ExecStart=/data/sonarqube-7.4/bin/linux-x86-64/sonar.sh start
ExecStop=/data/sonarqube-7.4/bin/linux-x86-64/sonar.sh stop
#允许使用临时空间,一般为true
PrivateTmp=true

[Install]
WantedBy=multi-user.target

3、配置开机启动和相关命令

#配置文件路径
/usr/lib/systemd/system/sonarQube.service
#开机启动或者取消开机启动
systemctl  enable/disable sonarQube.service
#使用systemctl和 service均可以启动停止服务
service sonarQube start/stop/restart
systemctl  start/stop/restart sonarQube.service
#原始的使用sh文件启动 依然可用
/data/sonarqube-7.4/bin/linux-x86-64/sonar.sh start(stop status restart)

2.3.4.常见错误:

logs目录下查看日志
1、无法使用root用户启动: 完成基础配置,创建基础用户并修改文件夹所有权。
2、报错部分文件没有权限: 重新对目录执行 chown -R sonarUser:sonarUser sonarqube-7.4(有可能是 中途错误的使用root用户启动了服务,产生了临时文件权限是root。)
3、报错数据库连接不上: 数据库配置错误,且数据库账号密码一定要写到url的前面。
4、如果配置的是mysql数据库,执行大项目的时候,执行过程正常但最后报告上传失败: 修改mysql配置文件中的max_allowed_packet=50M(大小依据log显示的报告大小)。重启mysql
5、部分项目使用mysql把max_allowed_packet修改到足够大了,依然无法上传: 这个问题还没解决 换到了postgresql 没这个问题

3.jacoco和ant

3.1.简介

jacoco用来监控覆盖率 结合ant完成 dump(生成exec数据文件) 和 report操作(生成报告)。
Java Agent 可以通过如下的JVM参数来启动:
-javaagent:[yourpath/]jacocoagent.jar=[opt1]=[val1],[opt2]=[val2]
其中:
output=file/tcpserver/tcpclient
1,文件,当JVM退出时将执行数据写到本地
2,TCP Socket Server,以外部工具的形式连接JVM,通过socket获取执行数据。作为一个server服务器发布出去,可以从此处获取数据。
3,TCP Sockect Client,程序启动时Agent连接到TCP端点,通过request将执行数据输出。

结合官网中 Java Agent 相关参数说明,得到我们最终需要的命令如下:

#分别指定使用tcpserver模式,指定端口(确保没有被占用)和ip地址(一般本地)
-javaagent:/data/javaweb/jacocoagent.jar=output=tcpserver,port=8893,address=10.16.3.10

3.2.监控服务启动代理

1、将下载的jacoco解压,jacocoagent.jar传到需要监控覆盖率的应用服务器
2、在服务jvm启动参数中添加 (tomcat需要修改catalina.sh中的JAVA_OPTS参数)

-javaagent:/data/javaweb/jacocoagent.jar
### 回答1: Mybatis是一种流行的Java ORM框架,它提供了几种查询结果返回类型,其中之一就是MapMybatis查询返回Map的方式可以通过在SQL映射文件中使用resultType属性指定为Map来实现。通常,我们可以使用类似于以下示例代码的方式: <select id="selectUser" resultType="map"> select * from user where id=#{id} </select> 当我们执行此查询时,Mybatis返回一个包含查询结果数据的Map对象。在这个Map对象中,键是列名,值是对应的列的值。 我们可以通过以下代码将查询结果转换为Map对象: Map<String, Object> result = sqlSession.selectOne("selectUser", 1); 在这个例子中,我们将查询结果转化为一个包含键和值的Map对象。这个Map对象的键是每个列的名称,值是对应的行数据。这样,我们就可以通过这个Map对象来实现数据的操作。 总的来说,Mybatis查询返回Map是一种非常方便的方式,可以通过映射文件中的简单指定来实现。然后,我们可以通过处理这些Map对象来实现复杂的数据操作。 ### 回答2: Mybatis查询返回`Map`是一种常见的数据返回方式,它将查询结果以`Map`的形式返回,以便于快速访问和操作。在使用Mybatis进行查询时,我们可以通过以下步骤返回`Map`对象: 1.在Mapper.xml中编写SQL语句,并选取返回值类型为`Map` ``` <select id="selectUser" parameterType="int" resultType="java.util.Map"> select * from user where id = #{id} </select> ``` 2.在Java代码中执行查询,并获取返回Map对象 ``` SqlSession sqlSession = sqlSessionFactory.openSession(); Map<String, Object> userMap = sqlSession.selectOne("selectUser", 1); ``` 在返回的`Map`中,键值对的形式为列名和对应的值,我们可以根据需要获取相应的值。例如,获取用户的名字和年龄可以这样写: ``` String name = (String)userMap.get("name"); int age = (int)userMap.get("age"); ``` 需要注意的是,当查询结果含有多条记录时,返回的`Map`对象只包含第一条记录的数据。此时需要使用`selectList`方法返回一个`List<Map>`来获取所有记录的数据。同时,在查询结果中,如果存在名字相同的列,Mybatis会自动将后面的列值覆盖前面的列值,因此建议在查询时尽量避免列名重复。 总而言之,Mybatis查询返回`Map`是一种方便快捷的数据返回方式,在需要快速获取数据时特别适用。但需要根据实际情况来判断是否适合使用,并注意使用过程中的一些细节。 ### 回答3: MyBatis 是一个流行的 ORM(对象关系映射)框架,用于简化数据库访问。MyBatis 查询返回 Map 是一种常见的查询结果格式,其主要优势在于可以根据查询结果的键名来访问对应的数据值。 在 MyBatis 中,我们可以使用 @MapKey 注解将查询结果转换为 Map。这个注解可以用于指定 Map 的键名,例如: ```java @MapKey("id") List<Map<String, Object>> selectUsersById(List<Integer> ids); ``` 这个示例中,我们使用 @MapKey 注解将查询结果转换为一个 Map,其中键名为 id,值为对应的 Map 对象。这样,我们就可以通过键名 id 来快速访问对应的用户信息。 当然,我们也可以使用自定义的键名。例如: ```java @MapKey("userName") List<Map<String, Object>> selectAllUsers(); ``` 这个示例中,我们将查询结果转换为一个 Map,其中键名为 userName,值为对应的 Map 对象。这样,我们就可以根据用户名来快速访问对应的用户信息。 除了使用 @MapKey 注解,我们还可以使用 ResultMap 自定义查询结果映射。例如: ```xml <resultMap id="userMap" type="java.util.HashMap"> <id column="id" property="id"/> <result column="user_name" property="userName"/> <result column="email" property="email"/> </resultMap> <select id="selectAllUsers" resultMap="userMap"> select id, user_name, email from users </select> ``` 这个示例中,我们定义了一个 resultMap,将查询结果映射为一个 HashMap。通过 column 和 property 属性可以指定键名和值的映射关系。 总的来说,MyBatis 查询返回 Map 是一种非常实用的查询结果格式,可以方便快捷地访问查询结果。同时,我们也可以通过 @MapKey 和 ResultMap 来自定义键名和值的映射关系,使查询结果更加灵活。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值