在现代软件开发中,代码质量对项目的成功至关重要。随着项目规模的扩大,代码的复杂性和维护难度也随之增加,这使得保持代码的可读性、可维护性和安全性是相当大的挑战。SonarQube 作为一款优秀的代码质量管理工具,通过静态分析自动检测代码中的问题,能够帮助开发者提前发现潜在的缺陷和漏洞,提升代码质量。
什么是 SonarQube?
SonarQube 是一个开源的、企业级的代码质量管理平台,它通过静态代码分析的方式,检测项目中的代码异味、重复代码、安全漏洞和复杂度等问题。SonarQube 支持多种编程语言(如 Java、C++、Python、JavaScript、Go 等),并且可以与多种 CI/CD 工具(如 Jenkins、GitLab CI)进行集成,实现自动化的代码质量检测。
SonarQube 具有以下功能:
- 静态代码分析:通过分析源代码,检测潜在的质量问题,如重复代码、不必要的复杂度和潜在的漏洞。
- 代码覆盖率:结合单元测试,SonarQube 可以跟踪测试覆盖率,确保新代码被充分测试。
- 质量门槛(Quality Gates):通过预设的规则,自动评估代码质量是否满足要求,保障项目的代码基准。
SonarQube架构
SonarQube平台由四部分组成:
1. SonarQube Server(服务器)
SonarQube Server 是整个系统的核心部分,负责接收来自客户端(如 SonarQube Scanner)提交的扫描结果,并将这些结果存储和展示在 Web 界面中。服务器本身主要由以下几个模块组成:
- Web Server(Web 服务器):提供 Web 界面,用户可以通过浏览器查看项目的代码质量报告、设置项目、配置质量门槛(Quality Gates)等。
- Compute Engine(计算引擎):处理并分析代码扫描结果,生成质量报告,并计算诸如代码覆盖率、重复率等信息。
2. SonarQube Database(数据库)
存储代码质量的历史记录、配置和用户信息。SonarQube 支持多种数据库,如 PostgreSQL、MySQL、Oracle 等。
需要注意的是:SonarQube在 7.9 之后将停止对 MySQL 的支持。
3. SonarQube Plugins(插件)
插件是 SonarQube 的扩展机制,可以通过插件支持更多的编程语言扫描、增加新的规则和分析引擎,甚至集成其他开发工具。
- 语言插件:支持多种编程语言的分析,如 Java、C++、Python、JavaScript、Go 等。
- 规则插件:增加新的代码分析规则,如安全扫描、性能检测等。
- 集成插件:支持与其他工具的集成,如 Jenkins、GitLab CI等。
4. SonarQube Scanners(扫描器)
SonarQube Scanner 是一个独立的客户端工具,负责分析项目代码并将结果提交到 SonarQube Server。它通过静态分析代码,检测代码中的问题,并生成相应的报告。SonarQube Scanner 可以在本地、CI/CD 环境或 IDE 中使用。
- 命令行扫描器:最常用的工具,通过命令行运行
sonar-scanner
命令,扫描指定项目的代码。 - 其他扫描器:SonarQube 还提供特定语言或构建工具的扫描器,如 Maven Scanner、Gradle Scanner 和 Ant Scanner 等。
SonarQube安装与配置
在使用 SonarQube 之前,首先需要安装 SonarQube 服务器,并配置 SonarQube Scanner(扫描器)来执行代码扫描。
1. 下载 SonarQube 服务器
从 SonarQube 官方网站下载适合的版本。这里选择的是7.8的版本(为了使用MySQL数据库)
https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip
2. 启动 SonarQube 服务器
解压下载包后,双击StartSonar.bat
启动服务器(如果是Linux系统则是进入到linux-x86-64目录下执行./sonar.sh命令):
3. 访问 SonarQube Web 界面
SonarQube服务启动之后默认监听端口是9000,在浏览器中打开 http://127.0.0.1:9000
,可以访问 SonarQube 的 Web 界面,默认用户名和密码都是 admin
。
4. SonarQube 页面汉化
sonar默认语言是英文,对于很多小伙伴不够友好,可以在sonar里面安装汉化插件:选择Administration->Marketplace->搜索Chinese,这里需要注意:由于我们安装的是7.8版本SonarQube,这里的汉化插件版本不匹配,我们可以从下面的网址中找到对应的匹配版本:https://github.com/xuhuisheng/sonar-l10n-zh
这里我们选择1.28版本的汉化插件,下载jar包:https://github.com/xuhuisheng/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-1.28
将jar包拷贝到sonarqube-7.8\extensions\plugins
目录下,重启SonarQube即可
这里需要注意直接关闭StartSonar.bat之后需要在后台杀掉相关的Java进程再重新启动,不然重新启动Sonar会失败。
5. SonarQube关联MySQL数据库
默认SonarQube使用的是H2数据库,Sonar可以支持MySQL数据库,只需要在sonarqube-7.8\conf\sonar.properties
配置文件中配置JDBC相关的链接信息即可
sonar.jdbc.username=用户名
sonar.jdbc.password=密码
sonar.jdbc.url=jdbc:mysql://IP地址:端口号/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
在MySQL数据库中新建sonarqube表,重启Sonar之后能够看到sonarqube表已经初始化:
欢迎来到testingpai.com!
注册 关于