SonarQube使用教程(Docker安装)
一、SonarQube介绍面向多语言的代码质量与安全静态分析平台1、组成①sonarQubeweb界面管理平台1展示所有的项目代码的质量数据。2配置质量规则、管理项目、配置通知、配置SCM等。②sonarScanner代码扫描工具1专门用来扫描和分析项目代码支持20语言。2代码扫描和分析完成之后会将扫描结果存储到数据库当中在sonarQube平台看到扫描的数据。2、优势① 检测维度全基于代码编写规范与安全规范双重规则集自动识别安全漏洞、代码异味、重复代码、圈复杂度及测试覆盖率缺口② 工程集成无缝对接IDE、SCMGit/SVN及CI/CD流水线自动定位问题代码与具体提交人。③ 持续赋能通过量化质量门禁与增量分析驱动团队持续交付更干净、更安全的代码。二、SonarQube下载官网https://www.sonarsource.com/products/sonarqube/downloads/1、安装要求① 软件环境硬性要求JDK 版本分界线很关键SonarQube 8.9 LTS仅支持JDK11SonarQube 9.9 LTS支持JDK11 / JDK17推荐JDK17SonarQube 10.x强制OpenJDK 17不再兼容JDK11② 数据库重点避坑内置H2数据库仅用于测试、本地临时使用生产严禁使用正式生产仅支持PostgreSQL 12~16支持MySQL的SonarQube版本7.8及更早需要较旧的Java版本通常是Java 8或11③ 端口与权限要求默认 Web 端口9000需放行防火墙禁止管理员root用户启动SonarQube必须新建普通用户运行。Docker默认容器内部进程不是root用户容器内置了普通账号因此不用手动新建用户。④ 附属依赖如需对接CI/ESLintNode.js 14~20Docker部署Docker Engine ≥20.102、安装软件① 查看docker版本是否符合要求docker安装教程暂时占位运行Docker Desktop并且开启WSL2按下CtrlShiftEsc打开任务管理器 → 性能 →CPU右下角查看虚拟化已启用 ✅② 创建目录必须使用 Docker 命名卷named volumes不能用 bind mounts。我没有放在C盘都放在D盘了可以根据要求选择数据存放位置。1mkdir D:\sonarqube\postgres_data对应容器路径/var/lib/postgresql/data存什么PostgreSQL的全部数据库文件SonarQube的用户账号、项目配置、分析结果、权限设置、插件市场元数据等能不能删删了等于数据库清空SonarQube所有配置和扫描记录都没了2mkdir D:\sonarqube\sonarqube_data对应容器路径/opt/sonarqube/data存什么SonarQube内置Elasticsearch的索引数据项目分析结果的搜索索引缓存、临时计算数据等能不能删可以删但删了要重建索引启动会变慢首次登录后项目搜索可能暂时不可用。一般只在索引损坏、升级异常或清理空间时才删。3mkdir D:\sonarqube\sonarqube_extensions对应容器路径/opt/sonarqube/extensions存什么你自己安装的插件比如汉化包、语言插件上传的自定义规则、质量配置等能不能删别随便删。删了插件就没了SonarQube 可能缺少必要的语言支持或功能。如果因为插件导致启动失败可以进这个目录的 plugins 子目录删掉问题插件。4mkdir D:\sonarqube\sonarqube_logs对应容器路径/opt/sonarqube/logs存什么SonarQube的运行日志包括sonar.log、web.log、es.log、ce.log等出问题排查时主要靠这些日志能不能删可以删。日志文件删了会自动重新生成。但建议先压缩备份方便后续排查历史问题。③ 创建docker-compose.yml在任意路径下新建文件我放在D:\sonarqube下了写入以下代码version:3.8services:sonarqube:image:sonarqube:community container_name:sonarqube depends_on:-postgres environment:SONAR_JDBC_URL:jdbc:postgresql://postgres:5432/sonarSONAR_JDBC_USERNAME:sonarSONAR_JDBC_PASSWORD:sonar123 ports:-9000:9000volumes:-D:\sonarqube\sonarqube_data:/opt/sonarqube/data-D:\sonarqube\sonarqube_extensions:/opt/sonarqube/extensions-D:\sonarqube\sonarqube_logs:/opt/sonarqube/logs restart:unless-stopped postgres:image:postgres:15container_name:sonarqube_postgres environment:POSTGRES_USER:sonarPOSTGRES_PASSWORD:sonar123POSTGRES_DB:sonar ports:-5432:5432volumes:-D:\sonarqube\postgres_data:/var/lib/postgresql/data restart:unless-stoppedWindows 上 Docker Desktop 默认会把 C 盘共享给容器但D 盘可能默认没有共享需要手动开启。设置方法打开Docker Desktop点击右上角齿轮图标 →Resources→File sharing把D:\或D:\sonarqube加到共享列表里点击Apply然后重启Docker③ 下载 SonarQube和数据库cdD:\sonarqubedockercompose up-d检查状态如图就是安装成功dockerps-a④ 访问http://localhost:9000账号admin密码admin3、创建项目SonarQube页面点击顶部项目点击创建项目选择手动创建三、汉化下载汉化插件之后重启当前的服务Install Pending 卡住网页端触发重启失败直接用命令强制重启即可解决。cdD:\sonarqubedockercompose restart sonarqube四、查看PostgreSQL的图形化工具下载链接https://www.pgadmin.org/download/1、安装一路Next安装即可最后在开始菜单中找到软件打开2、新建并连接数据库一定要在docker中启动数据库才能连接3、创建角色直接用默认的超级管理员权限用户就行也可以创建一个普通的用户4、创建数据库直接用默认的数据库也行也可以创建一个新的数据库五、Sonar-scanner安装官网链接https://docs.sonarsource.com/sonarqube-server/10.8/analyzing-source-code/scanners1、Docker安装镜像docker pull sonarsource/sonar-scanner-cli2、验证是否成功docker images | findstr sonar-scanner-cli六、扫描代码1、拉取源码2、项目根目录新建配置文件文件名固定sonar-project.properties① Java 项目版使用前置先执行mvn clean compile生成target/classes需要覆盖率则执行mvn test jacoco:report# 【通用基础配置 前后端通用】 # SonarQube服务部署地址修改为你的Sonar地址端口sonar.host.urlhttp://127.0.0.1:9000# 身份认证TokenSonar平台个人账号-Security里生成用于上报扫描结果鉴权sonar.login替换为你的Sonar个人访问token# 项目唯一标识整个Sonar服务内不能重复英文/数字/下划线核心区分不同项目sonar.projectKeybackend_xx_server# Sonar网页展示的项目名称可以中文方便辨认sonar.projectNamexx后端服务# 项目版本号迭代新版本时可更新用于追溯不同版本代码质量sonar.projectVersion1.0# 源码编码格式统一UTF-8避免中文注释乱码、解析失败sonar.sourceEncodingUTF-8# 指定需要扫描的源码根目录. 代表当前项目根目录全部扫描sonar.sources.# 【Java后端专属配置】 # 限定仅扫描Java语言关闭多语言识别提升扫描速度sonar.languagejava# 编译后的class文件目录(Maven默认路径)Sonar依靠class做类型推断、精准代码分析必须编译后再扫描sonar.java.binariestarget/classes# 单元测试编译后的class目录用来区分业务代码与测试代码sonar.java.test.binariestarget/test-classes# 指定覆盖率采集工具为Jacoco适配Java单元测试覆盖率统计sonar.java.coveragePluginjacoco# Jacoco生成的覆盖率二进制文件路径Sonar读取后展示单元测试覆盖率sonar.jacoco.reportPathstarget/jacoco.exec# 【过滤配置不需要扫描的目录/文件】 # 排除目录规则xxx/** 代表该文件夹下所有内容全部跳过扫描# 排除打包产物、测试目录、文档、SQL脚本减少无效扫描sonar.exclusionstarget/**,test/**,doc/**,sql/**,*.sql# 白名单指定哪些目录属于单元测试代码测试代码不计入业务代码复杂度、重复率统计sonar.test.inclusionssrc/test/**② React JS/TS 前端版使用前置安装依赖npm install生成覆盖率文件npm run test:coverage# 【通用基础配置 前后端通用】 sonar.host.urlhttp://127.0.0.1:9000sonar.login替换为你的Sonar个人访问tokensonar.projectKeyreact_admin_websonar.projectNameReact前端管理系统sonar.projectVersion1.0sonar.sourceEncodingUTF-8# 前端业务代码统一放在src目录只扫描src避免扫描根目录多余文件sonar.sourcessrc# 【React前端专属配置】 # 开启JSX语法解析Sonar才能识别React标签、组件写法避免误报语法错误sonar.javascript.jsx.supporttrue# TSReact项目开启纯JS项目注释此行即可sonar.typescript.enabledtrue# 自动读取项目根目录的.eslintrc配置本地eslint和Sonar校验规则完全保持一致sonar.javascript.eslint.use.eslintrctrue# 【过滤配置 前端必配防止扫描node_modules卡死】 # 排除依赖包、打包产物、静态资源、配置文件、说明文档千万不要删掉node_modules/**sonar.exclusionsnode_modules/**,dist/**,build/**,public/**,config/**,*.md# 标记哪些文件是单元测试代码sonar.test.inclusionssrc/**/*.test.js,src/**/*.test.tsx,src/**/__tests__/**# Jest/Vitest执行测试后生成的覆盖率文件Sonar读取展示前端单元测试覆盖率sonar.javascript.lcov.reportPathscoverage/lcov.info③ Vue2/Vue3 前端版# 通用基础配置 sonar.host.urlhttp://127.0.0.1:9000sonar.login替换为你的Sonar个人访问tokensonar.projectKeyvue_web_systemsonar.projectNameVue前端管理平台sonar.projectVersion1.0sonar.sourceEncodingUTF-8sonar.sourcessrc# Vue专属配置 # 开启Vue单文件组件解析识别.vue中的template/script/stylesonar.javascript.vue.supporttrue# 复用项目本地eslint配置统一编码规范sonar.javascript.eslint.use.eslintrctrue# 过滤配置 sonar.exclusionsnode_modules/**,dist/**,build/**,public/**,*.md# 识别测试代码目录sonar.test.inclusionstests/**,src/**/*.spec.js# 前端覆盖率文件地址sonar.javascript.lcov.reportPathscoverage/lcov.info④ 前后端混合版本# 基础连接配置sonar.host.urlhttp://127.0.0.1:9000sonar.login替换为你的Sonar个人访问tokensonar.projectKeyfullstack_projectsonar.projectName前后端一体化项目sonar.projectVersion1.0sonar.sourceEncodingUTF-8sonar.sources.# 删掉 sonar.languagexxx自动识别Java/JS/Vue/React多语言# Java编译目录配置sonar.java.binariestarget/classes# 同时支持React JSX Vue解析sonar.javascript.jsx.supporttruesonar.javascript.vue.supporttrue# 读取前端eslint规则sonar.javascript.eslint.use.eslintrctrue# 全局统一排除所有无用目录sonar.exclusionstarget/**,node_modules/**,dist/**,build/**,test/**,*.md# Java覆盖率、前端覆盖率双配置sonar.jacoco.reportPathstarget/jacoco.execsonar.javascript.lcov.reportPathscoverage/lcov.info3、新建环境变量文件.envSONAR_HOST_URLhttp://host.docker.internal:9000SONAR_TOKENsqa_965xxxSONAR_PROJECT_VERSION2026.08-01.gitignore忽略这个环境变量文件SONAR_TOKEN 在Sonarqube网站中进行创建4、添加环境变量① 切换到.env文件所在的目录或者将代码中的.env换为绝对路径执行下面的代码Get-Content .env|ForEach-Object{if($_-match^(.*?)(.*)$){[System.Environment]::SetEnvironmentVariable($matches[1],$matches[2],Process)}}② 验证环境变量是否设置成功$env:SONAR_HOST_URL$env:SONAR_TOKENTips更改环境变量文件后需要重新设置5、上传分析结果-v...把你本地的代码目录挂载到容器里的 /usr/src扫描器会自动读取里面的sonar-project.propertiesdockerrun--rm--env-file.env绝对路径-v被扫描项目的绝对路径:/usr/srcsonarsource/sonar-scanner-cli

相关新闻

AWD攻防赛实战指南:Windows与Linux系统防御技巧

AWD攻防赛实战指南:Windows与Linux系统防御技巧

1. AWD攻防赛基础认知:从规则到实战定位 第一次参加AWD(Attack With Defense)线下攻防赛时,我盯着大屏幕上实时跳动的分数榜完全摸不着头脑。这种赛制与传统CTF最大的区别在于——你不仅要像猎人一样寻找漏洞,还得像建…

2026/8/8 13:10:12 阅读更多 →
PyCharm报错‘系统找不到指定的文件‘全解析与解决方案

PyCharm报错‘系统找不到指定的文件‘全解析与解决方案

1. 问题现象与初步诊断 当你在Pycharm中遇到"系统找不到指定的文件"错误时,通常会在运行、调试或执行某些操作时突然弹出。这个报错看似简单,但实际上可能涉及多种底层原因。根据我多年使用Pycharm的经验,这个错误最常见于以下几种…

2026/8/8 12:13:57 阅读更多 →
IPXWrapper:让经典游戏在Windows 10/11上重获联机生命的三大秘诀

IPXWrapper:让经典游戏在Windows 10/11上重获联机生命的三大秘诀

IPXWrapper:让经典游戏在Windows 10/11上重获联机生命的三大秘诀 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 你是否曾想过重温《红色警戒2》的激烈对战,或是与好友在《暗黑破坏神》中并肩作战&#x…

2026/8/8 12:11:19 阅读更多 →

最新新闻

Java序列化机制深度解析与应用实践

Java序列化机制深度解析与应用实践

1. 序列化机制的本质与核心价值 Java序列化本质上是一种将内存中的对象状态转换为字节流的过程,这种字节流可以持久化到磁盘或通过网络传输到其他JVM。这个机制的核心价值在于解决了分布式系统中对象持久化和跨网络传输的难题。 在HotSpot虚拟机中,对象…

2026/8/8 16:48:57 阅读更多 →
Unity UGUI自动化打包SpriteAtlas:防串图配置与工程化实践

Unity UGUI自动化打包SpriteAtlas:防串图配置与工程化实践

1. 项目概述:为什么我们需要自动化打包SpriteAtlas? 在Unity UGUI项目的开发中,尤其是中大型项目,UI图集的管理绝对是一个绕不开的“痛点”。你可能也经历过这样的场景:美术同学源源不断地输出UI切图,你手动…

2026/8/8 16:48:57 阅读更多 →
OpenRGB终极指南:如何用一个免费开源软件统一控制所有RGB设备?

OpenRGB终极指南:如何用一个免费开源软件统一控制所有RGB设备?

OpenRGB终极指南:如何用一个免费开源软件统一控制所有RGB设备? 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgramm…

2026/8/8 16:48:57 阅读更多 →
VS Code + EIDE:现代高效STM32嵌入式开发环境搭建与实战指南

VS Code + EIDE:现代高效STM32嵌入式开发环境搭建与实战指南

1. 项目概述:为什么选择 VS Code EIDE 开发 STM32? 如果你还在用 Keil 或者 IAR 开发 STM32,每次打开那个略显陈旧的界面,编译速度慢,代码编辑体验也一般,那今天这个组合可能会让你眼前一亮。VS Code EID…

2026/8/8 16:48:56 阅读更多 →
阿里巴巴Java编码指南(P3C)完整教程:从零构建企业级代码规范体系

阿里巴巴Java编码指南(P3C)完整教程:从零构建企业级代码规范体系

阿里巴巴Java编码指南(P3C)完整教程:从零构建企业级代码规范体系 【免费下载链接】p3c Alibaba Java Coding Guidelines pmd implements and IDE plugin 项目地址: https://gitcode.com/gh_mirrors/p3/p3c 阿里巴巴Java编码指南(P3C) 是阿里巴巴集团多年技术…

2026/8/8 16:48:56 阅读更多 →
DeltaSplice-Human实战教程:如何用代码预测突变对剪接位点的影响

DeltaSplice-Human实战教程:如何用代码预测突变对剪接位点的影响

reCAPTCHA PHP客户端库完全指南:10分钟快速集成网站防垃圾攻击 【免费下载链接】recaptcha 项目地址: https://gitcode.com/gh_mirrors/recaptcha15/recaptcha reCAPTCHA PHP客户端库是Google官方提供的终极解决方案,帮助PHP开发者轻松集成reCAP…

2026/8/8 16:47:56 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →