Sonarqube 是开源的代码质量检测平台
更多精彩
- 更多技术博客,请移步 IT人才终生实训与职业进阶平台 - 实训在线
相关网址
Sonarqube 安装方式
通过 Homebrew 安装
- 在 Mac 上通过 Homebrew 安装,自然是最方便的,但 Homebrew 的库中只存在 Sonarqube7.9 版本,想要安装其他版本无法使用此方式
- 在终端输入
brew search sonar
即可看到如下结果- 输入
brew info sonarqube
可查看详细信息
- 输入
- 在终端输入
brew install sonarqube
即可完成安装-
Sonarqube7.9 依赖 JDK11 ,如果没有安装 JDK11 ,即使 sonarqube 安装好了 ,也无法启动
-
Sonarqube7.9 依赖 JDK11 ,如果没有安装 JDK11 ,即使 sonarqube 安装好了 ,也无法启动
直接下载安装
- 前往 Sonarqube 的历史版本资源库 找到想要下载的版本即可下载
- 其实通过该方式更实用,因为可以安装任意版本
- 缺陷就是 Sonarqube 的启动命令默认无法全局执行,需要到软件的 /bin/ 目录下找到对应平台的启动命令才能执行
- 但启动命令其实没必要全局配置
SonarScanner 安装方式
通过 Homebrew 安装
- 在终端输入
brew search sonar-scanner
即可看到如下结果
- 在终端输入
brew install sonar-scanner
即可完成安装 - 之后
soanr-scanner
的扫描命令可以再任意目录执行,因为 Homebrew 在安装时已经做好了该命令的全局配置 - Mac 的话直接使用 Homebrew 安装即可,因为 SonarScanner 实测没有发现版本异常,所以直接安装最新版,也省的再手动的做执行命令的全局配置
Linux 下的安装方式
- 前往 SonarScanner - SonarQube Docs 即可以下载 SonarScanner 的安装包,如下图
-
点击对应版本即可完成下载
-
- 将压缩包上传到服务器,并在该目录执行
unzip sonar-scanner-cli-4.0.0.1744-linux.zip
即可完成解压
扫描命令的全局配置
- 执行
vi /etc/profile
,打开环境变量的全局配置文件 - 添加
export SONAR_SCANNER_HOME=/opt/sonar-scanner-4.0/
- 以及在
export PATH=$PATH
之后添加:$SONAR_SCANNER_HOME/bin
即可
错误排查
执行 sonar console 无法启动
-
sonar console
的启动方式是通过 Homebrew 安装后才有的 - 默认的启动方式应该是到程序的 /bin 目录下找到对应平台的 sonar.sh 然后执行启动
-
执行对应启动脚本,抛出错误,如下图
解决方式
- 在 java - SonarQube does not start - Stack Overflow 找到了解决方式
-
首先找到 JDK11 的完整路径,如下图
- 之后前往 Sonarqube 的配置文件目录,如下图
-
这是通过 Homebrew 安装后的软件目录
-
- 输入
vi ./wrapper.conf
打开对应配置文件,如下图- 在文件第 4 行应该就能找到
wrapper.java.command=java
,下图是已经修改后的效果 - 将之前拿到的 JDK11 完整路径粘贴到这里,最后需要保留/java
- 在文件第 4 行应该就能找到
- 之后在执行 sonar console 就能顺利启动了,如下图
- 在浏览器输入 http://localhost:9000 即可访问管理页
- 默认用户名和密码是 admin / admin
配置 MySQL 数据库后 Sonar 无法启动
- Sonar 自带的 H2 数据库只能用于测试,所以实际使用的话还是需要对接外部数据库
- 不过在 /conf/sonar.properties 中修改了数据库连接配置后却发现程序一直无法启动
-
具体报错信息如下
- 前往 /usr/local/Cellar/sonarqube/7.9.1/libexec/logs 查看日志记录,在 web.log 中可以找到如下信息
- 意思就是说 Sonarqube 7.9 不支持连接 MySQL 数据库
-
实际上 7.8 版本都是支持 MySQL 的,但 7.9 突然就不支持了,实属无奈
解决方式
- 如果实在要使用 MySQL 数据库,则需要将 Sonarqube 降级到 7.8 或者更低版本
- Sonarqube 7.x 能够支持 MySQL 的的最新版本是 7.8 ,可惜的是没有在 Homebrew 中找到对应的历史版本
- 只能通过 Sonarqube 的历史版本资源库 进行下载
Sonarqube 7.8 版本连接 MySQL 启动失败
- 在终端前往 Sonarqube 的启动目录并输入
./sonar.sh console
,发现启动失败,如下图-
从启动日志中并看不到启动失败的原因
-
- 依旧是前往日志目录查看 web.log ,可以找到如下信息
- 关键在于
query_cache_size
参数,这个参数是 MySQL 8.0 之前才有的参数
- 关键在于
- 会抛出上述异常的原因是本地使用的数据库正好是 MySQL 8.0 版本
- 然而就算是最后一个支持连接 MySQL 的 Sonarqube 7.8 版本,都无法连接 MySQL 8.0
- 不要问我怎么知道的,我从 6.7 一直下载到 7.9 ,在每一个版本的 /conf 配置中看到的 !!
解决方式
- 将 MySQL 的版本降低到 5.7 或者 5.6
- 首先将当前数据库的数据导出备份,然后输入
brew services stop mysql
停止 MySQL 服务 - 输入
rm -rf /usr/local/var/mysql
删除当前版本的 MySQL 配置地址 - 输入
brew uninstall mysql
既可以删除当前安装的 MySQL 8.0 版本 - 之后参照 homebrew安装mysql 5.7* - 简书 安装即可
扫描项目时抛出 sonar.java.binaries 相关异常
-
具体报错信息如下
- 这是因为对于一些完整结构的项目,在扫描时需要指定编译目录
- 一般指定方式是在 sonar.properties 文件中添加
sonar.java.binaries=**/target/classes
-
如果按照这种方式指定,项目目录中就必须存在此目录,否则就会抛出如下异常
- 但是有时候项目没有必要编译,自然就不存在此目录,应该如何解决?
解决方式
- 在 sonar.properties 中添加
sonar.java.binaries=./
- 表示编译目录就是当前目录,即可分析成功