简介
SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java、C、C++、JavaScripe等等二十几种编程语言的代码质量管理与检测。
通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理
架构图
可以从七个维度检测代码质量:
(1)复杂度分布(complexity):代码复杂度过高将难以理解
(2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方
(3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
(4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
(5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
(6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug
(7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
准备工作
JDK1.8需要安装和环境变量
mysql数据库:安装方式如下
sonar安装
下载安装文件
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.3.zip
创建数据库sonar,和用户密码,并授权
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
修改配置文件
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.web.port=9000
sonar.search.port=9001
注意这里的端口我修改了,web端口是9000,es的端口是9001
WIN系统启动服务
CMD命令行下执行,初始化创建数据库和启动es等服务
E:\sonarqube-7.3\bin\windows-x86-64>StartSonar.bat
主要端口不要被占用,如果占用请关闭。
cmd查看端口占用
netstat -aon|findstr "9000"
centos利用netstat -tpnl查看的端口开放情况
centos系统启动服务
不能用root用户启动es
创建sonar 用户并赋权
[root@i-vzdytl5t linux-x86-64]# adduser sonar
[root@i-vzdytl5t linux-x86-64]# passwd sonar
[root@i-vzdytl5t sonarqube]# chown -R sonar:sonar sonarqube-7.3
然后启动服务
[root@i-vzdytl5t linux-x86-64]# su sonarUser
[sonarUser@i-vzdytl5t linux-x86-64]$ ./sonar.sh console
//后台启动
[sonarUser@i-vzdytl5t linux-x86-64]$ ./sonar.sh start
Starting SonarQube...
Started SonarQube.
[sonarUser@i-vzdytl5t linux-x86-64]$ netstat -tlnp
#./sonar.sh start 启动服务
#./sonar.sh stop 停止服务
#./sonar.sh restart 重启服务
浏览器打开web服务安装插件
http://localhost:9000/projects 默认管理账号和密码都是admin
汉化插件安装
直接访问下面的地址,就可以看到,列表中有Chinese Pack,
点击Install安装,安装完成后菜单栏下方会提示你重启,点击重启即可
http://localhost:9457/admin/marketplace?search=Chinese
Checkstyle 插件安装
admin 登录,点击 配置 -> 系统 -> 更新中心 -> Available -> Search,输入 CheckStyle,在搜素结果中找到 CheckStyle 插件点击 Install,等待下载完成后,按照页面提示点击 Restart 自动重启服务即可完成安装。
代码检测
代码检测需要客户端把检测的报告提交到服务中去
前面已经说了客户端可以通过IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式进行扫描分析
maven 插件方式
在安装maven后的setting.xml文件的profiles标签下面贴如下配置信息
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 配置 Sonar Host地址,默认:http://localhost:9000 -->
<sonar.host.url>
http://localhost:9000
</sonar.host.url>
</properties>
</profile>
进入该java项目根目录 执行如下命令,最后BUILD SUCCESS则检测成功完成
>mvn clean install sonar:sonar
Scanner安装
参照资料:
下载Scanner
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
1.解压后,打开sonar-scanner-2.8目录下的conf目录,找到sonar-scanner.properties文件
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
2.命令查看是否可用,配置环境变量
配置环境配量
Windows下新增一个变量SONAR-RUNNER,值为sonar-scanner的解缩地址,
如E:\Program File\sonar-scanner-2.8
然后在PATH变量后面追加%SONAR-RUNNER%\bin;
centos下直接在/etc/profile下参考jdk的方式
sonar-scanner -v
测试源码分析
1、配置sonar-project.properties
在要进行代码质量检测的项目根目录下新建一个名为sonar-project.properties的配置文件
# 项目唯一标识符key
sonar.projectKey=com.demo
# 项目名称
sonar.projectName=demo
# 项目版本
sonar.projectVersion=1.0
# //分析的代码文件目录
sonar.sources=src
sonar.sourceEncoding=UTF-8
2.cd进入你的工作空间,某个工程的代码路径,
3、敲入sonar-scanner,即可进行分析