一、 Sonar介绍
Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
二、 sonar部署
预置条件
1. 已安装Java环境,最新版本的sonar5.6需要jdk1.8及以上环境
2. 已安装有MySQL数据库,需mysql5.6 或者更高版本
部署
1. Jdk安装
[root@bogon~]# tar -zxvf jdk-8u131-linux-x64.tar.gz
配置环境变量
[root@bogon~]# vim /etc/profile
exportJAVA_HOME=/usr/local/src/jdk1.8.0_131
exportJAVA_BIN=$JAVA_HOME/bin
exportPATH=$PATH:$JAVA_HOME/bin
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[root@bogon~]# source /etc/profile
2. Sonar安装
[root@bogon~]# cd /usr/local/src
软件包我们通过wget或者下载,rz上传到服务器
#软件包下载:https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-5.6.zip
[root@bogonsrc]# unzip sonarqube-5.6.zip
[root@bogon src]# mv sonarqube-5.6 /usr/local/
[root@bogonsrc]# ln -s /usr/local/sonarqube-5.6/ /usr/local/sonarquber
3. MySQL安装
# wgethttp://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm-ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server
[root@bogon~]# systemctl start mysqld.service
[root@bogon~]# systemctl enable mysqld.service
[root@bogon~]# mysql_secure_installation
[root@bogon ~]# mysql -uroot -p123456
数据库配置
mysql>CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql>GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar@pw';
mysql>GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar@pw';
mysql> FLUSH PRIVILEGES;
4. sonar配置
[root@bogon~]# cd /usr/local/sonarqube/conf/
[root@bogonconf]# ls
sonar.properties wrapper.conf
编写配置文件,修改数据库配置
[root@bogonconf]# vim sonar.properties
#我们只需要去配置文件里面修改数据库的认证即可
sonar.jdbc.username=sonar #数据库用户
sonar.jdbc.password=sonar@pw #数据库密码
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
5. 启动Sonar
你可以在Sonar的配置文件来配置Sonar Web监听的IP地址和端口,默认是9000端口。
[root@bogonconf]# vim sonar.properties
#sonar.web.host=0.0.0.0
#sonar.web.port=9000
启动命令如下:
[root@bogon~]# /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
StartingSonarQube...
Started SonarQube.
检查是否有相应的端口
[root@bogon ~]# netstat –lntup
如果有什么问题可以看一下日志[/usr/local/sonarqube/logs/sonar.log]
Web登陆:IP:9000
三、 sonar使用
sonar跟jenkins类似,也是以插件为主
sonar安装插件有2种方式:第一种将插件下载完存放在sonar的插件目录,第二种使用web界面来使用安装
存放插件路径[/usr/local/sonarqube/extensions/plugins/]
安装中文插件
登陆:用户名:admin 密码:admin
其他插件也可如此安装,如PHP语言插件
Sonar 插件--->语言插件 (分析什么语言,你就需要安装什么语言的插件)
1. Sonar通过SonarQubeScanner(扫描器)来对代码进行分析
官方文档:http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
1) 下载扫描器插件
[root@bogon ~]# wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip
[root@bogon ~]# unzip sonar-scanner-2.8.zip
[root@bogon ~]# mv sonar-scanner-2.8 /usr/local/
[root@bogon ~]# ln -s /usr/local/sonar-scanner-2.8//usr/local/sonar-scanner
2) 我们要将扫描器和sonar关联起来
[root@bogon~]# cd /usr/local/sonar-scanner
[root@bogonsonar-scanner]# ls
bin conf lib
[root@bogonsonar-scanner]# cd conf/
[root@bogonconf]# ls
sonar-scanner.properties
[root@bogonconf]# vim sonar-scanner.properties
sonar.host.url=http://localhost:9000 #sonar地址
sonar.sourceEncoding=UTF-8 #字符集
sonar.jdbc.username=sonar #数据库账号
sonar.jdbc.password=sonar@pw #数据库密码
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8 #数据库连接地址
#打开注释即可
3) 代码分析
我们现在需要找一个代码进行分析。
sonar插件提供了一个代码的库
github:https://github.com/SonarSource/sonar-examples
我们下载软件包:https://github.com/SonarSource/sonar-examples/archive/master.zip
解压
[root@bogon src]# unzip sonar-scanning-examples-master.zip
[root@bogon src]# cdsonar-scanning-examples-master/sonarqube-scanner
[root@bogonsonarqube-scanner]# ls
copybooks coverage-report sonar-project.properties src
配置文件解释:
如果想扫描项目,就需要在代码路径下放一个配置文件*.properties,内容如下:
[root@bogonsonarqube-scanner]# more sonar-project.properties
sonar.projectKey=org.sonarqube:sonarqube-scanner #Key
sonar.projectName=Example ofSonarQube Scanner Usage #这里的名称会显示在一会的web界面
sonar.projectVersion=1.0 #版本,这里的版本一会也会显示在web界面上
sonar.sources=src,copybooks #软件包存放路径
sonar.sourceEncoding=UTF-8 #字体
## CobolSpecific Properties
#comma-separated paths to directories with copybooks
sonar.cobol.copy.directories=copybooks
#comma-separated list of suffixes
sonar.cobol.file.suffixes=cbl,cpy
sonar.cobol.copy.suffixes=cpy
## FlexSpecific Properties
#retrieve code coverage data from the Cobertura report
sonar.flex.cobertura.reportPath=coverage-report/coverage-cobertua-flex.xml
# PL/ISpecific Properties
sonar.pli.marginLeft=2
sonar.pli.marginRight=0
配置后在该项目下运行sonar-scanner扫描
[root@bogon sonarqube-scanner]# /usr/local/sonar-scanner/bin/sonar-scanner
扫描之后我们在web界面上就可以看到代码的扫描结果
这里的名字,版本 都是在sonar-project.properties文件中定义的
点击项目名称查看详细信息
2. Sonar通过maven来对代码进行扫描分析
安装maven
[root@bogon src]# tar -zxvf apache-maven-3.5.0-bin.tar.gz
配置maven环境变量
[root@bogon local]# vim /etc/profile
exportMAVEN_HOME=/usr/local/src/apache-maven-3.5.0
export PATH=${MAVEN_HOME}/bin:${PATH}
[root@bogon local]# source /etc/profile
检查maven是否安装成功
[root@bogonlocal]# mvn -v
Apache Maven 3.5.0(ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Mavenhome: /usr/local/src/apache-maven-3.5.0
Javaversion: 1.8.0_141, vendor: Oracle Corporation
Javahome: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre
Defaultlocale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64",arch: "amd64", family: "unix"
进入项目所在目录进行扫描
[root@bogon ~]# cd/usr/local/src/sonar-scanning-examples-master/sonarqube-scanner-maven/
[root@bogon sonarqube-scanner-maven]# mvn clean install sonar:sonar
注意所在目录必须有pom.xml配置文件