SonarQube+Maven+SonarQube Scanner
1、SonarQube简介
官方网站地址:https://www.sonarqube.org/
SonrQube是一个开源的代码质量管理系统,用于检测代码中的错误,漏洞和代码规范。它可以以现有的Gitlab、Jenkins集成,以便在项目拉去后进行连续的代码检查
使用 SonarQube 静态分析,您可以在一个地方衡量项目中所有语言以及领域中所有项目的可靠性、安全性和可维护性
社区版本免费开源,目前最新版本支持:15种语言的静态代码分析:Java、JavaScript、C#、TypeScript、Kotlin、Ruby、Go、Scala、Flex、Python、PHP、HTML、CSS、XML 和 VB.NET 检测错误和漏洞,查看安全热点,跟踪代码异味并修复您的技术债务,代码质量指标和历史,Jenkins CI/CD 集成,可扩展,有 50 多个社区插件
SonarQube特性
-
持续检查
- 项目整体的健康程度:项目的主页面会给出,项目整体的Bugs、Vulnerabilities、Code Smells
- 专注于漏洞
-
监测棘手的问题
-
多语言支持
-
集成DevOps(evOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节)
-
集中质量
七个维度检测代码质量
- 复杂度分布(complexity):代码复杂度过高将难以理解
- 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方
- 单元测试统计(unit tests):统计并展示单元测试覆盖率
- 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
- 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
- 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug
- 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
2、使用docker-compose 安装 SonarQube
docker-compose.yml文件
version: "3.7"
services:
postgres:
image: postgres:12.4-alpine
ports:
- 5432:5432
networks:
- sonarnet
restart: always
environment:
- POSTGRES_DB=sonar
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
- TZ=Asia/Shanghai
volumes:
- /opt/sonarqube/postgresql/data:/var/lib/postgresql/data
sonarqube:
image: sonarqube:8.9.8-community
ports:
- 9000:9000
networks:
- sonarnet
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://postgres:5432/sonar
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
restart: always
depends_on:
- postgres
volumes:
- /opt/sonarqube/data:/opt/sonarqube/data
- /opt/sonarqube/logs:/opt/sonarqube/logs
- /opt/sonarqube/extensions:/opt/sonarqube/extensions
- /opt/sonarqube/conf:/opt/sonarqube/conf
networks:
sonarnet:
driver: bridge
docker-compose环境准备
可能出现启动SonarQube报错:ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count
原因:SonarQube内置了ElasticSearch,需要调整默认的vm.max_map_count信息,在宿主机中执行以下命令:sysctl -w vm.max_map_count=262144
执行命令
docker-compose up -d
docker-compose logs -f
访问页面:http://192.168.168.200:9001/
默认账号密码:admin/admin
3、结合maven使用
修改maven的conf settings.xml 文件,加入以下配置文件
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>http://192.168.168.200:9001</sonar.host.url>
<sonar.login>admin</sonar.login>
<sonar.password>12345678</sonar.password>
</properties>
</profile>
进入maven项目目录,使用命令测试结果
mvn clean install -DskipTests sonar:sonar
SonarQube 运行日志
通过SonarQube 可视化界面查看结果
SonarQube常见扫描结果分析
- 扫描结果总览
- 优先级1位之Bugs
- 优先级2位之漏洞
- 优先级3位之重复率