DevOps 生态介绍(四):Sonarqube&jacoco 与jenkins集成使用

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预警、质量门禁介绍"

相关推荐
YoungStudyAI3 小时前
QA的下一个自动化阶段,可能不是再写更多脚本,而是设计测试Agent
运维·自动化
分布式存储与RustFS4 小时前
纠删码到底吃掉了多少容量:EC:4、EC:8 的利用率与容错怎么算
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
遇见小修修4 小时前
3步解决打印机0x00000709报错 ,广州深圳程序员可自行排查
运维·打印机·维修·打印机报错·打印机运维·打印机故障自查
Huangjin007_6 小时前
【Linux 系统篇(二十五)】文件(二) 系统文件I/O详解
linux·运维·服务器
微小冷6 小时前
Mermaid画甘特图
运维·markdown·甘特图·mermaid·时间图
LBL12207 小时前
内网容器部署FTP日志监控服务
运维·服务器·容器
志栋智能7 小时前
超自动化巡检:驱动持续改进的运维飞轮
运维·自动化
海宇大数据7 小时前
零信任架构实战:基于海宇学历核验版构建自动化风控审查网关
运维·人工智能·架构·自动化
NailiConveyor8 小时前
输送机系统与WMS仓储管理系统集成的5个关键技术点
大数据·运维·自动化·制造·业界资讯
本人手速666+8 小时前
企微开发API如何设计客户冻结状态?WeComApi 在删除、投诉和异常客户场景中的自动化边界
运维·分布式·自动化·企业微信·企微外部群开发·wecomapi·企业微信二次开发