静态代码扫描是CI/CD中重要的一环,可以在代码提交到代码仓库之后,在CI/CD流程中加入代码扫描步骤,从而及时地对代码进行质量的检查。这可以有效地降低后期维护成本,优化产品质量,提高产品交付速度。同时,静态代码扫描还可以将代码问题自动通知给开发人员,使得问题得到及时发现和解决。
通俗地说,通过将静态代码分析融入到CI/CD流程中,可以进一步提高软件开发过程的效率和质量,帮助团队快速交付高质量的产品。
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如:参数不匹配、有歧义的嵌套语句、错误的递归、非法计算、可能出现的空指针引用等等。
名称 | 简介 |
---|---|
SonarQube | 是一个开源的代码质量管理平台,可以帮助团队分析代码质量,并生成报告和指标。它支持检测常见的代码质量问题,如代码重复、复杂性、安全漏洞等。 |
Checkstyle | 是一个开源的Java代码规范检查工具,可以自定义代码规范并对Java代码进行实时检查,可以检测到常见的Java编码约定问题,侧重编码风格的检查。 |
PMD | 是一个开源的代码检查器,用于分析Java源代码,可以检测到常见的代码问题,如不必要的对象创建、未使用的变量、空循环等。通过内置的编码规则,通过缺陷匹配对代码进行静态检查。 |
FindBugs | 是一个用于静态分析Java字节码的开源工具,支持查找并修复在Java应用程序中常见的错误。它可以检测到潜在的错误、线程安全问题、不良实践等。 |
IntelliJ IDEA | 是一款流行的Java集成开发环境,内置了丰富的代码分析功能,如代码检查、代码重构、代码搜索和代码审阅。它可以帮助开发人员更轻松地识别和调试代码问题。 |
名称 | 简介 |
---|---|
Pylint | 是Python语言静态代码分析的一种工具,可以识别并报告程序中的错误、代码不规范、不安全的代码等,支持多种代码风格。 |
Flake8 | 是一个集成了多个Python代码检查工具的工具,包括PyFlakes、PEP8和mccabe等工具,可以检查代码语法、代码风格以及代码复杂性。 |
Pyflakes | 是一个轻量级的Python代码静态分析工具,用来检查语法和代码风格,并识别出不合法的操作或语句。 |
Bandit | 是一个基于AST(抽象语法树)的Python安全性扫描器,能识别出代码中的常见漏洞如SQL注入、XSS和代码注入等。 |
mypy | 是Python的静态类型检查器,在代码编写时就可以发现类型问题,并帮助开发人员编写更稳健、易维护的Python代码。 |
Pysa | Facebook开源的、侧重代码安全性检测的工具 |
Sonarqube是一款开源的代码质量管理平台,用于检测代码中的错误,漏洞和代码规范,通过插件的机制,可以基于现有的Gitlab、Jenkins 集成、以便在项目拉取后进行连续的代码检查。旨在提供一个完整的代码质量管理解决方案。
Sonarqube的架构可以分为以下几个部分:
Sonarqube的工作原理如下:
Sonar是一个开源的代码质量管理平台,而SonarQube是Sonar的一个商业版本(之前叫做Sonar Enterprise Edition)。SonarQube有许多增强功能,如更强大的规则引擎、更好的报告和更高级的集成等。
SonarQube是开源的,但它还包括了许多收费的插件和额外的支持服务,这些只能在商业许可下使用。Sonar和SonarQube之间的区别在于SonarQube提供了一些高级功能,特别是在企业环境中需要更多的规则和细粒度的安全,并且需要承担更多的管理和支持责任。
以下提供Windows和Linux两种搭建方式。
将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
打开SonarqQube安装目录,修改\conf\sonar.properties文件,指定连接的数据库、用户名、密码,不同的数据库修改对应的jdbc连接、用户名密码等。
默认端口号为9000,可以通过\conf\sonar.properties文件中“WEB SERVER”配置修改端口号,修改完成后需要重启sonar服务:
我安装的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数据库全部操作权限
① 创建sonar用户
useradd sonar # 创建sonar用户
passwd sonar # 为sonar用户设置密码,运行此命令后输入两遍密码
② 为sonar用户添加root权限
修改 /etc/sudoers 文件,找到root一行,在root下面添加一行,如下:
sonar ALL=(ALL) ALL
③ 以root权限登录sonar用户
su - sonar
上传压缩文件到sonar用户目录下,并解压,确保解压后的目录属组为sonar
编辑sonarqube/conf目录下的配置文件sonar.properties,配置sonarqube连接数据库的用户名、密码,以及数据库地址。数据库版本要求:MySQL >=5.6 && < 8.0
若sonar所在服务器的9000端口被占用,则需要修改为其他端口,若未被占用则不需要修改
配置环境变量后不需要再进入sonar的bin目录即可快速启动sonar
用root用户编辑 /etc/profile 文件,添加如下内容:
export SONAR_HOME=/home/sonar/sonarqube export PATH={PATH}:{SONAR_HOME}"/bin/linux-86-64"
source /etc/profile
sonar启动有两种方式:一种是带日志启动,一种是后台启动
sonar.sh start # 不打印日志启动sonar
sonar.sh console start # 打印日志启动sonar、前台启动
出现SonarQube is up表示启动成功:
启动成功后,sonar数据库中会自动生成多张表
访问地址:http://192.168.1.122:9000/,账号密码:admin admin
登录成功后界面如下:
直接搜索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服务
汉化后的效果:
问题原因:注意检查/home/sonarqube-7.6/temp目录下的子目录及文件所属用户是否为sonar,如果是root,要改为sonar(有可能是第一次使用chown命令设置所属用户后,再次使用root用户修改配置文件,导致该conf目录所属用户发生变更)
解决办法:重新配置conf目录所属用户,一定要确保sonarqube-7.6目录及子目录所属用户为sonar。
chown -R sonar:sonar sonarqube-7.6
再次查看,目录配置正确
问题原因:因为安全问题elasticsearch 不让用root用户直接运行
解决办法:要创建一个用户,以该用户来启动sonar,同时注意sonar主目录的所属用户要是该用户
以上就是静态代码扫描工具sonarqube组成、原理及在不同系统中的环境搭建的全部过程,在环境搭建过程中,一定要注意: