为什么选用 7.8? 因为 sonar8.x 之后不支持 jdk8 了,实实在在的踩了坑。
如果使用的是 JDK 8(我还是Java 8程序员的),需要使用 7.8 版本的 SonarQube。
一、使用Docker方式安装Sonar
拉取镜像
docker pull sonarqube:7.8-community
创建工作目录
mkdir -p /data/volume/sonarqube
修改系统参数
编辑文件/etc/sysctl.conf,添加如下内容
fs.file-max = 2097152
vm.max_map_count = 262144
vm.swappiness = 1
//让配置生效
sysctl -p
运行一个容器
docker run -d --name sonartest sonarqube:7.8-community
//将容器内重要文件复制到宿主机
docker cp sonartest:/opt/sonarqube/conf /data/volume/sonarqube
docker cp sonartest:/opt/sonarqube/data /data/volume/sonarqube
docker cp sonartest:/opt/sonarqube/logs /data/volume/sonarqube
docker cp sonartest:/opt/sonarqube/extensions /data/volume/sonarqube
//停止容器后删除
docker stop sonartest
docker rm sonartest
//创建网络
docker network create sonarqube-tier
//给文件赋权
chmod -R 777 /data/volume/sonarqube/
创建Mysql容器并运行
此处因为我已经有Mysql数据库了,因此不再安装Mysql,只是创建相关用户。
docker pull mysql:8.0
mkdir /data/volume/mysql8/
docker run --name mysql -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=root -v /data/volume/mysql8/:/var/lib/mysql/ -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
//进入mysql
docker exec -it mysql /bin/bash
mysql -uroot -p # 密码
GRANT ALL ON *.* TO 'root'@'%'; #所有网络都可访问
create database sonar; #创建 sonarqube 数据库
# 添加远程登录用户:sonar ,并授予权限。
CREATE USER 'sonar'@'%' IDENTIFIED WITH mysql_native_password BY 'sonar'; # mysql8.0
CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar'; # mysql5.6
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'%';
flush privileges; # 刷新权限
创建Sonar容器
docker run -d --name sonar -p 9090:9000 \
-e ALLOW_EMPTY_PASSWORD=yes \
-e SONARQUBE_DATABASE_USER=sonar \
-e SONARQUBE_DATABASE_NAME=sonar \
-e SONARQUBE_DATABASE_PASSWORD=sonar \
-e SONARQUBE_JDBC_URL="jdbc:mysql://10.10.10.181:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" \
--restart=always \
--net sonarqube-tier \
--privileged=true \
-v /data/volume/sonarqube/logs:/opt/sonarqube/logs \
-v /data/volume/sonarqube/conf:/opt/sonarqube/conf \
-v /data/volume/sonarqube/data:/opt/sonarqube/data \
-v /data/volume/sonarqube/extensions:/opt/sonarqube/extensions\
sonarqube:7.8-community
一开始使用MySQL8,报如下错误,未解决,后来更换为MySQL5.6 解决
后记:使用 sonarqube 对 java 项目代码进行扫描的时候,java 项目的版本不能低于 sonar 的编译版本。
sonarqube:7.8-community 是 sonar 对 jdk1.8 的最后一个版本,从 7.9 以后 sonar 最低支持版本为 jdk 1.11
如下为 7.8 版本相关插件对应的版本号:
这些我已经下载下来了,通过百度网盘可以下载
下载解压后放到sonarqube/extensions/plugins/目录下,注意,安装包中存在sonar-java-plugin-5.13.0.18197.jar,所以需要把下载中的sonar-java-plugin-5.13.1.18282.jar删除,或者删除之前那个,两个保留一个即可,否则启动会报错。然后重启Sonar。
链接: https://pan.baidu.com/s/1wTKlffBAHib6KE8ASyUViQ?pwd=avdh 提取码: avdh 复制这段内容后打开百度网盘手机App,操作更方便哦
访问 sonarqube 应用
地址: http://10.10.10.181:9090/
默认登录账号密码:admin/admin
二、实际项目应用
配置 Maven 的 setting.xml 文件
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 配置 Sonar Host地址,默认:http://localhost:9000 -->
<sonar.host.url>
http://192.168.20.105:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
配置项目或模块的 Pom 文件
<build>
<plugins>
<!--使用 SonarQube 分析 Maven 项目-->
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.6.0.1398</version>
</plugin>
</plugins>
</build>
执行maven扫描
mvn clean verify sonar:sonar -D maven.test.skip=true
sonar 服务上面的项目名称和项目中 pom.xml 中配置的项目 name 一致。