SonarQube Docker 部署与 Java 项目静态代码分析指南
SonarQube 是常用的代码质量平台,可以对 Java 等项目进行静态代码分析,发现 Bug、漏洞、坏味道、重复代码和覆盖率问题。
这篇文章整理 SonarQube Docker 部署、PostgreSQL 数据库、系统参数、Java 项目扫描和生产注意事项。
CI/CD 系列文章
本文属于 Jenkins + GitLab + SonarQube CI/CD 系列,相关内容可以继续阅读:
- Git 提交规范实践:Conventional Commits、Commitizen 与 CHANGELOG 自动生成
- GitLab Docker 部署与 Personal Access Token 配置指南
- Jenkins 安装部署与 JDK、Maven、Agent 构建环境配置
- GitLab Webhook 触发 Jenkins Pipeline:Push、Tag 与 Merge Request 自动构建
- Jenkins 基于 GitLab 分支与 Tag 的自动化打包发布实践
- Jenkins 集成 SonarQube:代码扫描、质量门禁与 Pipeline 实践
- SonarQube Docker 部署与 Java 项目静态代码分析指南
- SonarQube for IDE 使用指南:IntelliJ 安装、Connected Mode 与规则同步
- SonarQube LTA 升级与数据库迁移指南:从旧版本到 8.9/9.9/2025 LTA
架构说明
典型部署:
Developer / Jenkins -> SonarScanner -> SonarQube Server -> PostgreSQL
SonarQube 不再支持 MySQL 作为数据库,生产部署应使用官方支持的数据库,常见是 PostgreSQL。
Docker Compose 示例
services:
sonarqube:
image: sonarqube:lts-community
depends_on:
- db
ports:
- "9000:9000"
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- /opt/data/sonarqube/data:/opt/sonarqube/data
- /opt/data/sonarqube/extensions:/opt/sonarqube/extensions
- /opt/data/sonarqube/logs:/opt/sonarqube/logs
db:
image: postgres:15
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- /opt/data/postgresql/data:/var/lib/postgresql/data
启动:
docker compose up -d
vm.max_map_count 问题
如果启动时报错:
max virtual memory areas vm.max_map_count [65530] is too low
处理:
echo 'vm.max_map_count=262144' >> /etc/sysctl.conf
sysctl -p
首次登录
访问:
http://<server>:9000
默认账号密码通常为:
admin / admin
首次登录后应立即修改密码。
创建项目与 Token
建议为 Jenkins 创建专用 Token:
- 不要使用管理员个人 Token。
- 设置过期时间。
- 保存到 Jenkins Credentials。
Java 项目扫描
Maven 示例:
mvn clean verify sonar:sonar \
-Dsonar.projectKey=demo-service \
-Dsonar.host.url=http://sonarqube.example.com:9000 \
-Dsonar.token=$SONAR_TOKEN
Jenkins 中建议使用 withSonarQubeEnv,不要明文写 Token。
Quality Gate
建议先从新代码质量门禁开始:
- 新代码无 Blocker / Critical 问题。
- 新代码覆盖率达标。
- 新代码重复率受控。
历史问题可以分阶段治理,不建议一开始就让全部历史债务阻塞 CI。
插件注意事项
安装第三方插件前要确认:
- 是否兼容当前 SonarQube 版本。
- 是否影响升级。
- 是否需要重启。
- 是否有安全风险。
中文插件、PDF 插件、P3C 插件都应先在测试环境验证。
生产建议
- 数据库定期备份。
- SonarQube 与 PostgreSQL 分盘。
- 插件升级前备份。
- 不要把 Token 写进项目仓库。
- 结合 Jenkins Quality Gate 阻断低质量代码。
参考资料
License:
CC BY 4.0