什么是SonarQube?
SonarQube是一个开源的代码质量管理平台。
基本概念:
SonarQube提供了一种方法来持续跟踪和管理代码质量,它通过静态代码分析来检测潜在的问题和不合规的编码实践。
这有助于开发团队提前发现并解决这些问题,从而避免在软件开发的后期阶段遇到更大的挑战。
使用范围:
SonarQube支持多种编程语言,如Java、C#、C/C++、PL/SQL、Cobol等,以及各种持续集成工具,使其可以应用于不同的开发环境和流程中。
工作原理:
SonarQube通过对源代码进行静态分析,评估代码的复杂性、重复性、单元测试覆盖率等多个维度,以此来评价代码的整体质量。
它还可以通过插件来扩展其功能,以适应特定的需求或遵循特定的编码标准。
安装配置:
SonarQube的安装和配置相对简单,它提供了详细的文档指导用户如何在不同的环境中设置和运行SonarQube服务器。
集成工具:
SonarQube可以与多种构建工具和持续集成系统(如Maven和JaCoCo)集成,以自动化代码质量分析和报告生成过程。
优缺点:
尽管SonarQube是一个功能强大的平台,但它也有一些局限性和不足之处。
例如,它的资源消耗可能较高,且对于某些复杂的项目配置可能需要一定的调整和优化才能达到最佳效果。
SonarQube的组件
SonarQube服务器:
SonarQube服务器是系统的核心,负责管理代码质量管理流程。
它接收来自SonarScanner的数据,处理分析结果,并将这些数据存储在数据库中。
SonarQube服务器还提供Web界面,用于配置、管理和查看代码质量报告。
SonarScanner:
SonarScanner是与开发环境接口的工具,负责执行代码的静态分析。
它从源代码管理系统中获取代码,根据预定义的规则和标准对代码进行分析,然后将分析结果发送给SonarQube服务器。
数据库:
存储SonarQube服务器生成的所有数据,包括项目元数据、代码质量度量、检测到的问题等。
插件:
SonarQube通过插件来扩展其核心功能,以支持更多编程语言、代码分析工具和编码标准。
插件可以提供额外的代码检查、度量和报告功能。
Web界面:
SonarQube的Web界面提供了一个用户友好的仪表板,显示代码质量的概览和详细信息。
用户可以在这里查看项目的健康状态、问题分布、代码覆盖率等。
持续集成(CI)工具集成:
SonarQube可以与各种持续集成工具进行集成,如Jenkins、Travis CI等。
这使得代码质量分析可以自动化地嵌入到软件开发流程中,每次代码提交都会触发分析。
环境准备
服务器: 192.168.234.59
资源包:
sonarqube.tar
postgresql.tar
1. 导入镜像
[root@dc-59 opt]# docker load -i sonarqube.tar
[root@dc-59 opt]# docker load -i postgresql.tar
[root@dc-59 opt]# mkdir sonarqube
[root@dc-59 opt]# cd sonarqube
[root@dc-59 sonarqube]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres 12 56fe80523f20 6 months ago 419MB
sonarqube 8.6.0-community c0247bd016bd 4 years ago 675MB
[root@dc-59 sonarqube]#2. 安装SonarQube
创建docker-compose配置文件, 文件内容如下:
version: '3'
services:
sonarqube:
image: sonarqube:8.6.0-community
container_name: sonarqube
ports:
- "5000:9000"
environment:
- SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONAR_JDBC_USERNAME=sonar
- SONAR_JDBC_PASSWORD=sonar
- SONAR_UPDATECENTER_ACTIVATE=false
networks:
- sonarqube-net
volumes:
- ./sonarqube_conf:/opt/sonarqube/conf
- ./sonarqube_data:/opt/sonarqube/data
- ./sonarqube_extensions:/opt/sonarqube/extensions
- ./sonarqube_logs:/opt/sonarqube/logs
restart: unless-stopped
depends_on:
db:
condition: service_healthy
db:
image: postgres:12
container_name: postgres_for_sonar
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
- POSTGRES_DB=sonar
volumes:
- ./postgresql:/var/lib/postgresql/data
networks:
- sonarqube-net
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U sonar" ]
interval: 10s
timeout: 5s
retries: 5
networks:
sonarqube-net:
name: sonarqube-net
driver: bridge启动SonarQube容器
[root@dc-59 sonarqube]# pwd
[root@dc-59 sonarqube]# /opt/sonarqube
[root@dc-59 sonarqube]# docker-compose up -d
[root@dc-59 sonarqube]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d41d4d293f15 sonarqube:8.6.0-community "bin/run.sh bin/sona…" 21 minutes ago Up 21 minutes 0.0.0.0:5000->9000/tcp, :::5000->9000/tcp sonarqube
e7ae566d8c88 postgres:12 "docker-entrypoint.s…" 21 minutes ago Up 21 minutes (healthy) 5432/tcp postgres_for_sonar3. 修改虚拟配置(启动故障排查时需要)
若SonarQube容器启动时出现以下错误, 说明虚拟内存限制太小:
sonarqube | ERROR: [1] bootstrap checks failed
sonarqube | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
sonarqube | ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonarqube/logs/sonarqube.log修改宿主机的虚拟内存限制:
[root@dc-59 sonarqube]# vi /etc/sysctl.conf
# 添加或更新以下内容
vm.max_map_count=262144
[root@dc-59 sonarqube]# sudo sysctl -p4. 安装汉化插件
将sonar-l10n-zh-plugin-8.6.jar拷贝到SonarQube的插件目录: /opt/sonarqube/sonarqube_extensions/downloads
重启sonarqube容器
[root@dc-59 sonarqube]# docker-compose restart sonarqube5. 访问SonarQube
访问SonarQube Web UI页面http://192.68.234.59:5000
账号密码默认为admin/admin
首次登陆修改为admin/root