概述
公司这2年也做了不少项目,由于项目都比较赶,人员少,没有专门做代码评测。这2天空闲,想着把代码质量检测做起来。想到好几年前用的sonar,简单易用,简单配置mysql就可以启动。说干就干!
官网一看,立马完蛋。曾几何时,sonarqube也成了版本帝,且变化如此之大~~~
下载与安装
- 下载sonarqube。
吐槽一下,下载之难难于上青天,是不是要买个vpn才好使?官网基本废了,好不容易在某网站下载到一个7.9.1版本,我把我找到的地址放在这里:下载地址
- 下载jdk11。
7.9.1版本的sonarqube需要jdk11
- 解压、安装jdk
如下步骤配置好jdk,并添加到PATH中
[root@localhost software]# unzip jdk-11_linux-x64_bin.tar.gz
[root@localhost software]# cp jdk11 /usr/local/java/
[root@localhost software]# cd /usr/local/java/jdk11/
[root@localhost jdk11]# pwd
/usr/local/java/jdk11
[root@localhost jdk11]# vim /etc/profile
# 添加JAVA_HOME
export JAVA_HOME=/usr/local/java/jdk11
export PATH=$PATH:$JAVA_HOME/bin
# 使配置生效
[root@localhost jdk11]# source /etc/profile
- 解压安装sonarqube
# 先创建一个普通用户
# 因为sonarqube用了elasticsearch,es不能用root启动,所以建一个普通用户
[root@localhost jdk11]# useradd sonar
# 切换到该用户下
[root@localhost jdk11]# su - sonar
# 解压缩包,没有unzip命令的,使用命令 'yum -y install unzip' 安装一下
[root@localhost software]# unzip sonarqube791.zip
# 修改脚本文件为可执行
[sonar@localhost sonarqube]$ chmod u+x ./bin/linux-x86-64/sonar.sh
[sonar@localhost sonarqube]$ chmod u+x ./elasticsearch/bin/elasticsearch
# 什么都不要修改,先运行启动命令
[sonar@localhost logs]$ ./bin/linux-x86-64/sonar.sh start
假如你不小心使用了root用户启动,要注意修改temp的属主。
因为es会在该文件夹下自动创建配置文件,属于root用户,当切换为sonar用户启动时,会报权限不够的错误
[root@localhost sonarqube]# chown sonar:sonar -R ./temp/
注意:假如启动失败,要到日志下看es.log文件,因为es会有一些莫名的错误,我把常见的解决办法放在这里,供参考:
错误1: [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] 解决办法: 编辑 /etc/security/limits.conf,追加以下内容; * soft nofile 65536 * hard nofile 131072 * soft nproc 4096 * hard nproc 4096 错误2: [2]: max number of threads [1024] for user [es] is too low, increase to at least [2048] 解决办法: 编辑 /etc/security/limits.d/90-nproc.conf,修改如下项: * soft nproc 1024 #修改为 * soft nproc 2048 错误3: [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 解决办法: 编辑 /etc/sysctl.conf,追加如下配置: vm.max_map_count=655360 并执行命令: sysctl -p
汉化
从Github上下载对应版本的汉化插件,https://github.com/SonarQubeCommunity/sonar-l10n-zh
运行
在浏览器输入: http://ip地址:9000
注意启动页面显示“内嵌数据库只能用于测试场景”,下面我们来配置数据库
数据库配置
查看配置文件,数据库目前只支持如下几种,不再支持Mysql(痛恨):
#----- Oracle 11g/12c/18c/19c
#----- PostgreSQL 9.3 or greater
#----- Microsoft SQLServer 2014/2016/2017 and SQL Azure
建议安装 PostgreSQL,安装教程自行搜索,这里不再赘述了
补充,代码分析
sonarqube搭建好了,那么可以开始代码检查了。
按照官方文档,先配置全局maven的setting.xml文件
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<!-- sonar -->
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>http://192.168.52.200:9000</sonar.host.url>
</properties>
</profile>
</profiles>
运行Maven命令:
mvn clean compile sonar:sonar -Dsonar.java.binaries=target/classes -Dmaven.test.skip=true
这里注意一下:我的sonarqube是安装在虚拟机上的,内存给的不够,一执行mvn命令,就出现服务停止的情况。如果你也有这种现象发生,那么将虚拟机的内存给大一点,最好是2g以上,因为es就要占用1g的内存了