SonarQube 是一款领先的持续代码质量监控平台,开源在github 上,如今已更新到6.2 版本,star 数量超过 1400+,能够轻松配置在内网服务器,实时监控代码,帮助了解提高提高团队项目代码质量。经过插件机制,SonarQube能够继承不一样的测试工具,代码分析工具,以及持续集成工具。javascript
与持续集成工具(例如 Hudson/Jenkins 等)不一样,SonarQube 并非简单地把不一样的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是经过不一样的插件对这些结果进行再加工处理,经过量化的方式度量代码质量的变化,从而能够方便地对不一样规模和种类的工程进行代码质量管理。html
在对其余工具的支持方面,Sonar 不只提供了对 IDE 的支持,能够在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 SonarQube 还对大量的持续集成工具提供了接口支持,能够很方便地在持续集成中使用 SonarQube。java
此外,SonarQube 的插件还能够对 Java 之外的其余编程语言提供支持,对国际化以及报告文档化也有良好的支持。python
行业内提到"代码质量管理, 自动化质量管理", 通常指的都是经过Sonar来实现。本文的目标是实如今Sonar上显示出iOS项目, 先看张最终的效果图:mysql
用Sonar可以实现什么?git
问题1: "规则"指的是什么? github
在Sonar工具中配置检测工具(规则), 而后sonar根据规则检测"质量报告文件", 得出问题数目。 好比本文配置的规则是OCLint复制代码
问题2: 技术债务的天数怎么得出?web
每一个规则都有对应的处理时间, 最后:问题类型1数目 * 对应时间 + 问题类型2数目 * 对应时间 +... 获得时间。复制代码
SonarQube 并非简单地将各类质量检测工具的结果(例如 FindBugs,PMD 等)直接展示给客户,而是经过不一样的插件算法来对这些结果进行再加工,最终以量化的方式来衡量代码质量,从而方便地对不一样规模和种类的工程进行相应的代码质量管理。objective-c
SonarQube 在进行代码质量管理时,会从图 1 所示的七个纬度来分析项目的质量。算法
SonarQube 不是那种安装便可用的工具,他须要数据库的支持,用于存储检测项目后的分析数据,同时为了实现可持续监测,还须要项目持续集成工具(如Jenkins)的支持,在构建版本前,经过Jenkins+Sonar 插件执行项目分析指令,最终的结果会经过SonarQube 服务器的Web 页面展现。
下面咱们就经过mysql+Jenkins+SonarQube 实现项目代码质量的可持续监测
SonarQube 的安装一般须要知足必定的软硬件条件,具体要求以下所示:
Server 要求
Web server 最少须要 500MB 的内存空间,推荐内存空间大小 2GB。Sonar 在进行代码质量分析时,一般大约每 1 KLOC 须要存储 350KB 左右的数据,因此要尽可能为 SonarQube 的 web server 提供大的内存。
Database 要求
尽管 SonarQube 自己自带嵌入的 Derby 数据库,可是因为 Derby 比较简单,因此在生产环境中强烈推荐安装相应的企业版数据库,SonarQube 支持的数据库包括: MySQL 5.x+、Oracle10g+、PostgreSQL 9.x 和 MS SQLServer 2005 and 2008,推荐使用 MySQL。
Browser 要求
SonarQube 支持大多数的浏览器,包括 Firefox、Internet Explorer 7.x and 8.x and chromed 等,推荐使用 chromed。
目前官方最新的版本是6.2,可是对于部分插件会存在不兼容的问题,致使Sonar 服务启动失败,因此为了使用和演示,我采用了旧版本4.5.7,由于此版本兼容 sonar-objective-c-plugin-0.3.1 插件。
更新:
关于XCode8的兼容方案, 请看这篇文章
数据库配置
进入数据库命令模式或者直接使用GUI 工具,建立Sonar-Qube 服务所需的数据库
mysql -u root -p
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
mysql> FLUSH PRIVILEGES;复制代码
完成之后测试一下链接是否正确
安装SonarQube 与SonarQube-Runner
SonarQube Runner 2.4 下载地址
从官网下载 SonarQube 的最新版本并解压到/usr/local/
文件夹
添加SONAR_HOME、SONAR_RUNNER_HOME 环境变量,并将SONAR_RUNNER_HOME 加入PATH
修改Sonar-Qube 配置文件
配置文件路径在 ./conf/sonar.properties
# 设置数据库的帐户密码
sonar.jdbc.username=ua
sonar.jdbc.password=pwd
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
# By default, ports will be used on all IP addresses associated with the server.
sonar.web.host=0.0.0.0
# The default value is root context (empty value).
sonar.web.context=/
# TCP port for incoming HTTP connections. Default value is 9000.
sonar.web.port=9003复制代码
运行以下命令启动 Sonar-Qube,根据操做系统选择
Last login: Wed Feb 15 18:15:05 on ttys000
localhost:~ tianyi$ /usr/local/sonarqube-6.2/bin/macosx-universal-64/sonar.sh start
localhost:~ tianyi$ /usr/local/sonarqube-6.2/bin/macosx-universal-64/sonar.sh start
Starting SonarQube...
Started SonarQube.复制代码
建立一个简单的工程
默认密码是admin:admin,登录管理员帐号之后,配置系统参数
建立一个Demo 工程
Demo 工程简介
由于尚未进行过度析,因此Demo 暂时只能配置,在使用篇咱们会详细介绍若是经过指令或自动化执行分析审查。
安装一些必备插件,均可以从官网或者github 上搜索到
Sonar支持多种插件,插件的下载地址为:docs.codehaus.org/display/SON…
将下载后的插件上传到${SONAR_HOME}extensions\plugins目录下,从新启动sonar。
(注意版本号兼容性问题)
已安装SonarQube Runner且环境变量已配置,即sonar-runner命令可在任意目录下执行
如何配置环境变量,参考这篇文章
1. 在项目源码的根目录下建立sonar-project.properties配置文件
以iOS 项目为例
# Required metadata
sonar.projectKey=iOS::Demo
sonar.projectName=iOS::Demo
sonar.projectVersion=1.0
# Comma-separated paths to directories with sources (required)
sonar.sources=Demo
# Language
sonar.language=objectivec
# Encoding of the source files
sonar.sourceEncoding=UTF-8复制代码
注意:sonar.language 和安装的代码审查插件有关,须要安装 sonar-objective-c 插件,不然运行时会提示没法找到这个语言
2. 执行分析
在项目的根目录执行分析指令
/usr/local/sonar-runner-2.4/bin/sonar-runner复制代码
查看Sonar 分析的结果
以上是建立Demo 工程后,经过手动执行分析指令完成代码审查分析。
在jenkins的插件管理中选择安装SonarQube-Scanner,该插件可使项目每次构建都调用sonar进行代码度量。
进入配置页面对sonar插件进行配置,以下图:
以上配置可使项目在构建前,自动执行代码审查和分析,结果会自动保存并上传到数据库,经过Sonar 服务器展现给开发者。
每5分钟检查一次仓库,如有上库,则自动执行代码检测
至此,经过Sonar 初步构建代码持续审查的工做完成。
资源找寻的问题
文中提到的资源文件,网上谷歌百度都用上,也找了好久,包括一些插件的问题,必须安装的就是 Sonar-Qube,Runner 其实没必要要安装,由于Jenkins 里有插件,能够直接使用。
环境配置问题
若是不经常使用指令的话,能够不配置,直接经过绝对路径作操做,环境配置的方法参考这篇文章
初始化时遇到Sorry 的问题
遇到这种问题能够去根目录 /log/xx.log 中查看日志,具体问题具体解决
汉化包的问题
若是你不习惯英文的使用,想作一作汉化的事情时,汉化包必定要对,若是有问题会致使服务启动失败。
附上:汉化包下载地址
在使用 SonarQube6.2 分析代码质量时,可能会遇到的问题:
Xcode 8 兼容性问题
原有的xctool已不支持XCode8, 改用xcodebuild + xcpretty 来替代xctool环节生成对应的产出物。
关于XCode8的兼容方案, 请看这篇文章
代码质量管理对提升项目质量意义重大。本文介绍了 SonarQube 的工做原理,并从项目实战的角度讲解了使用 SonarQube 进行项目代码质量管理的流程和注意事项。
代码规范贵在坚持与执行力,自动审查只是作了提醒的做用,固然根据语言的规则,不少规范在使用者来说看似不合理或者很差用,有了这个工具,参与者们能够切身感觉到团队的成长。