Jenkins-SonarQube-代码质量测试

1、基础知识

1.1、什么是SonarQube 

SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以集成不同的测试工具,代码分析工具,以及持续集成工具,例如 Hudson/Jenkins 等。

官方网站:http://www.sonarqube.org/
下载地址:https://www.sonarqube.org/downloads/

1.2、七个维度检测代码质量

1、复杂度分布:代码复杂度过高将难以理解
2、重复代码:程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar 可以展示源码中重复严重的地方
3、单元测试统计:统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
4、代码规则检查:检查代码是否符合规范 5、注释率:若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
6、潜在的 Bug:检测潜在的 bug 7、结构与设计:找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度

1.3、SonarQube工作流程图

1.4、版本说明

7.9.x 版本不再支持 MySQL

https://docs.sonarqube.org/latest/setup/upgrade-notes/

MySQL No Longer Supported
SonarQube no longer supports MySQL. To migrate from MySQL to a supported database, see the
free MySQL Migrator tool.

2、基础环境准备

2.1、sonarqube软件

2.1.1、软件下载

https://www.sonarsource.com/products/sonarqube/downloads/

sonarqube-9.9.1.69595.zip

2.2、软件依赖版本要求

https://docs.sonarqube.org/latest/requirements/prerequisites-and-overview/

2.2.1、java版本要求

2.2.2、数据库的要求

2.2.3、浏览器的要求

2.3、系统及内核参数

2.3.1、创建用户

useradd -s /sbin/nologin -m sonarqube

2.3.2、设置文件打开数、用户进程数

# 配置目录/etc/security/limits.d/99-sonarqube.conf或/etc/security/limits.conf

cat << 'CAT_END' >> /etc/security/limits.conf
sonarqube   -   nofile   262144
sonarqube   -   nproc    65535
CAT_END

# 全局配置
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=65535
ulimit -n 524288
ulimit -u 65535

cat << 'CAT_END' >>/etc/sysctl.conf
vm.max_map_count=524288
fs.file-max=65535
CAT_END

3、部署 SonarQube

3.1、安装JDK

# 查看版本
apt-cache madison openjdk-17-jdk

# 安装JDK17
apt install openjdk-17-jdk

3.2、安装PostgreSQL

3.2.1、安装

# 查看版本
apt-cache madison postgresql

# 安装
apt install -y postgresql

3.2.2、创建数据库、登陆帐号、授权等配置 

# 切换用户
su - postgres

# 登陆数据库
psql -U postgres

# 创建数据库
create database sonar;

# 创建用户并且设置密码
create user sonar with encrypted password 'sonar';

# 授权
grant all privileges on database sonar to sonar;

# 修改数据库sonar所有者
alter database sonar owner to sonar;

3.2.3、设置监听IP地址为所有

# vim /etc/postgresql/15/main/postgresql.conf
...
listen_addresses ='*'
...

3.2.4、开启远程访问

# vi /etc/postgresql/15/main/pg_hba.conf 
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             0.0.0.0/0            scram-sha-256

3.2.5、启动服务

# systemctl start postgresql

# ss -tunlp | grep postgre
tcp   LISTEN 0      244              127.0.0.1:5432      0.0.0.0:*    users:(("postgres",pid=5932,fd=5))       
tcp   LISTEN 0      244              127.0.1.1:5432      0.0.0.0:*    users:(("postgres",pid=5932,fd=6))

3.3、安装SonarQube

3.3.1、下载软件

mkdir -p /data/softs && cd /data/softs
curl -O https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.1.69595.zip

3.3.2、安装软件

apt install -y unzip
mkdir /data/servers && cp /data/softs/sonarqube-9.9.1.69595.zip /data/servers/
cd /data/servers/ && unzip sonarqube-9.9.1.69595.zip && rm -f sonarqube-9.9.1.69595.zip 
chown -R sonarqube:sonarqube sonarqube-9.9.1.69595
ln -s /data/servers/sonarqube-9.9.1.69595 /usr/local/sonar

3.3.3、配置

# 切换用户
su - sonarqube

# 配置数据库链接信息
sonarqube@localhost:~$ egrep -iv '^$|^#' /usr/local/sonar/conf/sonar.properties 
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://192.168.10.28:5432/sonar

3.3.4、启动sonar服务

# 命令帮助信息
sonarqube@localhost:~$ /usr/local/sonar/bin/linux-x86-64/sonar.sh 
/usr/bin/java
Usage: /usr/local/sonar/bin/linux-x86-64/sonar.sh { console | start | stop | force-stop | restart | status | dump }

sonarqube@localhost:~$ /usr/local/sonar/bin/linux-x86-64/sonar.sh start
/usr/bin/java
Starting SonarQube...
Started SonarQube.

3.3.5、查看日志和检查端口

# 日志
sonarqube@localhost:~$ tail -f /usr/local/sonar/logs/sonar.log 
# 显示如下,表示启动正常
2023.06.19 10:28:35 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
2023.06.19 10:28:35 INFO  app[][o.s.a.SchedulerImpl] SonarQube is operational

# 检查端口
sonarqube@localhost:~$ ss -tunlp | grep java
tcp   LISTEN 0      50      [::ffff:127.0.0.1]:43901            *:*    users:(("java",pid=6879,fd=38))
tcp   LISTEN 0      4096    [::ffff:127.0.0.1]:9001             *:*    users:(("java",pid=6694,fd=78))
tcp   LISTEN 0      4096    [::ffff:127.0.0.1]:33007            *:*    users:(("java",pid=6694,fd=76))
tcp   LISTEN 0      25                       *:9000             *:*    users:(("java",pid=6772,fd=12))

3.3.6、浏览器登陆sonarqube服务

默认帐号和密码都是admin

3.3.7、主页面

3.4、安装中文插件Chinese Pack

3.4.1、安装插件

3.4.2、汉化完成的效果

4、jenkins 服务器部署扫描器 sonar-scanner

4.1、软件下载

参考地址:https://docs.sonarcloud.io/advanced-setup/ci-based-analysis/sonarscanner-cli/

cd /data/softs/ && curl -O https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip

4.2、部署sonar-scanner 

4.2.1、安装软件

unzip sonar-scanner-cli-4.7.0.2747-linux.zip -d /data/server/
ln -s /data/server/sonar-scanner-4.7.0.2747-linux /usr/local/sonar-scanner

4.2.2、配置

# grep -Ev '^$|^#' /usr/local/sonar-scanner/conf/sonar-scanner.properties 
sonar.host.url=http://192.168.10.28:9000
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=root

4.3、准备测试代码

4.3.1、到sonarqube服务上【关闭强制认证】

4.3.2、下载测试代码

sonar插件提供了一个代码库
github:https://github.com/SonarSource/sonar-examples 
软件包下载:https://github.com/SonarSource/sonar-examples/archive/master.zip

4.3.3、进入php测试代码

unzip sonar-examples-master.zip
cd sonar-examples-master/projects/languages/php/php-sonar-runner

4.3.4、sonar-project.properties配置解析

root@localhost:~/sonar-examples-master/projects/languages/php/php-sonar-runner# cat sonar-project.properties 
# Required metadata
sonar.projectKey=org.sonarqube:php-simple-sq-scanner         # 自定义项目 key
sonar.projectName=PHP :: Simple Project :: SonarQube Scanner # 项目名称,会显示在 web
sonar.projectVersion=1.0   # 项目版本

# 源代码目录
sonar.sources=src

# 代码语言类型
sonar.language=php

# 编码格式
sonar.sourceEncoding=UTF-8

4.3.5、在源代码目录执行扫描

root@localhost:~/sonar-examples-master/projects/languages/php/php-sonar-runner# /usr/local/sonar-scanner/bin/sonar-scanner
...
INFO: Analysis report generated in 132ms, dir size=139.9 kB
INFO: Analysis report compressed in 28ms, zip size=24.1 kB
INFO: Analysis report uploaded in 121ms
INFO: ANALYSIS SUCCESSFUL, you can find the results at: http://192.168.10.28:9000/dashboard?id=org.sonarqube%3Aphp-simple-sq-scanner
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://192.168.10.28:9000/api/ce/task?id=AYjUOlT8vuQIIDUYw2zj
INFO: Analysis total time: 13.689 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 15.883s
INFO: Final Memory: 19M/104M
INFO: ------------------------------------------------------------------------

4.3.6、sonarquebe web 界面验证扫描结果

5、jenkins执行代码扫描

5.1、jenkins 安装 SonarQube 插件

安装插件 SonarQube Scanner,然后配置 SonarQube server,系统管理-系统设置。

 

5.2、Jenkins配置-SonarQube

5.2.1、sonar创建令牌

5.2.2、增加凭据

sonar创建令牌复制到此处

5.2.3、Jenkins配置Sonar

Jenkins—系统管理—系统设置--SonarQube servers

 

5.3、jenkins 添加 Sonar scanner 扫描器

Jenkins--系统管理-全局工具配置

6、Jenkins创建项目测试

6.1、准备代码【到github】

# 这里只取php测试示例

sonar插件提供了一个代码库
github:https://github.com/SonarSource/sonar-examples 
软件包下载:https://github.com/SonarSource/sonar-examples/archive/master.zip

 

6.2、创建jenkins项目my-php-sonar

6.3、配置Scanner扫描

# Required metadata
sonar.projectKey=org.sonarqube:php-simple-sq-scanner
sonar.projectName=PHP :: Simple Project :: SonarQube Scanner
sonar.projectVersion=1.0

# Comma-separated paths to directories with sources (required)
sonar.sources=./php-sonar-runner/src

# Language
sonar.language=php

sonar.login=admin # 需要配置用户名
#sonar.password=squ_fcaeb5bd15fa11202c16755623bafd3eee3eb246 # 此处不用写,因为我们已经设置全局token认证

6.4、点击构建成功,查看Sonar项目

6.5、Jenkins+SonarQube配置完成

posted @ 2023-06-20 11:01  小粉优化大师  阅读(1321)  评论(0编辑  收藏  举报