一,sonar介绍
sonarqube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。
二,sonarqube特性
持续检查:
项目整体的健康程度
项目的主页画会给出,项目整体的bugs,VULANERABILITIES,code smells
专注于漏洞
water-leak-paradigm可以有效的管理代码质量:新特性,增加的,改变的(water-leak-paradigm是sonarqube研究的一种代码管理方法)。
在项目监测报告中,需要密切关注:NEW BUGS,New Vulnerabilities
实施质量阀值
在团队项目中,可以设置质量阀值(quality cate),用于监管质量
分支分析
确保干净的代码才会被合并到主分支中
集成DEVOPS
集中质量
七个维度检测代码质量
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):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
- 用户本地使用IDE的插件进行代码分析
- 用户上传到源代码版本控制服务器
- 持续集成,使用Sonar Scanner进行扫描
- 将扫描结果上传到SonarQube服务器
- SonarQube server将结果写入db
- 用户通过web ui查看扫描结果
- SonarQube导出结果到其他需要的服务
1.安装JDK
1.1JDK下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
1.2.点击上图中箭头所指的地方,会出现下面的这个界面,此时你需要根据你的电脑系统来进行对应的版本进行选择,在选择版本和下载之前你需要首先接收协议,具体界面如下图所示:
1.3下载解压到规定路径并设置环境变量
#vim /etc/profile
打开后,在文档最下方加上一下环境变量配置代码:
export JAVA_HOME=/opt/jdk1.8.0_181
export JAVA_BIN=/opt/jdk1.8.0_181/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
:wq
配置立即生效:source /etc/profile
检查是否安装成功。#java -version 看到jvm版本及信息,即安装成功。
2.sonarqube安装
2.1目前sonarqube最新版本是7.7,需要注意最新版的 Sonar 需要至少JDK 1.8及以上版本。质量门在拉请求,注入缺陷规则的PHP和BitBucket服务器支持。官网下载地址(https://www.sonarqube.org/downloads/)重点说明:官网下载需要翻墙。
2.2 解压
unzip sonarqube-7.7.zip
mv sonarqube-7.7 /data/
3.准备数据库
因为sonar会用到数据库,所以我们要事先准备好数据库,它支持多种数据库,我们这里选择的是mysql,注意mysql的版本最低要5.6,并且只支持InnoDB引擎。我们选择已经安装好的数据库,直接创建,所以安装过程略过:
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar@123';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar@123';
mysql> FLUSH PRIVILEGES;
4.配置sonar
4.1配置数据库连接
编辑/data/sonarqube-7.7/conf/sonar.properties
,修改内容如下:
# 数据库连接
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar@123
sonar.jdbc.url=jdbc:mysql://192.168.5.134:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
# Web 端口
sonar.web.host=0.0.0.0
sonar.web.port=9000
4.2 创建用户sonar
因为程序不允许我们使用root执行,所以我们需要注册一个普通用户。
useradd sonar
chown -R sonar.sonar /data/sonarqube-7.7
4.3启动sonar
[root@monitor ~]# su - sonar
[sonar@monitor ~]$ /data/sonarqube-7.7/bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
/data/sonarqube-7.7/bin/linux-x86-64/sonar.sh start
console | start | stop | restart | status | dump
日志:
tail -f /data/sonarqube-7.7/logs/sonar.log
4.4配置sonarqube开机启动
添加sonar环境变量
修改 ~/.bash_profile
1、创建服务
vi /etc/init.d/sonar
内容如下,其中标红内容为服务绝对路径:
#!/bin/sh
#
# rc file for SonarQube
#
# chkconfig: 345 96 10
# description:SonarQube system (www.sonarsource.org)
#
### BEGIN INIT INFO
# Provides: sonar
# Required-Start:$network
# Required-Stop:$network
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description:SonarQube system (www.sonarsource.org)
# Description:SonarQube system (www.sonarsource.org)
### END INIT INFO
/data/sonarqube-7.7/bin/linux-x86-64/sonar.sh $*
2、增加执行权限
chmod +x /etc/init.d/sonar
3、添加服务
chkconfig --add sonar
4、配置服务启动时依赖的jdk
vi /opt/sonarqube/conf/wrapper.conf
修改wrapper.java.command=java,配置为jdk中java命令的绝对路径
wrapper.java.command=/opt/jdk1.7.0_07/bin/java
5、启动服务
service sonar start
4.5检查是否启动成功:
5.登录sonar
Web登录:IP:9000 默认登录账户admin admin
5.1安装中文插件。
重启才会生效:
6.安装sonar扫描器:
6.1Sonar通过SonarQube Scanner
(扫描器)来对代码进行分析。
下载官网地址(https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner)
unzip sonar-scanner-3.3.0.1492-linux
mv /home/sonar/sonar-scanner-3.3.0.1492-linux /data/sonar-scanner-3.3.0
chown -R sonar.sonar /data/sonar-scanner-3.3.0
6.2扫描器和sonar关联起来
编辑文件/data/sonar-scanner-3.3.0/conf/sonar-scanner.properties
,修改为如下内容:
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar@123
sonar.jdbc.url=jdbc:mysql://192.168.5.134:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false