SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以 集成不同的测试工具,代码分析工具,以及持续集成工具,例如 Hudson/Jenkins 等。
官方网站:http://www.sonarqube.org/
下载地址:https://www.sonarqube.org/downloads/
七个维度检测代码质量
- 复杂度分布:代码复杂度过高将难以理解
- 重复代码:程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar 可以展示源码中重复严重的地方
- 单元测试统计:统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
- 代码规则检查:检查代码是否符合规范
- 注释率:若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
- 潜在的 Bug:检测潜在的 bug
- 结构与设计:找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
一、代码测试工具 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
su - postgres
psql -U postgres
postgres=
CREATE DATABASE
postgres=
CREATE ROLE
postgres=
GRANT
postgres=
ALTER DATABASE
postgres=
postgres=
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 all all peer
host all all 0.0.0.0/0 md5
host all all ::1/128 md5
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
systemctl restart postgresql
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 进行代码质量分析,即扫描器的具体工作就是扫描代码
root@jenkins-slave1:/apps
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
root@jenkins-slave1:/apps
'/apps/sonar-scanner' -> '/apps/sonar-scanner-4.6.2.2472-linux'
root@jenkins-slave1:/apps
root@jenkins-slave1:/apps/sonar-scanner
sonar.host.url=http://10.0.0.40:9000
sonar.sourceEncoding=UTF-8
3.2 扫描测试代码
第一步:关闭强制认证 第二步:上传代码,并进入所要扫描的代码路径下
root@jenkins-slave1:/opt
sonar-scanning-examples-master sonar-scanning-examples-master.zip
第三步:开始扫描
root@jenkins-slave1:/apps/sonar-scanner
root@jenkins-slave1:/opt/sonar-scanning-examples-master/sonarqube-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 查看项目的构建历史
|