SonarQube代码质量检查工具
Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。
Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。
支持Java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。
官网地址:https://www.sonarqube.org
中文文档地址:https://revolyw.gitbooks.io/sonarqube/content/
SonarQube代码检测的七个维度
-
不遵循代码标准(Coding Standards Breach)
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
-
潜在的缺陷(Bugs and Potential Bugs)
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。
-
糟糕的复杂度分布(Bad Distribution of Complexity)
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
-
重复(Duplications)
显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方。
-
注释不足或者过多(Not Enough or Too Many Comments)
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
-
缺乏单元测试(Lack of Unit Tests)
sonar可以很方便地统计并展示单元测试覆盖率。
-
糟糕的设计
通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测藕合。
环境准备
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭selinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
- 关闭swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
- 修改内核参数
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
- 创建数据挂载目录
mkdir -p /data/postgres
mkdir /data/sonarqube_data
mkdir /data/sonarqube_extensions
mkdir /data/sonarqube_logs
chown -R 999 /data/sonarqube_data /data/sonarqube_extensions /data/sonarqube_logs
环境部署
- 安装postgres
docker run -d -p 5432:5432 --name sonarqube_postgres \
-v /data/postgres:/var/lib/postgresql/data \
-e POSTGRES_USER=sonarqube \
-e POSTGRES_PASSWORD=sonarqube \
-e PGDATA=/var/lib/postgresql/data/pgdata postgres
- 安装SonarQube
docker run -d -p 9000:9000 -p 9092:9092 --name sonarqube \
-v /data/sonarqube_data:/opt/sonarqube/data \
-v /data/sonarqube_extensions:/opt/sonarqube/extensions \
-v /data/sonarqube_logs:/opt/sonarqube/logs \
-e SONAR_JDBC_USERNAME=sonarqube \
-e SONAR_JDBC_PASSWORD=sonarqube \
-e SONAR_JDBC_URL="jdbc:postgresql://192.168.10.81:5432/sonarqube" \
sonarqube
访问IP地址+9000,默认账号密码都是admin
安装语言包
我已经装完了所以显示的是中文,初始的是英文的,但是位置不变
点击安装重启即可
检测java代码
-
安装java语言包
重启服务 -
创建项目
-
进入代码目录
mvn clean install sonar:sonar \
-Dsonar.projectKey=task \
-Dsonar.host.url=http://192.168.10.81:9000 \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.java.binaries=target/classes \
-Dsonar.java.coveragePlugin=jacoco \
-Dsonar.sources=src/main/java \
-Dsonar.login=87474c41ef5532d402a138bf46a746c0acc067de
编译完成后可以到SonarQube的web页面查看
利用sonar-scanner检测代码
- 获取sonar-scanner安装包并配置
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
unzip sonar-scanner-cli-3.0.3.778-linux.zip && mv sonar-scanner-cli-3.0.3.778-linux.zip sonar-scanner && cd sonar-scanner
vim conf/sonar-scanner.properties
sonar.host.url=http://192.168.10.81:9000
sonar.sourceEncoding=UTF-8
sonar.jdbc.username=sonarqube
sonar.jdbc.password=sonarqube
sonar.jdbc.url=jdbc:postgres//192.168.10.81/sonarqube
sonar.login=admin
sonar.password=admin
- 在代码跟目录创建一个sonar-project.properties
vim sonar-project.properties
sonar.projectKey=sso
sonar.language=java
sonar.java.binaries=./
sonar.host.url=http://192.168.10.81:9000
sonar.login=sso
sonar.login=admin
sonar.password=admin
- 开始扫描
/app/sonar-scanner/bin/sonar-scanner