代码质量扫描工具SonarQube原理及环境搭建
前言
静态代码扫描是CI/CD中重要的一环,可以在代码提交到代码仓库之后,在CI/CD流程中加入代码扫描步骤,从而及时地对代码进行质量的检查。这可以有效地降低后期维护成本,优化产品质量,提高产品交付速度。同时,静态代码扫描还可以将代码问题自动通知给开发人员,使得问题得到及时发现和解决。
通俗地说,通过将静态代码分析融入到CI/CD流程中,可以进一步提高软件开发过程的效率和质量,帮助团队快速交付高质量的产品。
一、静态代码分析
1.什么是静态代码分析
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如:参数不匹配、有歧义的嵌套语句、错误的递归、非法计算、可能出现的空指针引用等等。
2.静态代码分析作用
- 快速定位代码隐藏错误和缺陷;
- 提高软件可靠性并节省软件开发和测试成本;
二、常见的静态代码分析工具
1.Java语言常用的静态代码分析工具

2.Python语言常用的静态代码分析工具

三、代码质量检测神器-SonarQube
1.SonarQube简介
1)什么是SonarQube

Sonarqube是一款开源的代码质量管理平台,用于检测代码中的错误,漏洞和代码规范,通过插件的机制,可以基于现有的Gitlab、Jenkins 集成、以便在项目拉取后进行连续的代码检查。旨在提供一个完整的代码质量管理解决方案。
2)SonarQube的优势
- 支持众多计算机编程语言
- 通过插件机制能集成IDE、Jenkins、Git等
- 内置大量常用代码检查规则
- 支持定制开发规则
- 可视化界面
- 支持从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目

2.SonarQube组成

Sonarqube的架构可以分为以下几个部分:
- 数据库层:Sonarqube使用一个数据库来存储所有的代码质量数据。
- 应用程序层:Sonarqube的应用程序层包括一系列基于Java的Web应用程序,这些应用程序负责收集数据、分析代码和生成报告等任务。
- 插件层:Sonarqube的插件层是一个可扩展的架构,它允许用户安装和使用各种不同的插件来增强Sonarqube的功能和灵活性。
- 数据采集层:Sonarqube支持多种不同的代码仓库和版本控制系统,包括SVN、Git、Mercurial和ClearCase等。使用这些数据采集插件,Sonarqube可以轻松地从不同的代码库中收集数据。
3.SonarQube工作原理

Sonarqube的工作原理如下:
- 代码收集:首先,Sonarqube向代码仓库请求代码,并将代码下载到本地。
- 代码分析:然后,Sonarqube使用其内置的代码分析器分析代码并生成有关代码质量的重要信息,例如代码复杂性、代码重复性、代码测试覆盖率等。
- 数据存储:Sonarqube将收集的数据存储在其数据库中,以供后续使用。
- 报告生成:Sonarqube使用其内置的报告生成器生成各种数据可视化图表、报告和警告,并将其呈现给用户。
- 反馈和持续改进:用户可以使用Sonarqube提供的反馈功能来共享意见和建议,以改善代码质量。此外,Sonarqube还提供了持续集成和持续交付等功能,以帮助团队在代码开发过程中不断改进代码质量。
4.Sonar与Sonarqube的关系
Sonar是一个开源的代码质量管理平台,而SonarQube是Sonar的一个商业版本(之前叫做Sonar Enterprise Edition)。SonarQube有许多增强功能,如更强大的规则引擎、更好的报告和更高级的集成等。
SonarQube是开源的,但它还包括了许多收费的插件和额外的支持服务,这些只能在商业许可下使用。Sonar和SonarQube之间的区别在于SonarQube提供了一些高级功能,特别是在企业环境中需要更多的规则和细粒度的安全,并且需要承担更多的管理和支持责任。
四、Sonarqube环境搭建
以下提供Windows和Linux两种搭建方式。
1.SonarQube配置与启动-Windows
1)下载解压SonarQube
将sonarqube压缩包解压后,即可进入bin目录启动,sonar兼容Mac、Linux、Windows系统,不同系统进入对应的目录启动即可。

例如,我的电脑系统是Windows x86架构64位系统,则进入“D:\sonarqube-7.6\bin\windows-x86-64”目录,双击StartSonar.bat即可启动sonar服务。启动成功后,打开浏览器,访问http://localhost:9000,默认用户名密码:admin/admin

2)SonarQube配置数据库
打开SonarqQube安装目录,修改\conf\sonar.properties文件,指定连接的数据库、用户名、密码,不同的数据库修改对应的jdbc连接、用户名密码等。

3)SonarQube修改服务端口号
默认端口号为9000,可以通过\conf\sonar.properties文件中“WEB SERVER”配置修改端口号,修改完成后需要重启sonar服务:

2.SonarQube配置与启动-Linux
1)MySQL数据库配置
我安装的SonarQube-7.6版本,要求MySQL版本要>=5.6且<8.0,否则sonar无法启动
CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar'; # 创建用户CREATE DATABASE sonar CHARACTER SET UTF8; # 创建sonar专用数据库GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%'; # 为sonar用户授予sonar数据库全部操作权限

2)Linux sonar用户配置
① 创建sonar用户
useradd sonar # 创建sonar用户passwd sonar # 为sonar用户设置密码,运行此命令后输入两遍密码
② 为sonar用户添加root权限
修改 /etc/sudoers 文件,找到root一行,在root下面添加一行,如下:
sonar ALL=(ALL) ALL

③ 以root权限登录sonar用户
su - sonar
3)上传并解压sonarqube
上传压缩文件到sonar用户目录下,并解压,确保解压后的目录属组为sonar

4)配置sonarqube数据库连接
编辑sonarqube/conf目录下的配置文件sonar.properties,配置sonarqube连接数据库的用户名、密码,以及数据库地址。数据库版本要求:MySQL >=5.6 && < 8.0

5)修改sonar web端访问端口号(如需要)
若sonar所在服务器的9000端口被占用,则需要修改为其他端口,若未被占用则不需要修改

6)配置sonar环境变量
配置环境变量后不需要再进入sonar的bin目录即可快速启动sonar
用root用户编辑 /etc/profile 文件,添加如下内容:
export SONAR_HOME=/home/sonar/sonarqube
export PATH=${PATH}:${SONAR_HOME}"/bin/linux-86-64"

source /etc/profile
7)启动sonar
sonar启动有两种方式:一种是带日志启动,一种是后台启动
sonar.sh start # 不打印日志启动sonarsonar.sh console start # 打印日志启动sonar、前台启动
出现SonarQube is up表示启动成功:

启动成功后,sonar数据库中会自动生成多张表

8)登录sonarqube
访问地址:http://192.168.1.122:9000/,账号密码:admin admin
登录成功后界面如下:

3.SonarQube汉化
直接搜索Chinese Pack安装即可,但是旧版本的sonar无法直接搜索安装,需要对照对应插件版本下载安装。

以sonar-7.6版本为例:
① 下载汉化插件
1.26版本汉化插件下载地址:https://github.com/xuhuisheng/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-1.26
sonar与汉化插件版本对应关系:

② 将插件放入sonarqube安装目录的extensions\plugins目录下,并重启sonar服务
汉化后的效果:

4.安装过程中常见问题及解决办法
参考链接:https://www.cnblogs.com/zndxall/p/12095769.html
1)启动sonar报错“/temp/conf/es/elasticsearch.yml”访问被拒绝

问题原因:注意检查/home/sonarqube-7.6/temp目录下的子目录及文件所属用户是否为sonar,如果是root,要改为sonar(有可能是第一次使用chown命令设置所属用户后,再次使用root用户修改配置文件,导致该conf目录所属用户发生变更)

解决办法:重新配置conf目录所属用户,一定要确保sonarqube-7.6目录及子目录所属用户为sonar。
chown -R sonar:sonar sonarqube-7.6
再次查看,目录配置正确

2)root用户启动sonar报错
问题原因:因为安全问题elasticsearch 不让用root用户直接运行
解决办法:要创建一个用户,以该用户来启动sonar,同时注意sonar主目录的所属用户要是该用户
小结
以上就是静态代码扫描工具sonarqube组成、原理及在不同系统中的环境搭建的全部过程,在环境搭建过程中,一定要注意:
- sonarqube与数据库的版本对应关系;
- sonarqube解压后的目录属组为sonar用户组;
- 一定要以非root用户启动;
转:https://baijiahao.baidu.com/s?id=1765640471138486865&wfr=spider&for=pc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律