SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以 集成不同的测试工具,代码分析工具,以及持续集成工具,例如 Hudson/Jenkins 等。
官方网站:http://www.sonarqube.org/
下载地址:https://www.sonarqube.org/downloads/

七个维度检测代码质量

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

一、代码测试工具 SonarQube 简介

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.
在这里插入图片描述
注意事项:
SonarQube 6.7.X LTS 版本要求数据库要使用 MySQ 5.6 及以上版本,不支持 5.5 及更早的版
6.7.X 需要使用 Oracle JRE8
7.9.X 需要使用 Oracle JRE11 或者 OpenJDK11

二、部署 SonarQube

2.1 系统及内核参数优化

vim /etc/sysctl.conf
vm.max_map_count=262144
fs.file-max=65536 

vim /etc/security/limits.conf 
sonarqube - nofile 65536 
sonarqube - nproc 2048

2.2 安装JDK

apt install -y openjdk-11-jdk

2.3 安装并配置 PostgreSQL

apt install -y postgresql

# 切换到 postgres 操作,PostgresSQL 安装后会自动创建 postgres 用户且没有密码
su - postgres

# 登录 postgresql 数据库
psql -U postgres

# 创建数据库并进行授权普通用户访问
postgres=# CREATE DATABASE sonar; #创建数据库 
CREATE DATABASE 
postgres=# CREATE USER sonar WITH ENCRYPTED PASSWORD '123456'; #创建用户 
CREATE ROLE 
postgres=# GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar; #授权用户 
GRANT 
postgres=# ALTER DATABASE sonar OWNER TO sonar; #执行变更 
ALTER DATABASE 
postgres=# \db   #查询数据库
postgres=# \q

#修改监听地址 
vim /etc/postgresql/10/main/postgresql.conf 
listen_addresses = '0.0.0.0' 
max_connections = 2048

#开启远程访问 
vim /etc/postgresql/10/main/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             0.0.0.0/0            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

# 启动服务
systemctl restart postgresql

# 查看端口5432是否开启

2.4 部署 7.9.X/8.9.X SonarQube

cd /apps    #将压缩包上传到该目录下

unzip sonarqube-8.9.2.46101.zip

ln -sv /apps/sonarqube-8.9.2.46101 /apps/sonarqube

useradd -r -m -s /bin/bash sonarqube

chown sonarqube.sonarqube /apps/ -R

su - sonarqube

cd /apps/sonarqube

vim conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:postgresql://10.0.0.40/sonar

/apps/sonarqube/bin/linux-x86-64/sonar.sh start

验证 SonarQube
在这里插入图片描述

ps -ef | grep sonarqube

在这里插入图片描述

2.5 配置启动文件

vim /etc/systemd/system/sonarqube.service
[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=simple
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/usr/bin/nohup /usr/bin/java -Xms2048m -Xmx2048m -Djava.net.preferIPv4Stack=true -jar /apps/sonarqube/lib/sonar-application-8.9.2.46101.jar
StandardOutput=syslog
LimitNOFILE=131072
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start sonarqube
systemctl enable sonarqube

2.6 访问 SonarQube web 界面

登录账户名和密码默认都是 admin
URL:10.0.0.40:9000
在这里插入图片描述

2.7 安装中文插件

在这里插入图片描述

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

下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/
官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

3.1 部署 sonar-scanner

sonarqube 通过调用扫描器 sonar-scanner 进行代码质量分析,即扫描器的具体工作就是扫描代码

# 上传文件sonar-scanner-cli-4.6.2.2472-linux.zip
root@jenkins-slave1:/apps# ll
total 42100
drwxr-xr-x  2 root root     4096 Aug 24 11:57 ./
drwxr-xr-x 26 root root     4096 Aug 24 11:56 ../
-rw-r--r--  1 root root 43099390 Aug 23 17:08 sonar-scanner-cli-4.6.2.2472-linux.zip

root@jenkins-slave1:/apps# unzip sonar-scanner-cli-4.6.2.2472-linux.zip

root@jenkins-slave1:/apps# ln -sv /apps/sonar-scanner-4.6.2.2472-linux /apps/sonar-scanner
'/apps/sonar-scanner' -> '/apps/sonar-scanner-4.6.2.2472-linux'

root@jenkins-slave1:/apps# cd /apps/sonar-scanner

root@jenkins-slave1:/apps/sonar-scanner# vim conf/sonar-scanner.properties
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://10.0.0.40:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8

3.2 扫描测试代码

第一步:关闭强制认证
在这里插入图片描述
第二步:上传代码,并进入所要扫描的代码路径下

# 上传需要被扫描的文件
root@jenkins-slave1:/opt# ls
sonar-scanning-examples-master  sonar-scanning-examples-master.zip

第三步:开始扫描

root@jenkins-slave1:/apps/sonar-scanner# cd /opt/sonar-scanning-examples-master/sonarqube-scanner

# 进行扫描
root@jenkins-slave1:/opt/sonar-scanning-examples-master/sonarqube-scanner# /apps/sonar-scanner/bin/sonar-scanner

在这里插入图片描述
第四步:sonarquebe web 界面验证扫描结果
在这里插入图片描述

四、Jenkins 执行代码扫描

4.1 jenkins 安装 SonarQube Scanner 插件

在这里插入图片描述

4.2 添加 sonarquebe URL

Jenkins—系统管理—系统设置–SonarQube servers
在这里插入图片描述

4.3 让 jenkins 添加 Sonarscanner 扫描器

4.3.1 手动指定扫描器的绝对路径

Jenkins–系统管理-全局工具配置
在这里插入图片描述

4.3.2 自动安装扫描器

在这里插入图片描述

4.4 配置项目源码管理

linux-app1—配置—源码管理
在这里插入图片描述

4.5 项目扫描器配置文件

linux-app1—配置—构建
在这里插入图片描述

4.6 构建项目并测试 sonar-scanner 是否生效

在这里插入图片描述
在这里插入图片描述

4.7 查看项目的构建历史

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐