Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,帮助我们从源码中找出潜在的bug,未使用的代码,复杂的表达式,未覆盖的代码,糟糕的代码,重复的代码等等
通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测
SonarQube安装推荐使用docker安装,官方docker地址:
SonarQube, 简单的运行一个SonarQube服务:
1
| docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
|
打开http://localhost:9000/,默认帐号和密码都为admin
数据库配置默认情况使用的一个内嵌的H2数据库,肯定不适合生产情境,数据库配置的三个变量
- SONARQUBE_JDBC_USERNAME
- SONARQUBE_JDBC_PASSWORD
- SONARQUBE_JDBC_URL
官方示例(需要安装一个postgresql):
1
2
3
4
5
6
| docker run -d --name sonarqube \
-p 9000:9000 -p 9092:9092 \
-e SONARQUBE_JDBC_USERNAME=sonar \
-e SONARQUBE_JDBC_PASSWORD=sonar \
-e SONARQUBE_JDBC_URL=jdbc:postgresql://localhost/sonar \
sonarqube
|
由于我已经有一个mysql容器:
1
| docker run --name wlcx_mysql -p 3306:3306 -v /srv/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql
|
所以使用链接容器的方式使用数据库,容器名为wlcx_mysql
1
2
3
4
5
6
| docker run -d --link wlcx_mysql:wlcx_mysql --name sonarqube \
-p 9000:9000 -p 9092:9092 \
-e SONARQUBE_JDBC_USERNAME=root \
-e SONARQUBE_JDBC_PASSWORD=password \
-e "SONARQUBE_JDBC_URL=jdbc:mysql://wlcx_mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false" \
sonarqube
|
SonarQube使用使用默认的帐号登录之后,可以:
- 生成一个代替帐号的token
- 修改一个admin的密码
- 可以在Administration=>System=>Update Center,安装中文插件和其它要分析的语言的插件
拿到了token后,介绍如何用sonar分析Maven与Gradle项目
Maven项目1
2
3
| mvn clean verify sonar:sonar \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=token
|
运行这个命令即可,为了固定sonar的mvn插件版本,可以配置:
1
2
3
4
5
6
7
8
9
10
11
| <build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.3.0.603</version>
</plugin>
</plugins>
</pluginManagement>
</build>
|
Gradle项目配置插件:
1
2
3
4
5
6
7
8
9
10
11
12
| buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.5"
}
}
apply plugin: "org.sonarqube"
|
对于Gradle 2.1+ ,可以这样配置:
1
2
3
| plugins {
id "org.sonarqube" version "2.5"
}
|
运行命令:
1
2
3
| gradle sonarqube \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=token
|
或将sonar地址与token,配置到项目下的gradle.properties或~/.gradle/gradle.properties当中
1
2
3
| systemProp.sonar.host.url=http://localhost:9000
systemProp.sonar.login=token
|