Jenkins SonarQube 代码质量测试
SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以 集成不同的测试工具,代码分析工具,以及持续集成工具,例如 Hudson/Jenkins 等。官方网站:http://www.sonarqube.org/下载地址:https://www.sonarqube.org/downloads/七个维度检测代码质量复杂度分布:代码复杂度过高将难以理解重复代码:程序中包
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
# 切换到 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 查看项目的构建历史
更多推荐
所有评论(0)