前言:在项目开发当中,完成需求并上线是一件很开心的事情,但为了能按时上线功能不得不为了完成功能而写代码,写的时候觉得先把功能上了以后再回头优化此处代码,但真正上线之后你就会发现你再也不想去修改之前遗留的坏味道的代码,所以需要有个代码审查工具来自动检查代码当中的坏味道和潜藏的bug,Sonarqube就是这样一款代码质量审查工具,来保证代码的整体质量不至于太差
这里我是在CentOS7下部署使用Sonarqube代码审查工具,这里只演示如何在linux下安装步骤。
环境要求:
Sonarqube版本:Sonarqube6.7.6
数据库:mysql5.6(Sonarqube要求数据库最低5.6,我这里只用了一个最低支持),如果mysql版本低了可自行安装高一点的版本
第一步:
1、首先去Sonarqube官网下载安装包:https://www.sonarqube.org/downloads/
2、然后解压缩:tar -zxvf sftp://root@192.168.211.136/data/sonarqube-6.7.6.zip
3、进入到解压缩后的目录:cd sonarqube-6.7.6
4、修改conf配置文件:vim conf/sonar.properties
配置如下内容:
# DATABASE
#
# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=root
sonar.jdbc.password=
Sonarqube启动分析文件的时候会把分析信息存储到数据库里面,所有这里配置的是mysql用户名和密码,我这里用户名是root,没有设置密码;
然后接着配置:
#----- MySQL 5.6 or greater
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported. It can not be changed.
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=truecharacterEncoding=utf8rewriteBatchedStatements=trueuseConfigs=maxPerformanceuseSSL=false
这里配置的是Sonarqube连接数据库的链接字符串,我用的是mysql,如果你用的是别的数据库(SQLServer,Oracle,PostgreSQL)里面都是支持的,可以找到对应的数据库配置进行配置,这里我就不在列出别的数据库相关的链接字符串了,因为我的电脑上也没装那么多数据库,配置也简单,其他数据库配置可以看下图:
只需要把对应数据库的前面的“#”去掉,修改为可链接即可;
然后接着配置web页面访问端口,找到以下配置,默认的9000端口,可以修改为别的端口,我这里修改为5051:
#sonar.web.port=9000
sonar.web.port=5051
修改完之后,别的地方默认配置就好,然后保存退出::wq
5、在启动Sonarqube之前呢,要先在数据库里面新建好一个名为:sonar的数据库,不然启动的时候会报错,所以我们要新建数据库sonar,可以使用客户端连接工具进行创建也可用语句,如下:
1CREATE SCHEMA `sonar` DEFAULT CHARACTER SET utf8 ;
6、以后都配置好之后,数据库也创建好之后,下面就可以启动Sonarqube了;
切换到Sonarqube目录:
1cd /data/sonarqube-6.7.6/bin/
切换到这里之后,你可能会看到如图的好几个文件夹:
因为我linux上面我把跟我系统不匹配的文件删除了,所以就在win下面截图说明展示了,这里进入到跟你系统匹配的目录里面,然后启动文件,我这里是linux64位,所以我进入的是linux-x86-64,然后启动Sonarqube:
./linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
[admin@bogon linux-x86-64]$
到这里之后,看到以上命令只有2条输出,然后就退出了,是不是觉得很奇怪,其实在启动Sonarqube的时候它会把输出信息输出到日志文件夹里面对应的log文件:
[root@bogon logs]# pwd
/data/sonarqube-6.7.6/logs
[root@bogon logs]# ls
access.log ce.log es.log sonar.log web.log
然后我们进入到这里可以看到已经有了5个日志文件,然后我们执行查看命令查看里面的启动信息:
tail -f es.log
tail -f sonar.log
tail -f web.log
这里是动态输出文件内容,然后可以观察一下,有报错的话,里面会显示,这里主要关注一下sonar.log日志,如果你看到了这两个就说明Sonarqube启动成功了:
如果启动失败可以在上面列出的三个日志当中看到错误信息,然后根据错误信息修改一下配置即可;Sonarqube会附带启动ElasticSearch,在下载Sonarqube的时候会自带,在执行以上启动命令的时候会自动启动ES,这里注意ES不支持root用户启动
然后可以在Sonarqube的bin目录下执行命令查看Sonarqube是否真正启动成功:
[admin@bogon linux-x86-64]$ ./sonar.sh status
SonarQube is running (31640).
可以看到状态是running,说明Sonarqube正在运行!
7、启动成功之后然后访问地址可看到Sonarqube页面:
1http://192.168.211.136:5051/about
看到这里页面就说明Sonarqube安装成功了!
8、然后点击Log in登录,账号和密码都是:admin,登录到Sonarqube
9、然后我们去下载一些插件使Sonarqube功能更完善:
这里下载个中文包,使Sonarqube看起来更舒服,然后你可以在这里下载你需要的插件,这里有Sonarqube的官网文档可以查看:https://docs.sonarqube.org/latest/setup/get-started-2-minutes/
安装完你选的插件之后,需要把Sonarqube进行重启一下,不然没有办法直接加载这些插件,安装完之后可以看到如下信息:
说明安装了8个插件,有3个插件是需要更新的,然后点击右边“Restart”进行重启Sonarqube,重启之后插件就会重新加载进来,然后就可以进行项目分析了。
重启之后再访问的话,看到的界面就会变的很舒服了:
10、以上都安装完成之后,然后就可以来进行项目分析了,点击右上角开始,然后会弹出一个弹窗,之后根据提示进行填写相关项进行创建分析项目:
按照步骤配置好之后,会看到右下角有输出,然后把黑色背景里面的代码拷贝,然后在你的项目目录下面进行粘贴,即可分析:
[root@bogon newk12]# sonar-scanner
-Dsonar.projectKey=test-project
-Dsonar.sources=.
-Dsonar.host.url=http://192.168.211.136:5051
-Dsonar.login=203f186468c1c9dc741a17f5c34fa1ba6718c924
执行完之后,就开始进行分析了,然后等一会儿,当你看到以下输出的时候,说明分析已经成功并且完成了:
然后刷新Sonarqube的web页面可看到分析结果,可以看到代码里面隐藏的bug和一些坏味道,然后可以进行查看是哪里的问题:
11、如果在执行分析的时候分析失败了,看到的结果不是SUCCESS,可能的原因是在分析之后提交数据库的时候由于数据库的最大提交限制太小引起的,可以在mysql数据库里执行:
MySQL [(none)] show variables like '%max_allowed_packet';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| max_allowed_packet | 524288000 |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)
可以看到“max_allowed_packet”的值是很小的,我这里是设置之后的值,可以使用命令进行设置大小:
set global max_allowed_packet = 100 * 1024 * 1024;
或者直接在mysql的配置文件里面的“max_allowed_packet”的值:
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address = 0.0.0.0
symbolic-links=0
max_allowed_packet=500M
然后重启mysql:
1service mysqld restart
之后再重新执行分析即可。
12、可以看下基本配置:
然后下图在这里可以进行分析规则配置:
这里默认的是“Sonar way”,你也可以修改,修改之后重启,然后在分析项目的时候就会按照新规则进行,这里我用的默认的,功能挺强大的,我就不一一列举了,如果你有兴趣的话,可以去官网看看文档。
结语:Sonarqube可以很好的分析项目当中书写和代码命名不规范的地方,同时如果你的编辑器也支持Sonarlint的话,也可以使用Sonarqube的代码分析规则,具体怎么配置,我会在下篇手记当中进行配置。