手把手使用SonarQube分析、改善项目代码质量
TIPS
本文基于SonarQube 7.9.1,理论支持6.0及更高版本。
SonarQube是一个开源的代码质量管理系统,可用来快速定位代码中的Bug、漏洞以及不优雅的代码。它支持几乎所有的常见编程语言,例如Java、JavaScript、TypeScript、Kotlin、Ruby、Go, Scala等。并且还有插件机制,利用插件,可以让SonarQube更加强大,例如可以整合Findbugs、PMD、Checkstyle等。可以说,SonarQube是一款提升项目代码质量必备的根据。
本文手把手搭建、使用SonarQube。
系统需求
- X64的操作系统
- JDK(对于7.9.x,那么需要JDK 11或更高版;对于6.x - 7.8.x,需要JDK 8或更高版本)
- 2G内存
其他需求详见:https://docs.sonarqube.org/7.9/requirements/requirements/
TIPS
- 《其他需求》建议大家参照一下,里面探讨如何修改Linux文件描述符限制等说明;
- 上面贴的是是7.9版的链接,如果你使用的是其他版本,只需将版本名称改掉即可,例如改为7.8即可查看7.8.x的需求。
下载
前往 https://www.sonarqube.org/downloads/
,按照如图说明下载即可。建议下载 LTS
版本,以便获得长期的维护与支持。
安装与启动
解压压缩包
将目录切换到SonarQube的
/bin
目录,可看到类似如下的目录结构:1
2
3
4
5├── bin
│ ├── jsw-license
│ ├── linux-x86-64
│ ├── macosx-universal-64
│ └── windows-x86-64根据你的操作系统,切换到相应目录。例如,您的机器是
macOS
,则可切换到macosx-universal-64
目录。执行如下命令即可启动SonarQube。
1
./sonar.sh start
当然,该shell还有其他命令,可输入
./sonar.sh --help
或者./sonar.sh
查阅。稍等片刻,访问
http://localhost:9000/
即可看到类似如下的界面,说明安装成功。
- 停止SonarQube,只需执行
./sonar.sh stop
即可。 - 如需重启,只需执行
./sonar.sh restart
即可。
管理员登录
访问:http://localhost:9000
账号:admin
密码:admin
生产环境可用
默认情况下,SonarQube使用的是H2数据库,这是一款非常流行的嵌入式数据库。但生产环境中,SonarQube并不建议使用H2。SonarQube支持多种数据库,例如Qracle、PostgreSQL、SQL Server等。下面,我们以PostgreSQL为例,让SonarQube使用PostgreSQL存储数据。
TIPS
支持的数据库及数据库版本请前往这篇文档查看,避免SonarQube不支持你的数据库版本以及注意点。
https://docs.sonarqube.org/7.9/requirements/requirements/
举个例子:SonarQube 7.9要求使用PostgreSQL 9.3-9.6或者PostgreSQL 10,并且必须配置使用UTF-8
搭建PostgreSQL
简单起见,我用Docker搭建PostgreSQL。
1 | version: '3.1' |
修改SonarQube配置
修改配置文件:
$SONARQUBE_HOME/conf/sonar.properties
。找到类似如下的内容:
1
2
3#----- PostgreSQL 9.3 or greater
# By default the schema named "public" is used. It can be overridden with the parameter "currentSchema".
#sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema在这行下面,添加如下内容:
1
2
3jdbc:postgresql://localhost/sonar?currentSchema=public =
itmuch =
itmuch =这里,数据库地址、账号、密码根据你的需求修改。
执行
./sonar.sh restart
,重启SonarQube。观察PostgreSQL,可以发现,此时SonarQube会自动在PostgreSQL数据库中建表并插入初始化数据。类似的方式,你也可以为你的SonarQube配置其他数据库。
整合Maven
方法一:全局配置
在Maven的全局配置文件:
$MAVEN_PATH/conf/settings.xml
(也可能是.m2/settings.xml
看你是怎么配置Maven的)中添加如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>jdbc:postgresql://localhost/sonar?currentSchema=public</sonar.jdbc.url>
<sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>itmuch</sonar.jdbc.username>
<sonar.jdbc.password>itmuch</sonar.jdbc.password>
<sonar.host.url>http://127.0.0.1:9000</sonar.host.url>
</properties>
</profile>到Maven项目的根目录执行如下命令,即可使用SonarQube分析项目:
1
mvn sonar:sonar -Dsonar.java.binaries=target/sonar
等待片刻后,项目构建成功:
1
2
3
4
5
6
7[INFO] Spring Cloud YES ................................... SUCCESS [ 12.431 s]
[INFO] turbine-stream-server .............................. SKIPPED
[INFO] zuul-server ........................................ SKIPPED
[INFO] hystrix-dashboard .................................. SKIPPED
[INFO] commons ............................................ SKIPPED
[INFO] ms-content-sample-mybatis .......................... SKIPPED
[INFO] ms-consumer-sample ................................. SKIPPED此时,再次访问
http://localhost:9000
,即可看到类似如下的界面:如右上角所示,此时可以看到SonarQube已经为我们分析了一个项目,该项目有1个Bug、2个脆弱点、31个代码味道问题。点击项目名称(图中的
Spring Cloud YES
)即可看到详情,可以根据SonarQube给我们的提示进行修正、重构。
方法二:直接命令行控制
右上角头像 - My Account - Security页中,在
Generate New Token
中填入你的Token名称,并点击Generate
按钮。点击按钮后,将会看到生成的Token,例如
62b615f477557f98bc60b396c2b4ca2793afbdea
使用如下命令,即可使用Sonar分析项目。
1
2
3
4mvn sonar:sonar \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=62b615f477557f98bc60b396c2b4ca2793afbdea \
-Dsonar.java.binaries=target/sonar
插件安装
SonarQube有一个强大的插件机制。以安装汉化插件为例——
按照图示进行操作:
点击
Install
按钮后,将会弹出重启SonarQube的提示,点击即可重启。重启后,可看到类似如下的界面类似的方式,也可为SonarQube安装其他插件。
评论系统未开启,无法评论!