SonarQube是一种自动代码审查工具,可检测代码中的错误,漏洞和不优雅的地方。我们知道alibaba/p3c
也是一款优秀的代码规范检查工具,但是其更倾向于开发人员编程时进行实时规范检查,SonarQube则更方便于开发团队进行整体代码审查,规范管理。
SonarQube官方下载页面https://www.sonarqube.org/downloads/,这里我们下载免费的社区版:
(经过验证,SonarQube 7.9开始需要Java 11且不支持mysql了,所以这里我们选择
7.8
版本进行下载)
我们把页面拉到最下面,选择Historical Downloads
由于低版本SonarQube自带的插件商店没有对应的汉化版本,这里我们自己下载汉化插件。
下载地址https://github.com/xuhuisheng/sonar-l10n-zh/releases,下载下方的jar包即可
下载完成之后,我们将这个jar包放入SonarQube的安装目录下的extensions\plugins
文件夹中即可。
由于SonarQube默认使用的内嵌数据库H2,这种不适应于生产环境,所以我们替换成mysql数据库,首先创建一个名为sonar的数据库,然后在SonarQube的配置文件conf\sonar.properties
中添加如下配置:
# 数据库连接信息
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.sorceEncoding=UTF-8
# SonarQube的web页面登录信息
sonar.login=admin
sonar.password=admin
至此,SobarQube的配置已经完成,这时候我们启动bin\windows-x86-64\StartSonar.bat
即可(不同的系统平台执行相应的启动脚本)。或者可以执行此目录中的InstallNTService.bat
脚本将SonarQube安装成系统服务,这样就可以直接在服务中管理了。
启动完成后,我们访问http://localhost:9000
,输入配置的登录账号信息,即可进入到SonarQube web页面。
注:
执行StartSonar.bat
脚本启动SonarQube后,如果不小心关闭了控制台,其实这个时候SonarQube并没有被关闭,后台还有进程在,所以下次启动时会报错,这个时候就要手动杀掉进程了。
1.在SonarQube页面选择创建项目
3.然后点击创建令牌
这个时候我们要把这个令牌复制下来,因为后面就看不到了
这里项目就已经创建好了,然后可以通过不同的质量检测方式将结果推送到这个项目里来。
下面将通过三种方式来使用SonarQube的代码扫描功能:
① Maven方式执行代码检测
② SonarScanner方式执行代码检测
③ 集成Jenkins执行代码检测
创建完项目后,我们选择maven方式构建,即可看到SonarQube给我们提供的maven扫描命令
mvn sonar:sonar \
-Dsonar.projectKey=test \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=7a13de184fe9d79c59e24062d0065bd87b7064e9
进入到要扫描的代码目录,执行上面的maven命令即可,执行完毕后在SonarQube页面即可看到扫描结果。
注:
上面的命令中有些是固定的信息,如果每次执行扫描都需要输入则显的很麻烦,这里我们可以将某些信息配置到maven的setting.xml
中
<profile>
<id>sonarid>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
<properties>
<sonar.host.url>http://127.0.0.1:9000sonar.host.url>
<sonar.login>7a13de184fe9d79c59e24062d0065bd87b7064e9sonar.login>
properties>
profile>
以后直接执行mvn sonar:sonar -Dsonar.projectKey=test
即可。甚至mvn sonar:sonar
都可以,SonarQube会自动以maven的坐标为项目key去创建项目。
SonarQube提供了SonarScanner组件来帮助我们执行扫描,首先下载https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
下载之后是个压缩包,解压即可,为了方便使用,我们可以将解压后的目录下的bin目录加入到环境变量中,这样可以直接使用sonar-scanner
命令了(这里不再介绍环境变量的配置)。
打开SonarScanner的配置文件conf\sonar-scanner.properties
,做如下修改:
进入到待扫描的项目目录下,新建sonar-project.properties
文件,内容如下:
sonar.projectKey=test
sonar.projectName=test
#sonar.projectVersion=1.0
#sonar.sources=./src
sonar.sourceEncoding=UTF-8
#sonar.language=java
sonar.java.binaries=.
然后再命令行执行sonar-scanner
即可。
Jenkins作为一个开源的、提供友好操作界面的持续集成(CI)工具,广受大家的喜爱,Jenkins提供了SonarQube扫描插件可以方便的让我们直接扫描代码仓库中的代码质量,而前两种方式更偏向于开发人员本地去做,更依赖开发人员的自觉性,而使用Jenkins的方式则更方便对整个团队进行 Code Review,更方便的进行规范管理。
①.首先需要安装SonarQube Scanner插件,系统管理 > 插件管理
,搜索SonarQube Scanner
插件并安装;安装后进入到系统管理 > 系统配置 > SonarQube servers
,添加SonarQube服务器
保存并应用。至此,Jenkins配置完毕。
③.现在我们新建一个任务测试一下:
最后保存即可。
这样我们当我们执行Jenkins的立即构建后即可在SonarQube上面看到扫描结果。
SonarQube默认支持匿名推送检测结果,即不需要传递令牌即可推送到SonarQube服务器,这样很不安全,我们用下面的方式关掉匿名推送的通道: