SonarQube使用教程(Docker安装)

发布时间:2026/11/13 21:08:00

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
延伸阅读

更多相关文章

2026/11/14 0:50:02

FLTK GUI编程入门:轻量级跨平台C++界面开发实战指南

1. 项目概述:为什么选择FLTK作为GUI入门如果你刚开始接触图形用户界面(GUI)编程,面对Qt、wxWidgets、GTK这些庞然大物,可能会感到无从下手。它们功能强大,但随之而来的是复杂的构建系统、庞大的依赖库和陡峭…

2026/11/14 0:51:09

Node.js+Vue.js全栈甜品商城:毕业设计实战与部署指南

这次我们来看一个基于 Node.js 和 Vue.js 的甜品网上商城系统,这是一个典型的 2026 届计算机毕业设计项目。对于即将毕业的同学来说,一个功能完整、技术栈主流、能跑通前后端全流程的商城系统,是展示自己综合能力、应对答辩和求职的绝佳选择。…

2026/11/14 2:24:42

第10讲:MCP Server 生产化部署

前九讲我们完成了 MCP Server 的开发、集成和编排。但所有这些都在本地开发环境中运行。这一讲,我们要把 MCP Server 部署到生产环境——让它稳定、安全、可监控地对外提供服务。 一、生产环境的挑战 维度 开发环境 生产环境 传输方式 stdio(本地进程…

2026/11/14 12:08:55

电工证的复印件千万别踩坑,三门峡水利从业者怎么避雷

电工证的复印件千万别踩坑,三门峡水利从业者怎么避雷 你是不是也遇到过这种情况:手里拿着电工证的复印件,想办异地转移,结果被各种中介套路,不仅多花钱,还耽误时间?电工证的复印件千万别踩坑,尤其是三门峡水利工程这类特殊行业的从业者,更需要了解清…

2026/11/14 12:08:55

电工证考试难度 知乎培训机构怎么选

电工证考试难度知乎 电工证怎么报名才靠谱 我现在就在周口做电工,手里有低压电工证,找工作比没证的人快多了。前几天有个朋友找我,说他想转行做电工,但不知道电工证考试难度知乎上怎么评价,更不知道怎么报名。说实话,现在特种作业证是很多行业准入门槛…

2026/11/14 12:08:55

衡阳电工证怎么换证与怎么报名全攻略,实操考试心里没底怕挂科?

衡阳电工证怎么换证与怎么报名全攻略,实操考试心里没底怕挂科? 你是不是也像很多人一样,面对实操考试心里没底,怕挂科?特别是衡阳电工证怎么换证的问题,更是让不少朋友头疼。别担心,下面的内容会帮你一步步理清思路,从报名到换证,再到备考,一网打尽…

2026/11/14 12:08:55

投诉电工证被挂靠证丢了怎么补办

郑州电工证被挂靠投诉事件:含金量在哪儿?怎么保住了 急需特种作业证才能上岗找工作,这话不是我说的,是郑州某水利工程公司的王师傅亲口说的。他去年考了低压电工证,结果被中介“挂靠”后,证丢了,连带几个月工资都泡汤了。这个事闹得不小,最后他投诉到…

2026/11/14 12:08:55

那种电工证不需要年审怎么考 含金量高的证书怎么选

那种电工证不需要年审怎么考 含金量高的证书怎么选 之前考的证在外省能不能转过来?这几乎是所有特种作业持证人都会问的问题,特别是像低压电工、高压电工这类证书,不仅关系到职业发展,还直接影响到能不能上岗工作。如果你在洛阳初次报考,又担心…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/14 0:06:39

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来 之前考的证在外省能不能转过来?这个问题我太熟悉了,作为一名干了十几年的特种作业证书办理从业者,每年都会遇到不少像你一样在外地考了证,回来却发现无法直接使用的学员。别急,今天我就…

2026/11/14 0:06:39

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,你不是一个人。在信阳浉河区,很多刚进入工地的电工都面临这样的困境:工作强度大,时间碎片化,根本没有系统复习考试的机会。但电工证是上岗的硬门槛,…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑