之前用过Coding.net的代码质量分析功能,实用强大,但是最近突然找不到这个功能了(坑!)。。。
虽然官网上仍然把代码质量分析当一个主要功能介绍,但找不到任何相关的文档和说明,就好像这个功能消失了一样(WHAT??)。。。
联系客服也毫无回应(什么情况??)。。。
我们的需求是,找一个能够统计代码注释率,分析代码质量,适用于多种编程语言的工具。试用了几个最后确定用SonarQube。
接下来介绍
- 如何使用 SonarQube 分析本地的项目
- 如何安装汉化包
- 如何更改数据库配置
安装和使用
首先,到官网下载最新版本。我下载的是V7.0。
然后按照Get Started in Two Minutes启动 SonarQube 服务器:
- 解压(放哪儿都行)
- windows:在解压后的文件夹中,找到bin目录,选择系统,比如我选的
windows-x86-64
,然后直接双击StartSonar.bat
启动服务器。 - 打开页面 http://localhost:9000
- 点击页面上的
Log in
按钮登录,账号密码都是admin
。
怎么分析项目呢?
第一次登录会看到 Tutorial,按照提示设置用于验证身份的token
。生成的token需要复制记下来!不会再显示第二次!在用户 > 我的账户 > 安全
中可以生成新token(令牌),或者回收已创建的 token。
如果想强化安全,不想在执行代码扫描或调用Web Service时使用真实SonarQube用户的密码,可以使用用户令牌来代替用户登录。这样可以通过避免把分析用户的密码在网络传输,从而提升安全性。
然后选择要分析的项目的主要语言以及当前操作系统,然后定义用于标识项目的key
。
然后会提示下载安装扫描器。并修改环境变量。比如windows需要将扫描器的bin
目录添加至%PATH%
环境变量。当然,扫描器以后就不需要再下载了。
接下来就可以扫描项目了。按照说明,复制命令,在要分析的项目目录下执行。比如我的命令是这样的:
sonar-scanner.bat -Dsonar.projectKey=myproject -Dsonar.sources=. -Dsonar.host.url=http://localhost:9000 -Dsonar.login=(已创建的token)
看到这些输出就说明分析完成了,页面 http://localhost:9000 此时会自动刷新,然后就可以查看分析结果了。
配置项目的扫描器参数
重新扫描只需要再次执行上面的命令。但是每次都执行这么长的命令很麻烦啊。还好扫描器是可以配置的。
只需要在要分析的目录下,创建一个文件sonar-project.properties
。内容如下:
# your authentication token
sonar.login=[之前生成的token]
# must be unique in a given SonarQube instance
sonar.projectKey=[项目key]
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=[项目名称]
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
# Comma-separated paths to directories containing source files.
# 限定要分析的路径
sonar.sources=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
# Set the language of the source code to analyze
# 限定要分析的代码语言,比如js。
# 不设置则默认分析多种语言
sonar.language = js
然后在文件sonar-project.properties
所在目录下,也就是要分析的目录下,启动扫描器。比如windows上,运行sonar-scanner.bat
。
关于扫描器更多的参数配置查看:Analysis Parameters。
新建项目分析
页面上找到Administration > Projects
,点击右上角按钮create project
。
汉化
分析结果出来了但还是有点懵?不知道具体含义?
安装汉化包试试:页面上找到Administration > Marketplace
,在搜索框中输入chinese
,出现一个Chinese Pack
,点击右侧的install
按钮。
安装成功后,会提示重启 SonarQube 服务器。
稍等一会,再看页面上已经显示中文了。
配置数据库
这时候页面底部会提示,嵌入数据库适用于测试环境。以后不能迁移数据到别的数据库服务器了。另外也不能升级 SonarQube 的版本了。
SonarQube 默认数据库为 h2
。我们可以配置成别的数据库,比如MySQL,Oracle等等。
举例MySQL,配置步骤:
首先确保已安装数据库,并启动服务器。
连接mysql:
mysql -u root -p
-
为 SonarQube 创建数据库:
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'sonar' IDENTIFIED BY 'password'; GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'password'; GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
-
修改 SonarQube 的配置文件,在解压后的目录中,修改
conf\sonar.properties
文件,添加三行配置,或者找到注释中的默认设置,取消注释,再修改。:# 连接 mysql 数据库的用户名,密码 sonar.jdbc.username=root sonar.jdbc.password=123456 # 上一步创建的数据库的 url sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
不同数据库设置不同,在注释中有提示,比如 mysql 对应设置有注释
#----- MySQL 5.6 or greater...
。更多说明可以看官方文档的Installing the Server。 修改完成后,重启 SonarQube 服务器。就ok了(页面底部不会再提示使用的是嵌入的默认数据库了)。
启动SonarQube报错:远程主机强迫关闭了一个现有连接
- 如果是初次启动报错,那检查数据库版本是否符合要求。比如我这个注释里面写着
MySQL 5.6 or greater
,所以MySQL数据库版本不能低于5.6。 - 版本符合要求的前提下,我遇到过另一种情况,开机之后,首次运行SonarQube,控制台报错并闪退。这种情况的话,检查MySQL服务器是否已经启动,数据库是否能够连接。
结尾
综上就是对 SonarQube 入门使用的说明。它还有很多强大功能有待挖掘。
我认为,对于开发者来说,好的工具真的非常重要。找到合适的工具,能够提高之后的工作效率,以及开发质量。多花点时间,也是值得的。
参考阅读
- 扫描器使用说明 Analyzing with SonarQube Scanner:
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner - 扫描参数配置 Analysis Parameters:https://docs.sonarqube.org/display/SONAR/Analysis+Parameters
- Installing the Server: https://docs.sonarqube.org/display/SONAR/Installing+the+Server
- Create MySQL DB for SonarQube: https://gist.github.com/davidhyk/d6c92615223b8d7beb53