代码质量扫描工具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的工作原理如下:

  1. 代码收集:首先,Sonarqube向代码仓库请求代码,并将代码下载到本地。
  2. 代码分析:然后,Sonarqube使用其内置的代码分析器分析代码并生成有关代码质量的重要信息,例如代码复杂性、代码重复性、代码测试覆盖率等。
  3. 数据存储:Sonarqube将收集的数据存储在其数据库中,以供后续使用。
  4. 报告生成:Sonarqube使用其内置的报告生成器生成各种数据可视化图表、报告和警告,并将其呈现给用户。
  5. 反馈和持续改进:用户可以使用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

posted @   rmticocean  阅读(1236)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示