SonarQube + SonarScanner + SonarLint 代码质量监控搭建
介绍 (官方文档: https://www.sonarqube.org)
SonarQube是一个代码检测平台,可根据检测规则检测项目中Bug,风险,覆盖率等,有助于项目的可持续交付,增加开发者的代码质量。
安装
docker方式
// https://hub.docker.com/_/sonarqube/ 在docker官网下载 SonarQube 镜像
docker pull sonarqube:7.9.6-community
传统文件形式
SonarQube官网下载文件 https://www.sonarqube.org/downloads/
启动(测试)
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:7.9.6-community
访问(测试)
http://IP:9000/projects
login:admin
password:admin
//首次登陆要修改密码 ,启动成功
结构介绍(测试)
//进入docker实例中
docker exec -it sonarqube /bin/bash
//data 是ElasticSearch数据存储,数据库数据存储目录
//conf 是sonarQube的配置目录
//elasticsearch 默认情况下 sonarQube会自带一个es程序
//extensions 扩展目录,一些插件或者外部支持的包需要放在该目录
//lib sonarQube使用的jar包 存放目录
//logs 日志输出目录
//web sonarQube 静态文件,前端代码目录
Docker安装(生产)
通过上述目录可以看出,SonarQube支持 数据库持久化存储,Es模糊搜索,可视化Web界面,同时支持各种插件功能。但是未提供扫描项目的程序
- 使用Sonar-Scanner扫描项目,因为SonarScanner 可以完美契合Jenkins
- 使用SonarLint扫描项目,因为Idea集成了 SonarLint的插件
启动SonarQube
- 创建持久化卷,用来存储docker下持久化数据,防止丢失
//创建卷,不要使用直接挂载的方式。直接使用挂载会导致安装的插件不可用
docker volume create --name sonarqube_data
docker volume create --name sonarqube_logs
docker volume create --name sonarqube_extensions
//用于挂载以创建的卷
mkdir -r /usr/sonar/conf
mkdir -r /usr/sonar/data
mkdir -r /usr/sonar/logs
mkdir -r /usr/sonar/extensions
- 更改SonarQube使用的数据库,默认情况下使用H2,这里我们改成PostgreSQL
cat /usr/sonar/conf/sonar.properties
//数据库Url
sonar.jdbc.url=jdbc:postgresql://{IP}/sonarqube?currentSchema=my_schema
//数据库用户名
sonar.jdbc.username={USERNAME}
//数据库密码
sonar.jdbc.password={PASSWORD}
3.启动SonarQube
docker run -d --name sonarqube \
-p 9000:9000 \
-v sonarqube_data:/usr/sonar/data \
-v sonarqube_extensions:/usr/sonar/extensions \
-v sonarqube_logs:/usr/sonar/logs \
-v /opt/sonarqube/conf:/usr/sonar/ \
<image_name>
集成Jenkins
- 在Jenkins上安装SonarQube Scanner For Jenkins插件
- 在Jenkins ==》 系统管理 ==》 系统配置,配置SonarQube Server信息
Jenkins配置截图:
SonarQube获取Token截图:
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip
unzip sonar-scanner-cli-4.6.0.2311-linux.zip
mv sonar-scanner-cli-4.6.0.2311-linux /usr/local/sonar-scanner
- 设置SonarScanner环境变量
cat /etc/profile
//编辑profile文件
export PATH=$PATH:/usr/local/sonar-scanner/bin
//生效环境变量
source /etc/profile
//检查环境变量是否设置成功
sonar-scanner -v
这里我们主要介绍 /usr/local/sonar-scanner/conf
下sonar-scanner-properties
文件
/**
*该文件主要用于设置需要扫描的项目的信息以及映射到ScannerQube中项目信息
**/
//SonarQube Url信息
sonar.host.url=http://IP:9000
//SonarQube认证账号
sonar.login=admin
//SonarQube认证密码
sonar.password=123456
//映射到ScannerQube中项目的唯一标识
sonar.projectKey=project-id
//在ScannerQube的项目名称
sonar.projectName=project-name
//源代码目录 (为什么是 ./ ,下文会解答)
sonar.sources=./
//如果当前语言是Java的话(该值必填),即源代码生成的class文件所在目录
sonar.java.binaries=./
//排除需要扫描的Sonar目录,支持?,*,**正则方式
sonar.exclusions=.idea/**
//当前项目版本
sonar.projectVersion=0.0.1-SNAPSHOT
//所扫描的项目语言,官方文档(https://docs.sonarqube.org/latest/analysis/languages/overview/)
sonar.language=java
//源文件编码
sonar.sourceEncoding=UTF-8
/**
* 为什么是 ./ ?
* 当前文件可以放在项目根目录下,只需要切换到项目根目录下执行sonar-scanner,因为我们设置的是 ./ ,相当于是从当前根目录下扫描
**/
- Jenkins ==》 系统管理 ==》 全局工具配置, 配置 SonarQube Scanner
- 配置Jenkins项目中Sonar-Scanner,路径可以直接选择
./
Jenkins默认就是在当前项目根目录执行的扫描
- 直接重新部署该项目,SonarScanner会直接把该项目的扫描信息加载到SonarQube中
IDEA集成
- 在IDEA中安装SonarLint插件
- 绑定SonarQube Project
- 使用SonarLint 扫描项目
参考文件
- SonarQube官方文档:https://docs.sonarqube.org/latest/setup/install-server/
- SonarScanner官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/