持续集成之代码质量管理-Sonar
简介
Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。可以说是目前最强大的代码质量管理工具之一
Sonar 服务框架
sonar主要作用
· 检查代码是否遵循编程标准:如命名规范,编写的规范等。
· 检查设计存在的潜在缺陷:SonarQub e 通过插件 F indbugs、Checkstyl e 等工具检测代码存在的缺陷。
· 检测代码的重复代码量:SonarQub e 可以展示项目中存在大量复制粘贴的代码。
· 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
· 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。
安装启动
配置数据库
使用命令创建数据库,名字为sonar:
CREATE DATABASE sonar CHARACTER SET utf8COLLATE utf8_general_ci
创建一个sonar用户并把这个用户的密码设置为soanr:
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
将创建的sonar数据库的所有权限赋给第三步中创建的sonar用户:
GRANT ALL ON sonar.* TO 'sonar'@'%'IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost'IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
下载和配置sonar
下载地址:Download | SonarQube
将下载好的sonarqube-7.0解压到服务器
修改配置文件
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
选择对应的启动文件,我的是Linux 64 所以启动命令是 ./bin/linux-x86-64/sonar.sh start 这里有个坑是,启动需要es,es不能是root 用户启动,所以要切换一下用户
启动成功后访问 9000端口即可
默认账号为admin 密码admin
Sonar汉化
SonarQube默认为英文,我们可以安装SonarQube提供提供了中文插件,以便更好地熟悉使用。 GitHub - xuhuisheng/sonar-l10n-zh: Chinese Pack for SonarQube
下载完成将插件放到
\extensions\plugins ,重启sonar即可。
集成项目
使用maven 集成
修改Maven 的配置文件 settings.xml 文件,具体配置如下:
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.login>admin</sonar.login>
<sonar.password>123456</sonar.password>
<sonar.host.url>http://127.0.0.1:38077</sonar.host.url>
</properties>
</profile>
<activeProfiles>
<!-- make the profile active all the time -->
<activeProfile>sonar</activeProfile>
</activeProfiles>
Maven 插件会自动把所需数据(如单元测试结果、静态检测结果等)上传到 Sonar 服务器上
在项目里执行命令 mvn sonar:sonar,将代码注入到Sonar中进行分析处理,并将处理结果以XML的形式保存在数据库中。
使用sonar-runner
使用sonar-runner分析项目非常方便,只要在项目工程目录下新建sonar-project.properties文件,内容大致如下:
#key和name保持一致且在sonar下唯一
sonar.projectKey=car_android
sonar.projectName=car_android
#工程版本
sonar.projectVersion=1.0
#源代码目录
sonar.sources=src
#分析的语言
sonar.language=java
#编码
sonar.sourceEncoding=UTF-8
之后在cmd下进入工程目录下运行:sonar-runner–X
运行最终结果显示EXECUTIONSUCCESS即成功。稍候片刻打开sonar查看所有项目看到刚刚分析的项目。
Jenkins 与 SonarQube 集成插件的安装与配置
Jenkins 是一个支持自动化框架的服务器,我们这里不做详细介绍。Jenkins 提供了相关的插件,使得 SonarQube 可以很容易地集成。 登陆 jenkins,点击"系统管理"
搜索安装SonarQube插件,安装完成后,进入系统设置,配置 SonarQube Server 信息
这里有两种方法使用 SonarQube Scanner 进行代码分析,第一种是使用构建后步骤,第二种是在构建的过程中增加 SonarQube Scanner 的步骤,下面我们来分别介绍这两种方法。
自定义Sonar代码审查规则
官方插件默认的规则是不够的,或者说不一定适用于我们团队自己的内部规范,因此,接下来来说说如何定制自己的审查规则。
Sonar扩展代码审查规则的方式有两种:1,使用Java编写Sonar插件;2,在SonarQube界面直接添加XPath规则。