代码质量扫描工具SonarQube原理及环境搭建
suiw9 2025-01-27 00:16 31 浏览 0 评论
前言
静态代码扫描是CI/CD中重要的一环,可以在代码提交到代码仓库之后,在CI/CD流程中加入代码扫描步骤,从而及时地对代码进行质量的检查。这可以有效地降低后期维护成本,优化产品质量,提高产品交付速度。同时,静态代码扫描还可以将代码问题自动通知给开发人员,使得问题得到及时发现和解决。
通俗地说,通过将静态代码分析融入到CI/CD流程中,可以进一步提高软件开发过程的效率和质量,帮助团队快速交付高质量的产品。
一、静态代码分析
1.什么是静态代码分析
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如:参数不匹配、有歧义的嵌套语句、错误的递归、非法计算、可能出现的空指针引用等等。
2.静态代码分析作用
- 快速定位代码隐藏错误和缺陷;
- 提高软件可靠性并节省软件开发和测试成本;
二、常见的静态代码分析工具
1.Java语言常用的静态代码分析工具
名称 | 简介 |
SonarQube | 是一个开源的代码质量管理平台,可以帮助团队分析代码质量,并生成报告和指标。它支持检测常见的代码质量问题,如代码重复、复杂性、安全漏洞等。 |
Checkstyle | 是一个开源的Java代码规范检查工具,可以自定义代码规范并对Java代码进行实时检查,可以检测到常见的Java编码约定问题,侧重编码风格的检查。 |
PMD | 是一个开源的代码检查器,用于分析Java源代码,可以检测到常见的代码问题,如不必要的对象创建、未使用的变量、空循环等。通过内置的编码规则,通过缺陷匹配对代码进行静态检查。 |
FindBugs | 是一个用于静态分析Java字节码的开源工具,支持查找并修复在Java应用程序中常见的错误。它可以检测到潜在的错误、线程安全问题、不良实践等。 |
IntelliJ IDEA | 是一款流行的Java集成开发环境,内置了丰富的代码分析功能,如代码检查、代码重构、代码搜索和代码审阅。它可以帮助开发人员更轻松地识别和调试代码问题。 |
2.Python语言常用的静态代码分析工具
名称 | 简介 |
Pylint | 是Python语言静态代码分析的一种工具,可以识别并报告程序中的错误、代码不规范、不安全的代码等,支持多种代码风格。 |
Flake8 | 是一个集成了多个Python代码检查工具的工具,包括PyFlakes、PEP8和mccabe等工具,可以检查代码语法、代码风格以及代码复杂性。 |
Pyflakes | 是一个轻量级的Python代码静态分析工具,用来检查语法和代码风格,并识别出不合法的操作或语句。 |
Bandit | 是一个基于AST(抽象语法树)的Python安全性扫描器,能识别出代码中的常见漏洞如SQL注入、XSS和代码注入等。 |
mypy | 是Python的静态类型检查器,在代码编写时就可以发现类型问题,并帮助开发人员编写更稳健、易维护的Python代码。 |
Pysa | Facebook开源的、侧重代码安全性检测的工具 |
三、代码质量检测神器-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 # 不打印日志启动sonar
sonar.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用户启动;
相关推荐
- 10款超实用JavaScript音频库(js播放音频代码)
-
HTML5提供了一种新的音频标签实现和规范用一个简单的HTML对象而无需音频插件来控制音频。这只是一个简单的整合这些新的HTML5音频特征及使用JavaScript来创建各种播放控制。下面将介绍10款...
- PROFINET转Modbus网关——工业协议融合的智能枢纽
-
三格电子SG-PNh750-MOD-221,无缝连接Profinet与Modbus,赋能工业物联产品概述...
- 简单实用的Modbus类库,支持从站和DTU
-
一、简介...
- [西门子PLC] S7-200 SMART PROFINET :通过GSD组态PLC设备
-
从S7-200SMARTV2.5版本开始,S7-200SMART开始支持做PROFINETIO通信的智能设备。从而,两个S7-200SMART之间可以进行PROFINETI...
- Modbus(RTU / TCP)有什么异同(modbus tcp和tcp)
-
Modbus是一种广泛使用的工业自动化通信协议,它支持设备之间的数据交换。Modbus协议有两个主要的变体:ModbusRTU(二进制模式)和ModbusTCP(基于TCP/IP网络的模式)。尽管...
- Modbus通信调试步骤详解(modbus调试工具怎么用)
-
Modbus通信调试步骤详解 Modbus通信分为串口和以太网,无论是串口还是以太网,只要是标准Modbus,就可以用Modbus模拟器进行调试。按以下几步进行调试。...
- 理解Intel手册汇编指令(intel 汇编指令手册)
-
指令格式...
- 「西门子PLC」S7-200 SMART的Modbus RTU通讯
-
S7-200SMART集成的RS485端口(端口0)以及SBCM01RS485/232信号板(端口1)两个通信端口可以同时做MODBUSRTU主站,或者一个做MODBUSRTU主站一个做MO...
- InfiniBand网络运维全指南:从驱动安装到故障排查
-
一、InfiniBand网络概述InfiniBand(直译为“无限带宽”技术,缩写为IB)是一种用于高性能计算的计算机网络通信标准,具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。它...
- 一加回归 OPPO,背后的秘密不可告人
-
有这样一个手机品牌,它诞生于互联网品牌。在大众群体看来,它的身世似乎模糊不清,许多人以为它是国外品牌。它的产品定位是极客群体,深受国内发烧友,甚至国外极客玩家喜爱。...
- [西门子PLC] S7-200SMART快速高效的完成Modbus通信程序的设计
-
一、导读Modbus通信是一种被广泛应用的通信协议,在变频器、智能仪表还有其他一些智能设备上都能见到它的身影。本文呢,就把S7-200SMART系列PLC当作Modbus主站,把...
- 狂肝10个月手搓GPU,他们在我的世界中玩起我的世界,梦想成真
-
梦晨衡宇萧箫发自凹非寺量子位|公众号QbitAI自从有人在《我的世界》里用红石电路造出CPU,就流传着一个梗:...
- [西门子PLC] 博途TIA portal SCL编程基础入门:1-点动与自锁
-
一、S7-SCL编程语言简介...
- 工作原理系列之:Modbus(modbus工作过程)
-
MODBUS是一种在自动化工业中广泛应用的高速串行通信协议。该协议是由Modion公司(现在由施耐德电气公司获得)于1979年为自己的可编程逻辑控制器开发的。该协议充当了PLCS和智能自动化设备之间的...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
MacOS + AList + 访达,让各种云盘挂载到本地(建议收藏)
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
- 最近发表
-
- 10款超实用JavaScript音频库(js播放音频代码)
- Howler.js,一款神奇的 JavaScript 开源网络音频工具库
- PROFINET转Modbus网关——工业协议融合的智能枢纽
- 简单实用的Modbus类库,支持从站和DTU
- [西门子PLC] S7-200 SMART PROFINET :通过GSD组态PLC设备
- Modbus(RTU / TCP)有什么异同(modbus tcp和tcp)
- Modbus通信调试步骤详解(modbus调试工具怎么用)
- 理解Intel手册汇编指令(intel 汇编指令手册)
- 「西门子PLC」S7-200 SMART的Modbus RTU通讯
- InfiniBand网络运维全指南:从驱动安装到故障排查
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)