Jacoco 简介
Jacoco 官网:https://www.jacoco.org/jacoco/trunk/index.html
Jacoco 是一个免费的java 代码覆盖率工具,今天这边文章只介绍Maven 项目使用jacoco
Jacoco 其他的配置可以参考官网文档

Jacoco 部署
前提条件:
Maven:Maven 3.0 或者更高版本
JDK: jdk1.8 或更高版本
我这边环境的版本:Maven5.14 JDK21
jacoco 不需要单独部署,只需要在项目的根pom.xml文件中增加jacoco plugin 即可
java
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.13</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
Jacoco 与Jenkins集成
在Jenkins 页面平台安装Jacoco组件

组件安装好了后,在jenkins 点击构建的项目进行配置,增加jacoco组件

按照如下配置即可

备注说明:
上述配置好了后,点击项目构建,构建最后一步就是在运行jacoco 组件的工作

jacoco.exec :构建成功后,在target目录下会生成一个jacoco.exec 的二进制文件。
jacoco.exec 的核心作用就是记录代码的执行轨迹
Jenkins 平台查看jacoco代码覆盖率

这里红框中可以看到汇总的结果数据

Coverage Report 可以看到详细信息,也可以点进去继续查看更细的

Sonarqube 简介
Sonarqube 是一个用于持续代码质量检测和代码安全扫描的平台。
Sonarqube核心作用:可以理解为 "代码质量审计平台"
Sonarqube检查哪些问题:
Bug、Vulnerability(安全漏洞)、Code Smell(代码坏味道)、Coverage(测试覆盖率)、Duplicate(重复代码)
Sonarqube 部署
环境准备:jdk21 postgresql 15.2 sonarqube-26.4.0
openjdk 21 安装部署:
bash
#openjdk 下载链接:https://jdk.java.net/archive/ 找到jdk21版本下载即可
#将openjdk-21.0.2_linux-x64_bin.tar.gz 上传到/data/app/pats_opts/java 解压即可
tar -zxvf openjdk-21.0.2_linux-x64_bin.tar.gz 得到jdk-21.0.2 文件夹,将jdk21配置成系统环境
vim /etc/profile
#set jdk21 environment
export JAVA_HOME=/data/app/pats_opts/java/jdk-21.0.2
export JRE_HOME=/data/app/pats_opts/java/jdk-21.0.2
export CLASS_PATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile
jdk 版本查看:java -version
postgresql 15.2:
postgresql 数据库安装步骤请参照
" PostgreSQL 单节点部署 + 原生流复制(Streaming Replication)完全指南"
在数据库中新增Sonarqube 服务使用的用户名、密码、库名
bash
#在这里创建了user 、password、database 都是sonar,这些参数根据情况自定义即可
CREATE USER sonar WITH PASSWORD 'sonar';
CREATE DATABASE sonar TEMPLATE = template0 ENCODING 'UTF8' owner sonar;
#用户名密码登录到新增数据下面执行赋权sql
GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar ;
Sonarqube 服务部署:
下载文档:https://www.sonarqube.org/downloads/,下载社区开源版本即可

免费的话就选择社区版本, 选择下载zip 安装包并上传到sonarqube 服务器的/data/app/pats_opts目录下并解压
bash
cd /data/app/pats_opts
unzip sonarqube-26.4.0.121862.zip
#解压后即可配置sonarqube
配置Sonarqube 配置文件 及 新增Sonarqube 用户名密码
bash
vi sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://192.168.1.1:5432/sonar
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.path.data=data
sonar.path.temp=temp
#其他配置默认即可
#操作系统新增Sonarqube用户
useradd sonarqube
passwd 123456
#给Sonarqube文件夹赋予Sonarqube用户权限
cd /data/app/pats_opts/sonarqube-26.4.0.121862
chown -R sonarqube:sonarqube *
系统配置优化:
bash
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
echo "fs.file-max = 6553560" >> /etc/sysctl.conf
sysctl -p
vim /etc/security/limits.conf
# 增加sonarqube用户大开文件数
sonarqube soft nofile 65536
sonarqube hard nofile 65536
切换到Sonarqube用户下启动服务
bash
cd /opt/sonarqube-8.9.7/bin/linux-x86-64
启动服务:./sonar.sh start
停止服务:./sonar.sh stop
重启服务:./sonar.sh restart
Sonarqube Web 管理界面登录
登录链接:http://192.168.1.1:9000/ 默认密码 admin admin123
首次登录会提示修改默认密码

Sonarqube与Jenkins集成
Jenkins 平台安装sonar 组件

注意!注意!注意!
我之前的Jenkins 版本是2.452.1,然后直接在jenkins 平台安装了"Sonar Quality Gates Plugin"&"SonarQube Scanner for Jenkins" 这两个组件时,平台默认是安装最新版本,且会更新很多依赖组件,待更新后重启Jenkins 时会发现启动失败,原因是升级的组件版本跟Jenkins版本不匹配。。。。。。迫不得已只能把Jenkins 升级到了2.555.1版本才能正常使用。
注意!注意!注意!
组件安装后Jenkins 配置Sonarqube 信息
SonarQube 平台新建专门给jenkins 使用的通用令牌
此令牌刚生成时需要复制下来,后面就看不到了。复制下来的通用令牌ID后面会使用到。

将SonarQube生成的通用令牌配置到Jenkins Credentials 中,点击"Add Credentials"
这个界面时,选择"Secret text",ID一栏输入上面复制的通用令牌ID信息 点击"Create"
Jenkins "系统配置"一栏新增SonarQube 信息
Jenkins "全局工具配置"一栏新增SonarQube Scanner 信息

Jenkins 到项目配置处增加"Execute SonarQube Scanner"


bash
sonar.projectKey=project_dev_xxx
# 正式源码(必填)
sonar.sources=src/main/java
# 测试代码(可选,单独统计)
sonar.tests=src/test/java
# Java 项目还需要指定编译输出
sonar.java.binaries=target/classes
#sonar.java.libraries=target/dependency/*.jar
sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
Sonarqube 本身并不生产代码覆盖率报告,结合上面的jacoco工具,sonarqube 需要扫描jacoco生成的jacoco.xml文件,并将代码覆盖率在Sonarqube平台上展示。

在项目的pom文件下增加配置是jacoco 生成jacoco.xml 文件。
上面介绍jacoco时已经在项目的pom文件下增加了jacoco 组件,但是上面的组件增加后,只生成jacoco.exec二进制文件,不生成jacoco.xml文件,需要在上面的基础只是增加下午红框中的代码即可

完整的代码如下所示:
bash
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.13</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<formats>
<format>XML</format>
</formats>
</configuration>
</execution>
</executions>
</plugin>
构建成功后
jacoco 统计界面

Sonarqube 统计界面:
点击"Passed"会跳转到Sonarqube 界面


这样Sonarqube Jacoco 已经和Jenkins 集成成功了。
下一批文章将介绍
"DevOps 生态介绍(五):玩转SonarQube:代码静态扫描、Bug预警、质量门禁介绍"