简介
Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
安装运行
Sonar的安装可以说是非常便利了,自带Jetty应用服务器和H2数据库,唯一的要求就是系统安装了JRE6+,到官网下载最新的安装包解压至任意目录,然后切换到解压的目录,运行一条命令即可启动平台。
当前测试环境:Red Hat Enterprise Linux Server release 5.8 (Tikanga),sonar-3.7.4。
Shell
[root@localhost sonar-3.7.4]# bin/linux-x86-64/sonar.sh startStarting sonar…Started sonar. |
到这里平台已经运行起来了,是不是超简单,bin目录下有各种系统版本的目录,根据你所使用的系统进入相应目录去执行sonar.sh。
sonar first run
系统配置
默认情况下,Sonar监听的端口是9000,如果你当前的服务器跑着其他服务(例如:php-cgi),端口可能会冲突,你需要修改一下默认配置,改变端口并且可以在服务器以外的电脑上访问,Sonar的配置文件是conf/sonar.properties。
sonar.web.host: 0.0.0.0sonar.web.port: 9100 |
找到上面两行,把前面的#符号去掉重启服务即可生效,这样你就可以在其他电脑上使用浏览器访问平台:http://yourserverip:9100。
Shell
[root@localhost sonar-3.7.4]# bin/linux-x86-64/sonar.sh restartStopping sonar…Stopped sonar.Starting sonar…Started sonar. |
Sonar默认使用内置的H2数据库,如果你希望使用自己的数据库可以修改以下配置(以mysql为例,数据库名为:sonar):
#—– Credentials# Permissions to create tables and indexes must be granted to JDBC user.# The schema must be created first.#修改数据库连接的帐号密码sonar.jdbc.username: sonarsonar.jdbc.password: sonar#—– Embedded database H2# Note : it does not accept connections from remote hosts, so the# SonarQube server and the maven plugin must be executed on the same host.# Comment the following line to deactivate the default embedded database.#将默认配置注释#sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar# directory containing H2 database files. By default it’s the /data directory in the SonarQube installation.#sonar.embeddedDatabase.dataDir:# H2 embedded database server listening port, defaults to 9092#sonar.embeddedDatabase.port: 9092#—– MySQL 5.x# Comment the embedded database and uncomment the following line to use MySQL#去掉下面的注释使mysql配置生效sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true |
修改完配置后重启Sonar即可。特别注意,由于客户端需要,mysql要为sonar帐号配置本地和远程访问。
使用 Sonar 进行代码质量管理
系统运行起来后,我们希望它能帮我们实现代码质量检查,Sonar提供Python,Java,Javascript,C#等多种插件支持来帮助我们完成这项工作,接下来我们以Javascript检查为例来讲解如何使用它来管理我们的编码质量。
首先到插件官网找到Javascript插件,将它下载下来,放到Sonar的extensions/plugins目录下,然后重启平台服务,成功安装后可以用管理帐号登录,在Setting->Update Center里可以看到Installed Plugins列表中出现了JavaScript插件。
installed plugin
点击Quality Profiles菜单可以看到插件对应的配置列表,名称为Sonar way的配置是插件内置的代码检查规则,你可以点击配置名进入配置,设置规则对应的报错等级。当然你也可以通过右边的功能进行配置的创建,备份,复制,重命名和删除(插件内置配置不可删除)等操作,如果你需要自定义规则你需要对插件做二次开发,具体可以查阅http://docs.codehaus.org/display/SONAR/Extending+Coding+Rules,这里暂不做展开。
javascript sonar rules
安装完插件后,Sonar支持一下几种方式进行代码检查:
- Analyzing with SonarQube Runner (recommended analyzer)
- Analyzing with SonarQube Ant Task
- Analyzing with Maven
- Analyzing with Gradle
- CI Engines
官方推荐SonarQube Runner,我们就以这个方式来举例,不管是哪种方式,大致原理都是配置好客户端工具,将要检查的代码推送到平台进行检查。在你的工作电脑上,按照SonarQube Runner安装和配置文档,下载解压SonarQube Runner到任意路径,在conf/sonar-runner.properties修改服务器端的相关配置(服务器端地址,数据库连接及帐号等),添加名为SONAR_RUNNER_HOME的环境变量,值为之前解压的目录路径,添加SonarQube Runner解压目录下的bin的完整路径到path中,然后打开cmd(在Windows 7下演示)运行sonar-runner -h
,正常输出如下,说明命令配置成功了
Shell
C:\Users\Administrator>sonar-runner -hD:\sonar-runner-2.4INFO:INFO: usage: sonar-runner [options]INFO:INFO: Options:INFO: -D,–define <arg> Define propertyINFO: -e,–errors Produce execution error messagesINFO: -h,–help Display help informationINFO: -v,–version Display version informationINFO: -X,–debug Produce execution debug output |
接下来在你的项目目录下新建一个sonar-project.properties文件,该文件用来配置项目相关的信息,配置的内容模版如下:
# Required metadatasonar.projectKey=hiwanz:javascript-sonar-runner-testsonar.projectName=JavaScript project analyzed with the SonarQube Runnersonar.projectVersion=1.0# Comma-separated paths to directories with sources (required)sonar.sources=src# Languagesonar.language=js# Encoding of sources filessonar.sourceEncoding=UTF-8 |
切换命令行路径到你的项目根目录,也就是上述配置所在的位置,执行sonar-runner
,即可看到成功运行的结果。
sonar runner test
在平台的All Project里就生成了一条记录:
sonar runner test project
点击该记录标题可以进入更详细的报表,本文测试的Javascript项目包:javascript-sonar-runner。
更多的配置及相关内容请查阅官方文档。