SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检测。
SonarQube特性
持续检查
- 项目整体的健康程度
项目的主页面会给出,项目整体的Bugs、Vulnerabilities、Code Smells - 专注于漏洞
water-leak-paradigm可以有效的管理代码质量:新特性,增加的,改变的
(water-leak-paradigm是sonarqube研究的一种代码管理方法)
在项目监测报告中,需要密切关注:New Bugs、New Vulnerabilities - 实施质量阈值
在团队项目中,可以设置质量阈值(Quality Gate),用于监管质量 - 分支分析
确保干净的代码才会被合并到主分支中
监测棘手的问题
多语言
支持:ABAP、C/C++、C#、CSS、COBOL、Flex、Go、HTML、Java、JavaScript、Kotlin、Objective-C、PL/SQL、PL/I、PHP、Python、RPG、Ruby、Swift、T-SQL、TypeScript、VB.NET、VB6
XML
集成DevOps
集中质量
七个维度检测代码质量
- 复杂度分布(complexity):代码复杂度过高将难以理解
- 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方
- 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
- 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
- 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
- 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug
-
结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
SonqrQube系统集成图.png - 用户本地使用IDE的插件进行代码分析
- 用户上传到源代码版本控制服务器
- 持续集成,使用Sonar Scanner进行扫描
- 将扫描结果上传到SonarQube服务器
- SonarQube server将结果写入db
- 用户通过web ui查看扫描结果
- SonarQube导出结果到其他需要的服务
下面将会介绍这个工具的安装、配置以及使用。
默认电脑中已安装JDK和MySQL数据库(Sonar7.4支持的版本:Java1.8, MySQL5.6/5.7 关于支持的基础环境可以参照https://docs.sonarqube.org/latest/requirements/requirements/),JDK已配置环境变量,MySQL服务已启动。
1 SonarQube安装
目前SonarQube最新的版本是7.4,该版本对比以往增加了:DevOps工具、Cognitive Complexity等。会以该版本为例。
1.1 下载
在SonarQube的下载页面:https://www.sonarqube.org/downloads/,下载需要的版本。一般会下载社区版本,如下图所示:
7.4社区版本1.2 安装
下载完成后,解压缩直接可以使用,打开bin目录下对应OS的StartSonar.bat,例如本人的电脑是windows64位
StartSonar.bat
可能出现的意外情况:StartSonar.bat打开后,运行几秒钟后退出,此时Sonar服务并没有成功启动。
解决办法:打开任务管理器(Ctrl+Alt+Delete),找到 Java(TM) Platform SE binary,通常情况下会有2-3个,结束任务,之后重新双击启动StartSonar.bat,界面会有提示SonarQube is up,即成功启动。
浏览器中打开:http://localhost:9000,可以进入web界面。 web界面
1.3 注册
点击右上角Log in在web页面注册账号,并登录
注册账号
备注:保存账号及密码,后面会用到
2 配置
SonarQube工具需要数据库的支持,Scanner(后续会讲到)扫描项目时,会将分析结果存入数据库,web页面生成报告时会读取数据库的数据。
SonarQube架构设计图SonarQube目前支持Oracle、MySQL、PostgreSQL、MS SQL,数据库版本以及要求,参照:https://docs.sonarqube.org/latest/requirements/requirements/,本次安装使用的是MySQL
2.1 新建数据库
命令行 窗口:mysql -u root -p //登录数据库
create database sonar7 default character set utf8 collate utf8_general_ci;
//创建数据库,默认编码utf8
MySQL数据库必须是InnoDB存储引擎,不支持MyISAM
2.2 配置 sonar.properties
打开安装目录下的conf文件,找到sonar.properties,编辑mysql节点的配置文件(不同的数据库对应不同的节点,sonar.properties中有guide)
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar7?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false #数据库连接地址
sonar.jdbc.username=root #数据库账号
sonar.jdbc.password=admin #数据库密码
sonar.sorceEncoding=UTF-8
sonar.login=admin #web页面注册的账号
sonar.password=admin #web页面注册的密码
配置完成后,重新启动StartSonar.bat, 如果启动不成功,可以结束Java(TM) Platform SE binary。
启动成功的标志,下述三项,缺一不可
- sonarqube is up
- localhost:9000 可以打开
- 数据库中,生成了十几张表
3 使用
3.1 下载配置Scanner
SonarQube Scanner 是默认Scanner,Sonar为Maven、Gradle等都开发了Scanner
多个版本的Scanner这里我们使用default的Scanner,可以通过下面链接下载:
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
下载完成后,配置conf文件夹下的sonar-scanner.properties
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
为安装目录配置环境变量
- 新建变量,name=SONAR_SCANNER_HOME。value=G:\develop\sonarqube-7.4\sonar-scanner-3.2.0.1227-windows
- 打开path,输入%SONAR_SCANNER_HOME%\bin;
- sonar-scanner -h,出现以下信息,则表示环境变量设置成功
3.2 项目配置
进入待检测的项目目录中,新建sonar-project.properties,增加以下内容:
# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=My project
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
打开命令行窗口,切换目录到项目目录,输入sonar-scanner
运行成功后,打开web界面,即可看到对当前项目的分析。
此时查看web界面,可以看到当前项目的代码质量情况
web4 插件
sonar市场在线下载中文语言包Chinese Pack
本文参考以下博客:
https://www.cnblogs.com/qiumingcheng/p/7253917.html
https://blog.csdn.net/u012448904/article/details/81706283
网友评论