前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CI&CD夺命十三剑7-代码质量扫描工具SonarQube原理及环境搭建

CI&CD夺命十三剑7-代码质量扫描工具SonarQube原理及环境搭建

作者头像
大刚测试开发实战
发布2023-08-29 16:14:16
1.2K0
发布2023-08-29 16:14:16
举报

前言

静态代码扫描是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的工作原理如下:

  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无法启动

代码语言:javascript
复制
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用户

代码语言:javascript
复制
useradd sonar  # 创建sonar用户
passwd sonar  # 为sonar用户设置密码,运行此命令后输入两遍密码

② 为sonar用户添加root权限

修改 /etc/sudoers 文件,找到root一行,在root下面添加一行,如下:

代码语言:javascript
复制
sonar    ALL=(ALL)    ALL

③ 以root权限登录sonar用户

代码语言:javascript
复制
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"

代码语言:javascript
复制
source /etc/profile
7)启动sonar

sonar启动有两种方式:一种是带日志启动,一种是后台启动

代码语言:javascript
复制
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.安装过程中常见问题及解决办法

1)启动sonar报错“/temp/conf/es/elasticsearch.yml”访问被拒绝

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

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

代码语言:javascript
复制
chown -R sonar:sonar sonarqube-7.6

再次查看,目录配置正确

2)root用户启动sonar报错

问题原因:因为安全问题elasticsearch 不让用root用户直接运行

解决办法:要创建一个用户,以该用户来启动sonar,同时注意sonar主目录的所属用户要是该用户

小结

以上就是静态代码扫描工具sonarqube组成、原理及在不同系统中的环境搭建的全部过程,在环境搭建过程中,一定要注意:

  • sonarqube与数据库的版本对应关系;
  • sonarqube解压后的目录属组为sonar用户组;
  • 一定要以非root用户启动;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、静态代码分析
    • 1.什么是静态代码分析
      • 2.静态代码分析作用
      • 二、常见的静态代码分析工具
        • 1.Java语言常用的静态代码分析工具
          • 2.Python语言常用的静态代码分析工具
          • 三、代码质量检测神器-SonarQube
            • 1.SonarQube简介
              • 1)什么是SonarQube
              • 2)SonarQube的优势
            • 2.SonarQube组成
              • 3.SonarQube工作原理
                • 4.Sonar与Sonarqube的关系
                • 四、Sonarqube环境搭建
                  • 1.SonarQube配置与启动-Windows
                    • 1)下载解压SonarQube
                    • 2)SonarQube配置数据库
                    • 3)SonarQube修改服务端口号
                  • 2.SonarQube配置与启动-Linux
                    • 1)MySQL数据库配置
                    • 2)Linux sonar用户配置
                    • 3)上传并解压sonarqube
                    • 4)配置sonarqube数据库连接
                    • 5)修改sonar web端访问端口号(如需要)
                    • 6)配置sonar环境变量
                    • 7)启动sonar
                    • 8)登录sonarqube
                  • 3.SonarQube汉化
                    • 4.安装过程中常见问题及解决办法
                      • 1)启动sonar报错“/temp/conf/es/elasticsearch.yml”访问被拒绝
                      • 2)root用户启动sonar报错
                  • 小结
                  相关产品与服务
                  腾讯云代码分析
                  腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档