SonarQube(四):Docker / Docker-Compose + Java 8 + Spring Boot 2 实战搭建
本文记录在 Java 8 + Spring Boot 2 技术栈下,使用 Docker / Docker Compose 搭建 SonarQube 并完成代码扫描的完整过程,适合本地或测试环境使用。
一、SonarQube 版本选择说明
sonarqube:7.8-community是官方最后一个支持 JDK 1.8 的版本。
由于历史项目仍运行在 Java 8 + Spring Boot 2 上,理论上推荐使用 7.8-community。
本文示例中 暂时使用 7.6-community(原理与配置完全一致)。
二、使用 Docker Compose 启动 SonarQube
1. docker-compose.yml
version: "3.8"
services:
sonarqube:
image: sonarqube:7.6-community
container_name: sonarqube
depends_on:
- postgres
environment:
sonar.search.javaOpts: "-Xms1024m -Xmx1024m"
sonar.jdbc.url: jdbc:postgresql://postgres:5432/sonar
sonar.jdbc.username: sonar
sonar.jdbc.password: sonar
ports:
- "59000:9000"
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
postgres:
image: postgres:10
container_name: sonarqube-postgres
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgres_data:
2. 关键说明(非常重要)
(1)为什么 SonarQube 的环境变量是 小写?
这是 历史设计问题,并非 Docker Compose 的限制。
这些配置项本质上映射到容器内的:
/opt/sonarqube/conf/sonar.properties
如果有疑问,可以进入容器查看该文件中的 key 定义。
(2)PostgreSQL 版本限制
- SonarQube 7.x 不支持高版本 PostgreSQL
- 建议使用:
postgres:9.6或postgres:10
否则可能出现:
- 启动失败
- 无法初始化 schema
- 隐性兼容问题
(3)Elasticsearch 内存是否生效如何确认?
sonar.search.javaOpts: "-Xms1024m -Xmx1024m"
启动后,可在 SonarQube 管理页面查看:
Administration → System
确认 Elasticsearch JVM 参数是否生效,避免 OOM。
三、Spring Boot 2 项目接入 SonarQube
1. Maven 插件配置
在 pom.xml 中加入 Sonar 扫描插件(最后一个支持java8的版本):
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.6.0.1398</version>
</plugin>
2. 使用 Maven Profile 管理 Sonar 配置(推荐)
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>http://domain-or-ip:port</sonar.host.url>
<sonar.login>token</sonar.login>
</properties>
</profile>
</profiles>
Token 获取方式
SonarQube → My Account → Security → Generate Token
⚠ 注意:Token 只会显示一次,请妥善保存。
四、执行代码扫描
1. 完整命令(不使用 Profile)
mvn clean verify sonar:sonar \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=YOUR_TOKEN
2. 使用 Profile 后的简化命令(推荐)
mvn clean verify sonar:sonar
五、查看 SonarQube 分析结果
浏览器访问:
http://domain-or-ip:59000
默认用户名/密码是admin/admin。
即可进入 SonarQube 控制台,查看:
- Bugs
- Vulnerabilities
- Code Smells
- Coverage
- Duplication
六、总结
- Java 8 项目务必选择 SonarQube 7.x
- PostgreSQL 版本不要过高
- Elasticsearch 内存配置必须检查是否生效
- 使用 Maven Profile 可以显著简化扫描命令
该方案非常适合老项目(Spring Boot 2 + Java 8)进行代码质量治理与技术债管理。