avatar

Ryan's Blog

The first step is always the hardest.

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
  • 工具
Home SonarQube Docker 部署与 Java 项目静态代码分析指南
文章

SonarQube Docker 部署与 Java 项目静态代码分析指南

Posted 2022-01-12 Updated 14 days ago
By Ryan Chen
11~14 min read

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 阻断低质量代码。

参考资料

  • SonarQube Docker 安装
  • SonarScanner CLI
  • Jenkins 集成 SonarQube
指南
SonarQube Docker PostgreSQL Java 代码质量 静态代码分析 SonarScanner
License:  CC BY 4.0
Share

Further Reading

Jun 27, 2026

Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分

本文整理一套适合 Router Agent + Skill + Runtime 架构的设计原则:Agent 只负责业务决策,Runtime 统一负责执行、恢复、Trace、Checkpoint 和 Evidence,Business Script 只做确定性业务执行。

Sep 9, 2024

Redis 核心概念、数据结构与高可用架构详解

系统梳理 Redis 的核心数据类型、底层结构、过期与淘汰、持久化、事务、主从复制、Sentinel、Cluster、缓存一致性和分布式锁等机制,适合作为 Redis 学习、面试复习和高可用架构设计参考。

Sep 5, 2024

B+树原理与 MySQL InnoDB 索引机制解析

本文从 B+ 树的多叉平衡结构、叶子节点链表、范围查询和磁盘 I/O 特性出发,解释数据库索引为什么常采用 B+ 树,并结合 MySQL InnoDB 的聚簇索引、二级索引、回表、覆盖索引和联合索引机制理解其实际应用。

OLDER

SonarQube for IDE 使用指南:IntelliJ 安装、Connected Mode 与规则同步

NEWER

Jenkins 安装部署与 JDK、Maven、Agent 构建环境配置

Recently Updated

  • Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分
  • RocketMQ 架构设计与应用最佳实践:高可用消息队列核心解析
  • Redis 核心概念、数据结构与高可用架构详解
  • B+树原理与 MySQL InnoDB 索引机制解析
  • MySQL AUTO_INCREMENT 插入 0 变成自增值的原因与解决方案

Trending Tags

RocketMQ Windows Feign Docker Zipkin SonarQube OkHttp HttpClient API 性能优化

Contents

©2026 Ryan's Blog. Some rights reserved. · 粤ICP备2022031588号