一、介绍
sonar是一款静态代码质量分析工具,支持包括JAVA、JS、CSS等20多种语言,能够集成到IDE、Jenkins等服务中,方便查看代码质量分析报告。
二、安装
(一)、环境准备
centos 7
docker 19.0 +
docker-compose 1.26 +
(二)、配置docker-compose文件
version: "3"
services:
sonarqube:
image: sonarqube:7.4-community
ports:
- "9000:9000"
networks:
- sonarnet
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
db:
image: postgres:11.1
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- postgresql_data:/var/lib/postgresql/data
networks:
sonarnet:
driver: bridge
volumes:
sonarqube_conf:
sonarqube_data:
sonarqube_extensions:
sonarqube_bundled-plugins:
postgresql_data:
(三)、启动
docker-compose up -d
(四)、配置插件
-
查看插件目录
# 查看插件目录命令 docker volume inspect sonarqube_sonarqube_extensions # 返回 [ { "CreatedAt": "2020-06-28T11:21:57+08:00", "Driver": "local", "Labels": { "com.docker.compose.project": "sonarqube", "com.docker.compose.version": "1.24.1", "com.docker.compose.volume": "sonarqube_extensions" }, "Mountpoint": "/data/docker/volumes/sonarqube_sonarqube_extensions/_data", "Name": "sonarqube_sonarqube_extensions", "Options": null, "Scope": "local" } ] # Mountpoint下目录 /data/docker/volumes/sonarqube_sonarqube_extensions/_data/plugins
-
上传插件
# plugins . ├── README.txt ├── sonar-csharp-plugin-7.7.0.7192.jar ├── sonar-css-plugin-1.0.2.611.jar ├── sonar-flex-plugin-2.4.0.1222.jar ├── sonar-go-plugin-1.1.0.1612.jar ├── sonar-jacoco-plugin-1.0.1.143.jar ├── sonar-java-plugin-5.8.0.15699.jar ├── sonar-javascript-plugin-5.0.0.6962.jar ├── sonar-kotlin-plugin-1.2.1.2009.jar ├── sonar-l10n-zh-plugin-1.19.jar ├── sonar-ldap-plugin-2.2.0.608.jar ├── sonar-php-plugin-2.14.0.3569.jar ├── sonar-python-plugin-1.10.0.2131.jar ├── sonar-ruby-plugin-1.2.1.2009.jar ├── sonar-scm-git-plugin-1.6.0.1349.jar ├── sonar-scm-svn-plugin-1.9.0.1295.jar ├── sonar-typescript-plugin-1.8.0.3332.jar ├── sonar-vbnet-plugin-7.7.0.7192.jar └── sonar-xml-plugin-1.5.1.1452.jar
(五)、配置sonar.properties
-
查看配置文件目录
# 查看配置文件目录 docker volume inspect sonarqube_sonarqube_conf # 返回信息 [ { "CreatedAt": "2020-06-28T13:37:30+08:00", "Driver": "local", "Labels": { "com.docker.compose.project": "sonarqube", "com.docker.compose.version": "1.24.1", "com.docker.compose.volume": "sonarqube_conf" }, "Mountpoint": "/data/docker/volumes/sonarqube_sonarqube_conf/_data", "Name": "sonarqube_sonarqube_conf", "Options": null, "Scope": "local" } ] # Mountpoint下目录 /data/docker/volumes/sonarqube_sonarqube_conf/_data
-
配置文件
vim /data/docker/volumes/sonarqube_sonarqube_conf/_data/sonar.properties sonar.web.context=/sonar sonar.web.port=9000
(六)、web
-
web访问
http://localhost:9000/sonar
三、集成Jenkins
(一)、webhook配置
# 检查结果通知
配置- 配置 – webhooks
# 创建
# 名称
jenkins
# URL
http://jenkins:8080/sonarqube-webhook/
#备注:
#Jenkins服务器地址
(二)、jenkins配置
-
插件安装
SonarQube Scanner插件安装
-
系统配置
# 系统管理 – 系统配置 – SonarQube servers # Name sonar # Server URL http://sonar:9000/sonar/ # 备注: sonar服务器地址 # Server authentication token 选择sonar认证
(三)、pipeline编写
-
maven-global-settings配置
# 系统设置-文件管理 配置全局maven源 # 文件ID maven-global-settings
-
流水线步骤
stage('Sonar阶段') { steps{ configFileProvider([configFile(fileId: 'maven-global-settings', variable: 'MAVEN_GLOBAL_ENV')]) { withSonarQubeEnv('sonar') { echo "开始进行代码审计" sh """mvn -s $MAVEN_GLOBAL_ENV sonar:sonar \ -Dsonar.projectKey=${APPLICATION_NAME} \ -Dsonar.projectName=${APPLICATION_NAME} \ -Dsonar.java.coveragePlugin=jacoco \ -Dsonar.surefire.reportsPath=target/surefire-reports \ -Dsonar.analysis.mode= \ -Dsonar.java.binaries=target/sonar """ } script { //设置超时时间1分钟 timeout(1) { //利用sonar webhook功能通知pipeline代码检测结果,未通过质量阈,pipeline将会fail def qg = waitForQualityGate('sonar') if (qg.status != 'OK') { error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}" } } } } } }
四、管理
(一)、质量阈配置
-
新增
# 质量阈 – 创建 # 名称 test # 条件 度量 Bugs > 0 # 设为默认
(二)、阿里p3c-pmd规则
-
上传插件
# https://github.com/jensgerdes/sonar-pmd/releases sonar-pmd-plugin-3.3.0.jar
-
激活规则
# 新增质量配置 # 激活p3c规则 # 应用规则 # 设置成默认配置