软件测试工具 —— SonarQube
SonarQube
是用Java
编写的一种自动代码审查工具,可检测代码中的错误,漏洞和潜在的安全问题,可方便于开发团队进行整体代码审查,规范管理,优化代码质量。
- 各版本介绍
整体结构
SonarQube
实例由三个组件组成
- 服务器
- 为
SonarQube
用户界面提供服务的 Web 服务器。 - 基于 Elasticsearch 的搜索服务器。
- 负责处理代码分析报告并将其保存在
SonarQube
数据库中的计算引擎。
- 为
- 数据库
- 储存代码扫描期间生成的代码质量和安全性的指标和问题。
SonarQube
实例配置。
- 客户端
- 在生成或持续集成服务器上运行的一个或多个扫描程序,用于分析项目。
安装和配置(SonarQube
8.9.8 LTS 社区版)
环境准备
- Java11
SonarQube
服务器只支持11版本
- 数据库
- 这个版本不支持 MySQL,这里选择 PostgreSQL 13
- 新建
SonarQube
数据库,并建test
模块保存数据
-
服务器
- 安装方式:Docker,SonarQube压缩包
- 选择压缩包的方式,下载后解压到本地
-
客户端(扫描器)
- SonarScanner 4.7,下载完是个压缩包,解压至本地
- 增加
Path
环境变量,方便使用:<解压文件夹>\bin
- 增加
- SonarScanner 4.7,下载完是个压缩包,解压至本地
配置
服务器 SonarQube
- 打开
SonarQube
配置文件:sonarqube-8.9.8.54436\conf\sonar.properties
1 | # PostgreSQL数据库用户名和密码 |
客户端 SonarScanner(扫描器)
- 打开
SonarScanner
配置文件:sonar-scanner-4.7.0.2747-windows\conf\sonar-scanner.properties
1 | # SonarQube 服务器 |
待测试代码配置
- 在代码目录下新建
sonar-project.properties
文件
1 | # must be unique in a given SonarQube instance |
- 一段简单 python 代码
1 | print("test") |
开始测试
启动服务器
-
进入
SonarQube
解压目录打开sonarqube-8.9.8.54436\bin\windows-x86-64
中的StartSonar.bat
- 建议命令行打开,等待服务启动
- 出现红框部分表示启动成功,浏览器打开
http://localhost:9000/
,登录进入(账号密码默认admin)
测试本地代码
- 进入待测试代码文件夹,根目录下打开命令行,输入
sonar-scanner
回车开始分析代码
- 分析完成
刷新页面查看分析结果
修改代码
1 | print("test") |
- 在
sonar-project.properties
下更改版本号
1 | # must be unique in a given SonarQube instance |
重新分析代码后查看结果
- 查看错误详情
遇到的问题
项目分析失败
java.lang.IllegalStateException: Unrecoverable indexation failures: 1 errors among 1 requests
- 在
sonarqube-8.9.8.54436\logs\es.log
中输出显示磁盘占用过高,属于elasticsearch
扫描磁盘时报的错
1 | WARN es[][o.e.c.r.a.DiskThresholdMonitor] flood stage disk watermark [95%] exceeded on [q_uywwI7RkmOpRl5xaWlxA][sonarqube][D:\tool\sonarqube-8.9.8.54436\data\es7\nodes\0] free: 18.6gb[3.9%], all indices on this node will be marked read-only |
-
解决方法——关闭磁盘空间阈值
-
查看 http://localhost:9001/_cluster/settings?pretty 页面
1
2
3
4{
"persistent": {},
"transient": {}
} -
关闭
StartSonar
,删除sonarqube-8.9.8.54436\data\es7
下nodes
文件夹(之前分析的项目会受影响) -
重启
StartSonar
-
使用
Postman
或其它方式,通过put
请求修改cluster.routing.allocation.disk.threshold_enabled
值为false
-
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SolのWorld!
评论