SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube团队项目代码质量可以检测出项目中重复代码, 潜在bug, 代码风格问题,缺乏单元测试等问题, 并通过一个web ui展示出来。
主要功能如下:
- 用户本地使用IDE的插件进行代码分析
- 用户上传到源代码版本控制服务器
- 持续集成,使用Sonar Scanner进行扫描
- 将扫描结果上传到SonarQube服务器
- SonarQube server将结果写入db
- 用户通过web ui查看扫描结果
- SonarQube导出结果到其他需要的服务
用Sonar能够实现什么?
- 技术债务(sonar根据”规则”扫描出不符合规则的代码)
- 覆盖率(单元测试覆盖率)
- 重复(重复的代码, 有利于提醒封装)
- 结构
Sonar部署
数据库配置
安装mysql 5.61
2
3
4
5
6
7
8rpm -ivh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server -y
systemctl start mysqld.service
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
安装
https://www.sonarqube.org/downloads/1
2
3yum install java-1.8.0
unzip sonarqube-6.7.4.zip -d /usr/local/
ln -s /usr/local/sonarqube-6.7.4 /usr/local/sonarqube
配置
1 | vim /usr/local/sonarqube/conf/sonar.properties |
启动
1 | useradd sonar |
访问:192.168.10.101:9000
登陆管理员:admin:admin
中文
Administration - Marketplace
安装 Chinese Pack,然后重启sonar
也可以通过下列的安装
https://github.com/SonarQubeCommunity/sonar-l10n-zh
https://github.com/SonarQubeCommunity/sonar-l10n-zh/tags1
2cp sonar-l10n-zh-plugin-1.19.jar local extensions/plugins
local bin sonar.sh restart
Sonar-scanner
安装
1 | unzip sonar-scanner-cli-3.2.0.1227-linux.zip -d /usr/local/ |
配置sonar-scanner与sonar关联
1 | sonar.host.url=http://localhost:9000 |
测试代码下载
1 | wget https://github.com/SonarSource/sonar-scanning-examples/archive/master.zip |
配置扫描
1 | vim /root/sonar-scanning-examples-master/sonarqube-scanner/sonar-project.properties |
启动检测
1 | cd sonar-scanning-examples-master/sonarqube-scanner |
Jenkins配置sonar插件
实现Jenkins构建时自动sonar检测。
jenkin安装插件:SonarQube Scanner
系统管理-系统设置
系统管理-全局工具配置
web项目配置 - 配置 - 构建
配置sonar参数,并设置构建失败邮件通知1
2
3
4
5
6sonar.projectKey=web-sonar-scanner
sonar.projectName=web-sonar-scanner
sonar.projectVersion=1.0
sonar.sources=./
sonar.sourceEncoding=UTF-8
sonar.language=php
web项目配置 立即构建
故障解决
无法启动
1
2
3
4
5
6
7
8
9
10cat /usr/local/sonarqube/logs/sonar.log
2018.07.26 18:05:54 WARN app[][o.s.a.p.AbstractProcessMonitor] Process exited with exit value [es]: 1
cat /usr/local/sonarqube/logs/es.log
2018.07.26 18:05:54 ERROR es[][o.e.b.Bootstrap] Exception
java.lang.RuntimeException: can not run elasticsearch as root
useradd sonar
chown -R sonar.sonar /usr/local/sonarqube/
sudo -u sonar /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
1 | vim local elasticsearch jvm.options |
1 | cat /usr/local/sonarqube/logs/web.log |