代码质量管理SonarQube
Introduction
SonarQube是一个开源的代码质量管理平台,它能够快速分析并定位代码中明显或潜在错误信息,目前支持20+种语言,并且有很多插件Plugins可以集成。接下来将大致讲解SonarQube的安装、配置及使用。
Installation
以下所有操作均在CentOS下进行,其他系统的过程基本类似,只需要替换成对应命令即可,假设CentOS分配的IP地址为192.168.56.105
。
Install the SonarQube
首先到SonarQube Download页面下载压缩包,然后解压到~/sonarqube
文件夹,最后运行命令启动服务,需要Java8运行环境支持。
然后访问http://192.168.56.105:9000将能够看到SonarQube页面,这里需要替换成你的IP地址,SonarQube会默认监听9000端口。
其中,默认的管理员登录用户名和密码为:
- Login:
admin
- Password:
admin
虽然可以访问了,但当前SonarQube使用的是Embedded数据库,只能用于评估目的,不支持扩展和升级,更不支持数据迁移,因此强烈建议安装一款数据库引擎,不过别着急,稍候会涉及到配置PostgreSQL的操作过程。
Install the Scanner
为了实现扫描项目代码并上传到SonarQube Server的目的,需要再到SonarQube Scanner Download页面下载压缩包并解压,如解压到~/sonar-scanner
。
Configuration
为了使用SonarQube的更多功能,支持扩展、升级和数据迁移,需要配置SonarQube,若安装目录为~/sonarqube
,则需要在安装目录中的conf/sonar.properties
中配置一些参数,主要针对数据库引擎配置和WEB访问地址和端口配置。
Database
以配置PostgresSQL为例,首先需要确保安装了PostgresSQL数据库引擎。
在命令行中登录postgresql,创建命为sonarqube
的数据库,这里为了方便,直接使用postgres用户。
假设遇到了postgresql的登录问题,需要以root权限在/var/lib/pgsql/data/pg_hba.conf
中修改localhost
和127.0.0.1
的peer
为trust
或md5
。
更多其他数据库配置可以参阅Installing the Server。
Web
可以修改sonar.properties
中的Web相关配置控制访问地址和端口。
若以80
端口启动,可能会遇到权限的错误,需要切换为root用户运行sonar启动命令,可在~/sonarqube/logs/sonar.log
中查看日志。
配置完成后重启SonarQube服务,再访问http://192.168.56.105/sonarqube,并且页面底端的红色警告消失了。
Analyzing with Scanner
Runner
通常可以直接运行Runner实现对支持语言的项目代码进行扫描。假设Sonar Scanner被解压到~/sonar-scanner
文件夹中,随意找一个项目代码,并在其中添加sonar-project.properties
配置文件,针对Java项目的配置如下:
如果暂时自己没有适合的代码,也可以使用官方提供的Project Samples,然后在项目代码目录下运行如下命令进行Sonar Scanner扫描代码。
运行后sonarqube runner后,界面上显示一条最新的Item记录:
更多配置和用法可以参阅Analyzing with SonarQube Scanner。
Gradle
SonarQube支持Gradle 2.0以上的版本,以下来将配置build.gradle
文件,使得支持SonarQube任务。
还需要在gradle.properties
中配置SonarQube地址和登录信息:
Gradle的Task为:./gradlew sonarqube
,并且可以指定HOST和PASSWORD,这样就避免了把密码明文写在配置文件中。
运行sonarqube tasks后,刷新界面,又多了一条新记录:
点击进入查看详细扫描结果:
更多关于Gradle的配置可以参阅Analyzing with SonarQube Scanner for Gradle。
SonarQube扫描还可以与Jenkins集成,有兴趣可以参阅Analyzing with SonarQube Scanner for Jenkins实现步骤。
除此之外,还可以对SonarQube的Dashboard进行配置,针对项目选择并添加一些需要关注和分析的Widget。
References