SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,下面将会介绍一下这个工具的安装、配置以及使用。(该文章部分参考其他人写的,加入自身遇到的问题总结)
准备工作;
1、jdk(请自行百度,很easy的)
2、sonarqube:http://www.sonarqube.org/downloads/
3、SonarQube+Scanner:https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.5.zip
4、mysql数据库(请参考:http://www.jianshu.com/p/0dace9c19333)
一、安装篇
1.下载好sonarqube后,解压目录,通过命令行到sonarqube目录并启动
命令: sudo {sonarqube上一级目录}/sonarqube/bin/macosx-universal-64/sonar.sh start
输入Mac本机密码启动sonarqube
2.浏览器访问http://localhost:9000,如出现下图则表示安装成功。
二、配置篇
1.打开mysql,新建一个数据库
在命令行中,执行如下操作:
mysql -u root -p
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
mysql> FLUSH PRIVILEGES;
2.打开sonar.properties文件
cd /{sonarqube上一级目录}/sonarqube-6.5/conf/sonar.properties
3.新增如下信息,:
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
url是数据库连接地址,username是数据库用户名,jdbc.password是数据库密码.
4.重启sonarqube服务,再次访问http://localhost:9000,会稍微有点慢,因为要初始化数据库信息
重启sonarqube服务命令
sudo {sonarqube上一级目录}/sonarqube/bin/macosx-universal-64/sonar.sh restart
5.数据库初始化成功后,登录(admin/admin)
6.按照下图的点击顺序,进入插件安装页面
7.搜索chinese Pack,安装中文语言包
8.安装成功后,重启sonarqube服务,再次访问http://localhost:9000/,即可看到中文界面
三、使用篇
1.打开sonar-runner.properties文件
/{sonar-scanner上一级目录}/sonar-scanner-2.5/conf/sonar-runner.properties
2.mysql节点下输入以下信息
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
注意:如果测试项目与服务器不在同一台机子,则需要添加服务器的IP:
/#----- Default SonarQube
serversonar.host.url=http://XXX.XXX.XXX.XXX:9000
3.配置环境变量
a. 命令行中输入sudo vim ~/.bash_profile,粘贴如下信息
export PATH=$PATH:/Applications/sonarqube-6./bin
export PATH=$PATH:/Applications/sonar-scanner-2.5/bin
b. 保存后执行如下命令
source ~/.bash_profile
4.进入要检查的项目目录下,新建sonar-project.properties
5.输入以下信息:
# must be unique in a given SonarQube instance
sonar.projectKey=Autobom
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=bom
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.sources=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
其中:projectName是项目名字,sources是源文件所在的目录
6.在当前项目目录下执行命令:sonar-runner,分析成功后会出现下图
8.打开http://localhost:9000/,我们会看到主页出现了分析项目的概要图 image.png
预知更多使用,请登录官网自行学习。
http://www.sonarqube.org/
http://docs.sonarqube.org/display/SONAR/Analyzing+with+SonarQube+Scanner
遇到的问题:
坑1: 在执行代码检测时(sonar-runner),出现如下报错
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (8488572 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.
解决方法:
- 查看mysql最大允许包大小,执行如下命令,查看当前mysql允许的大小:
image.pngshow VARIABLES like '%max_allowed_packet%';
- 由于Mac中没有自带my.cnf,所以我们可以新建这个文件,默认是在mysql u目录下新建
cd /usr/local/mysql/etc/ (没有etc目录的话,也可以新建一个)
touch my.cnf
打开my.cnf并输入如下信息:
[mysqld]
max_allowed_packet=32M
- 重启mysql
sudo /usr/local/mysql/support-files/mysql.server restart
- 这边还要重启sonarqube
sudo {sonarqube上一级目录}/sonarqube/bin/macosx-universal-64/sonar.sh restart
坑2:前提:被检查的代码是JAVA,在执行命令sonar-runner,出现如下报错:
ERROR: Error during SonarQube Scanner execution
ERROR: Please provide compiled classes of your project with sonar.java.binaries property
ERROR:
ERROR: To see the full stack trace of the errors, re-run SonarQube Scanner with the -e switch.
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.
解决方法:
修改sonar-project.properties属性文件为如下:
image.png#required metadata
#projectKey项目的唯一标识,不能重复
sonar.projectKey=Auto
sonar.projectName=YingkeAuto
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.modules=java-module
# Java module
java-module.sonar.projectName=Java Module
java-module.sonar.language=java
# .表示projectBaseDir指定的目录
java-module.sonar.sources=.
java-module.sonar.projectBaseDir=src
sonar.binaries=classes
sonar.java.binaries=/Users/forkey/Documents/Tool/Workspace/YingkeAuto/target/classes,/Users/forkey/Documents/Tool/Workspace/YingkeAuto/target/test-classes
sonar.java.test.binaries=/Users/forkey/Documents/Tool/Workspace/YingkeAuto/target/test-classes
网友评论