SonarQube(sonar)是一个开源平台,用于管理源代码的质量。 SonarQube不只是一个质量数据报告工具,更是代码质量管理平台。 支持java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。 SonarQube可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。
- (1) 不遵循代码标准
SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。 - (2) 潜在的缺陷
SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。 - (3) 糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。 - (4) 重复
显然程序中包含大量复制粘贴的代码是质量低下的,SonarQube可以展示 源码中重复严重的地方。 - (5) 注释不足或者过多
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。 - (6) 缺乏单元测试
SonarQube可以很方便地统计并展示单元测试覆盖率。 - (7) 糟糕的设计
通过SonarQube可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过SonarQube可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。
安装过程
软件版本:jdk1.8 Linux Centos Mysql 7.6 SonarQube7.2.1
创建数据库:
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
修改配置文件 sonar.properties:
sonar.jdbc.url=jdbc:mysql://192.168.137.1:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.sorceEncoding=UTF-8
创建用户:
useradd sonar
passwd sonar
赋予 sonar 用户权限
启动 ES
启动 sonarqube 初次启动稍微慢一点,因为要初始化数据库信息
启动成功:访问 http://ip:9000
默认账号密码:admin/admin
安装 SonarScanner 代码扫描器
配置环境变量:
# sonar scanner
export PATH=$PATH:/home/zhutong/tools/sonar-scanner/bin
在目标项目根目录下创建文件 sonar-project.properties
#projectKey是项目的唯一标识,不能出现重复,可随意起
sonar.projectKey=项目标识,随便起即可
# this is the name displayed in the SonarQube UI,不能是中文
sonar.projectName=你的项目名称
# 项目的版本号
sonar.projectVersion=0.5
# 项目的代码的编码格式
sonar.sourceEndcoding=UTF-8
# 项目的语言
sonar.language=java
# 项目的源代码目录
sonar.sources=src
# 项目的编译生成的class文件的所在目录
sonar.java.binaries=target/classes
进行代码检测,执行命令:sonar-scanner
==========
配置集成 jenkins
增加构建步骤,Excute SonarQube Scanner
选项 Analysis properties 增加配置:
#项目的唯一编号,不可重复,随便写
sonar.projectKey=analyseLaw
#项目名称
sonar.projectName=analyseLaw
#项目版本号
sonar.projectVersion=0.0.1-SNAPSHOT
# 项目的源代码目录
sonar.sources=.
#项目代码的编码格式
sonar.sourceEncoding=UTF-8
#项目的语言
sonar.language=java
# 项目的编译生成的class文件的所在目录
sonar.java.binaries=/home/zhutong/datas/analyseLaw/target/classes
sonar.login=admin
sonar.password=admin