SonarQube + SonarScanner + SonarLint 代码质量监控搭建

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界面,同时支持各种插件功能。但是未提供扫描项目的程序

  1. 使用Sonar-Scanner扫描项目,因为SonarScanner 可以完美契合Jenkins
  2. 使用SonarLint扫描项目,因为Idea集成了 SonarLint的插件
启动SonarQube
  1. 创建持久化卷,用来存储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
  1. 更改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/ \
    
集成Jenkins
  1. 在Jenkins上安装SonarQube Scanner For Jenkins插件
  2. 在Jenkins ==》 系统管理 ==》 系统配置,配置SonarQube Server信息

Jenkins配置截图:

SonarQube + SonarScanner + SonarLint 代码质量监控搭建_第1张图片

SonarQube获取Token截图:

SonarQube + SonarScanner + SonarLint 代码质量监控搭建_第2张图片
3. 下载SonarScanner

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
  1. 设置SonarScanner环境变量
cat /etc/profile
//编辑profile文件
export PATH=$PATH:/usr/local/sonar-scanner/bin
//生效环境变量
source /etc/profile
//检查环境变量是否设置成功
sonar-scanner -v

这里我们主要介绍 /usr/local/sonar-scanner/confsonar-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,因为我们设置的是 ./ ,相当于是从当前根目录下扫描
**/
  1. Jenkins ==》 系统管理 ==》 全局工具配置, 配置 SonarQube Scanner

SonarQube + SonarScanner + SonarLint 代码质量监控搭建_第3张图片

  1. 配置Jenkins项目中Sonar-Scanner,路径可以直接选择 ./ Jenkins默认就是在当前项目根目录执行的扫描

SonarQube + SonarScanner + SonarLint 代码质量监控搭建_第4张图片

  1. 直接重新部署该项目,SonarScanner会直接把该项目的扫描信息加载到SonarQube中
IDEA集成
  1. 在IDEA中安装SonarLint插件

SonarQube + SonarScanner + SonarLint 代码质量监控搭建_第5张图片
2. 配置SonarQube Server

SonarQube + SonarScanner + SonarLint 代码质量监控搭建_第6张图片

  1. 绑定SonarQube Project

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KCI2JlpI-1615260455920)(https://s3.ax1x.com/2021/03/09/61LDwF.png)]

  1. 使用SonarLint 扫描项目

SonarQube + SonarScanner + SonarLint 代码质量监控搭建_第7张图片

参考文件
  1. SonarQube官方文档:https://docs.sonarqube.org/latest/setup/install-server/
  2. SonarScanner官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

你可能感兴趣的:(代码规范,linux,java,数据库,jenkins,代码规范)