)
企业为什么要用 Docker、Gogs、Jenkins第一章企业开发模式——为什么企业需要统一开发环境本文基于黑马《天机学堂》的项目实践但并不仅仅介绍 Docker、Gogs、Jenkins 的安装而是站在企业开发的角度帮助大家理解它们为什么会出现以及它们之间是如何协同工作的。前言很多人在学习微服务的时候都会遇到 Docker、Git、Jenkins、Nacos、Redis、MySQL、RabbitMQ……课程里通常会教大家把这些软件安装好然后运行项目。但是很多人学完之后仍然有一个疑问为什么企业一定要这样开发为什么不能像以前学习 Java Web 一样IDEA 打开项目点击 Run浏览器访问为什么还要学习 Docker为什么要搭建 Gogs为什么还要配置 Jenkins事实上这些工具都不是孤立存在的它们共同组成了现代企业研发流程的一部分。而理解它们最好的方式不是先学习命令而是先理解企业开发模式。一、个人项目与企业项目最大的区别刚开始学习 Java 时我们写的项目通常都很简单。例如一个 Spring Boot 项目Spring Boot │ MySQL启动 MySQL。运行 Spring Boot。项目即可访问。整个开发流程非常简单。但是当进入企业以后项目规模会发生巨大的变化。例如一个典型的 Spring Cloud 微服务项目Gateway网关 User Service用户服务 Course Service课程服务 Trade Service交易服务 Search Service搜索服务 Redis MySQL RabbitMQ Nacos MinIO Elasticsearch XXL-JOB此时一个完整项目可能包含十几个甚至几十个服务。每个服务都有自己的数据库连接、配置文件和运行环境。整个系统已经不是启动一个项目那么简单了。二、企业开发为什么容易出现环境问题假设团队里有四位开发人员。AWindows 11JDK 21MySQL 8.0Redis 7BWindows 10JDK 17MySQL 5.7Redis 6CUbuntuDockerDmacOS如果大家都按照自己的方式安装软件很快就会出现各种问题。例如开发 A我这里运行正常。开发 BRedis 怎么连不上开发 CMySQL SQL 语法报错。开发 D为什么 Docker 能运行你们不能最后经常会出现一句程序员经典名言我这里没问题。问题真的出在代码吗很多时候并不是。真正的问题是开发环境已经不一致了。三、企业首先解决的不是代码而是环境很多初学者认为Docker 是为了部署。其实这只是它的一部分作用。企业真正首先解决的问题是如何保证所有开发人员拥有完全一致的运行环境。例如所有开发人员统一使用JDK 17MySQL 8Redis 7RabbitMQ 3.12Nacos 2.x这样开发环境 测试环境 生产环境才能保证在开发环境运行成功的程序到测试环境依然能够运行。这就是现代企业为什么越来越依赖容器技术的原因。四、为什么企业要划分多个环境很多同学第一次进入公司都会发现除了自己的电脑公司还有很多服务器。例如开发环境Development ↓ 测试环境Testing ↓ 预发布环境Staging ↓ 生产环境Production为什么不能只有一台服务器原因很简单。不同阶段承担着不同的职责。1、开发环境Development开发环境就是程序员日常工作的地方。主要用于编写代码调试功能修改 Bug联调接口这里的数据一般可以随意修改。出现问题也不会影响真实用户。2、测试环境Testing测试环境主要提供给测试人员。测试人员会功能测试接口测试回归测试压力测试确保每个版本没有明显问题。3、预发布环境Staging很多人容易忽略预发布环境。它最大的作用就是模拟真实生产环境。例如数据库配置一致Redis 配置一致Linux 系统一致Docker 镜像一致如果预发布都运行正常那么上线风险就会大幅降低。4、生产环境Production生产环境就是最终提供给用户访问的服务器。这一环境具有几个特点数据真实用户真实不能随意修改稳定性要求最高任何一次错误部署都可能影响大量用户。因此企业不会允许开发人员直接把代码复制到生产服务器运行。必须经过完整的审核和自动化流程。五、为什么需要自动化假设一个项目每天提交代码 30 次。如果每次都需要人工完成下面这些操作git pull ↓ mvn clean package ↓ 复制 Jar ↓ 停止服务 ↓ 启动服务 ↓ 通知测试一天下来将会浪费大量时间。而且每一步都可能出现人为失误。例如忘记更新代码。忘记打包。启动了错误版本。因此企业希望把重复工作交给机器完成。于是自动化构建CI和自动化部署CD开始出现。后面的 Jenkins就是完成这些工作的核心工具。六、现代企业开发模式现代企业的软件开发流程大致如下需求分析 ↓ 开发编码 ↓ Git 提交代码 ↓ 自动构建 ↓ 自动测试 ↓ 部署测试环境 ↓ 测试验收 ↓ 发布生产可以发现程序员真正需要关心的只有编写代码提交代码剩下的大部分重复工作都交给自动化平台完成。这也是现代 DevOps 的核心思想之一让开发更加专注于业务而不是重复劳动。七、本章小结通过这一章我们可以得出几个重要结论✅ 企业项目比个人项目复杂得多涉及多个微服务和基础组件。✅ 环境不一致是企业开发中最常见的问题之一。✅ Docker 的首要价值并不是部署而是统一运行环境。✅ 企业通常会划分开发、测试、预发布和生产环境以保证系统稳定性。✅ 自动化构建和部署可以减少人为操作提高研发效率。理解了这些背景之后我们就可以进一步思考企业究竟是如何做到环境统一的下一章我们将正式进入 Docker看看它为什么能够成为现代微服务开发中最重要的基础设施之一。 我的理解很多初学者认为Docker 是部署工具。实际上更准确的说法应该是Docker 首先解决的是环境一致性其次才是部署效率。只有当开发、测试、生产运行的是同一个镜像时“开发环境正常、线上环境报错” 这类问题才能真正减少。这也是后续学习 Gogs、Jenkins 和 CI/CD 的基础。第二章Docker、Gogs、Jenkins 原理——理解三大核心工具在企业开发中的职责在上一章中我们了解了企业为什么需要统一开发环境以及为什么要划分开发、测试、预发布和生产环境。那么企业究竟是如何实现这一切的答案就是今天的三个主角Docker、Gogs、Jenkins。它们看似毫无关系实际上却构成了现代企业研发流程中最基础的一条链路。一、先不要急着学习命令很多初学者学习 Docker 时第一件事情就是dockerpulldockerrundockerpsdockerexec学习 Jenkins 时新建任务配置 Maven配置 Git学习 Gogs 时创建仓库Push 代码虽然这些操作都会了但是仍然不知道为什么企业一定要这样做其实这三个工具分别解决的是三个完全不同的问题。工具解决的问题Docker如何保证程序运行环境一致Gogs如何管理团队代码Jenkins如何自动完成重复工作因此我们可以把它们理解为企业开发流程中的三个不同角色。二、Docker统一运行环境1、Docker 出现之前假设现在需要部署一个 Spring Boot 项目。运行它需要JDKMavenMySQLRedisRabbitMQLinux环境变量配置文件只要其中任何一个版本不同都可能导致项目无法运行。例如开发环境 JDK17 MySQL8 Redis7 ↓ 生产环境 JDK21 MySQL5.7 Redis6最终结果就是开发 正常运行 ↓ 生产 启动失败这也是为什么很多程序员都会说我这里没问题。因为代码没有问题。环境有问题。2、Docker 的核心思想Docker 提供了一种新的思路把程序和运行环境一起打包。例如Spring Boot JDK17 配置文件 依赖库 Docker Image这里产生了第一个重要概念Image镜像镜像可以理解为一个已经打包好的程序模板。里面包含程序代码Java 环境配置启动方式所有依赖因此无论复制到哪台服务器。运行结果都一致。3、Container容器镜像只是模板。真正运行程序的是Container容器。关系如下Docker Image ↓ docker run ↓ Docker Container可以理解成镜像 ≈ 类Class 容器 ≈ 对象Object一个镜像可以运行多个容器。例如SpringBoot Image ↓ Container1 Container2 Container3这也是 Docker 可以快速扩容的重要原因。4、为什么 Docker 特别适合微服务微服务意味着每个服务都可以独立部署。例如Gateway ↓ Image ↓ ContainerUser Service ↓ Image ↓ ContainerOrder Service ↓ Image ↓ Container彼此之间互不影响。如果订单服务出现问题只需要重启订单服务即可。不会影响其他系统。这就是容器化部署最大的优势。5、Docker Compose当天机学堂启动项目时。大家会发现不仅需要启动项目。还需要MySQLRedisRabbitMQNacosMinIO如果每个容器都docker run将会非常麻烦。于是Docker Compose 出现了。它允许docker-compose.yml统一描述mysql redis rabbitmq nacos minio然后dockercompose up-d即可一次启动整个开发环境。这也是课程中为什么会提供docker-compose.yml文件的原因。三、Gogs企业自己的 GitHub很多同学第一次看到 Gogs。都会问它是不是 Git答案不是。1、Git 是什么Git 是版本控制工具。负责记录代码历史管理分支合并代码回滚版本例如git add git commit git push这些命令。都是 Git 完成的。2、为什么还需要 GogsGit 只能管理本地仓库。如果团队开发。还需要一个远程仓库。例如开发A ↓ Push ↓ 服务器 ↓ 开发B Pull这个服务器就是 Git 仓库。常见的有GitHubGitLabGiteaGogs3、企业为什么不用 GitHub很多互联网公司代码属于企业资产。通常不会直接托管到公网。因此会自己搭建 Git 服务。例如公司服务器 ↓ Gogs ↓ Git Repository这样既保证安全。又方便权限管理。4、Gogs 在整个流程中的作用很多初学者误认为Gogs 用来部署项目。实际上它只负责保存代码。例如开发 ↓ git push ↓ Gogs ↓ 代码保存成功真正部署项目。还没有开始。5、Webhook这里出现一个重要概念Webhook。当git push完成后。Gogs 可以自动通知 Jenkins有新的代码提交了。这就是Webhook。它相当于Push ↓ 发送消息 ↓ Jenkins 收到通知整个过程。不需要人工点击。四、Jenkins企业自动化流水线很多教程一句话Jenkins 是持续集成工具。其实更容易理解的说法应该是Jenkins 是自动执行任务的平台。1、没有 Jenkins 时程序员每次发布需要git pull ↓ mvn clean package ↓ 复制 Jar ↓ 停止服务 ↓ 启动服务 ↓ 通知测试重复几十次。既浪费时间。又容易出错。2、有 Jenkins 后只需要git push剩下全部自动完成。例如Git Clone ↓ Maven Compile ↓ Unit Test ↓ Package ↓ Docker Build ↓ Docker Run ↓ Deploy这就是流水线Pipeline。3、为什么叫 Pipeline因为每一步都是上一阶段的输出。例如代码 ↓ 编译 ↓ Jar ↓ Docker Image ↓ Docker Container ↓ 测试服务器整个过程像流水线一样。自动流转。4、Jenkins 为什么能够部署 Docker很多同学容易误解Docker 自动部署。其实真正发出命令的是Jenkins。例如Jenkins执行dockerbuild然后执行dockerrun因此Docker负责运行。Jenkins负责调度。职责完全不同。五、三者之间到底是什么关系很多初学者学习的时候。容易认为Docker、Gogs、Jenkins是三个独立的软件。实际上它们更像一家公司的三个部门。例如Docker ↓ 负责运行程序Gogs ↓ 负责保存代码Jenkins ↓ 负责安排工作三者协同之后。企业开发流程就变成开发人员 ↓ Git Push ↓ Gogs ↓ Webhook ↓ Jenkins ↓ Git Clone ↓ Maven Build ↓ Docker Build ↓ Docker Run ↓ 测试服务器这张图也是整个 CI/CD 的核心流程。六、本章小结经过这一章我们已经能够理解三个工具各自承担的职责工具核心职责是否直接运行项目Docker提供一致的运行环境✅ 是Gogs管理代码仓库❌ 否Jenkins自动化构建与部署❌负责调度很多人在学习过程中会觉得三者联系不大其实它们分别对应企业开发中的三个关键问题Docker解决“程序在哪都能跑”的问题。Gogs解决“团队如何协同开发”的问题。Jenkins解决“如何自动完成重复工作”的问题。三者配合后才能真正实现现代企业常说的持续集成CI和持续交付CD。 我的理解很多初学者喜欢把 Docker、Gogs、Jenkins 当成三个独立的软件学习但在企业中它们其实是同一条研发流水线上的三个环节。如果把企业开发比作一家工厂Gogs就像仓库负责保存原材料代码。Jenkins就像流水线调度中心负责安排加工流程。Docker就像标准化生产车间保证每件产品应用都在一致的环境中生产和运行。只有三者协同工作企业才能真正做到开发、测试、部署一体化。这一点也是理解后续 CI/CD 流程的关键。第三章CI/CD 与企业部署流程——一次git push的背后到底发生了什么学完 Docker、Gogs、Jenkins 后很多人仍然会有一个疑问为什么我只执行了一次git push测试服务器上的项目就自动更新了其实这就是CI/CD持续集成 / 持续交付 / 持续部署的价值。在这一章我们将以企业真实项目为例完整梳理一次代码提交后的自动化流程。一、什么是 CICIContinuous Integration中文通常翻译为持续集成。很多教材会直接给出定义持续集成就是频繁地将代码集成到主干并通过自动化流程验证代码质量。这句话没有错但对于初学者来说并不容易理解。我们不妨先看一个没有 CI 的团队。没有 CI 的开发模式假设一个团队有四名开发人员。他们分别负责用户模块课程模块支付模块搜索模块大家都在本地开发。直到周五下午开发A 提交代码 开发B 提交代码 开发C 提交代码 开发D 提交代码然后项目开始打包。结果编译失败继续修改。修改完成。再次打包。结果接口冲突继续修改。最后终于能够部署。整个下午几乎都在解决“为什么代码合不到一起”这就是传统开发模式的问题。大家开发的时候都觉得没问题。真正的问题发生在最后集成的时候。因此持续集成Continuous Integration提出了一个新的理念不要等到最后一起集成而是每次提交代码都立即进行验证。二、CI 到底做了什么CI 的核心其实只有一句话每一次提交都自动检查代码是否还能正常工作。例如开发人员git push随后Jenkins ↓ 拉取最新代码 ↓ Maven 编译 ↓ 执行测试 ↓ 打包 Jar ↓ 生成 Docker 镜像 ↓ 部署到测试环境整个过程完全自动完成。如果中间任何一步失败例如编译失败 测试失败 Docker Build 失败流水线立即停止。开发人员马上收到通知。这样问题能够在几分钟内被发现。而不是几天之后。三、CI 为什么能够提高开发效率很多初学者认为CI 的作用就是自动打包。实际上真正的价值在于尽早发现问题。例如开发 A修改了接口。开发 B依赖了旧接口。如果没有 CI。可能两天之后才发现。如果有 CI。第一次提交立即编译失败。开发人员当天就能修复。因此CI 并不是为了省几分钟打包时间。而是为了降低多人协作带来的风险。四、什么是 CD很多人容易把 CI 和 CD 混淆。实际上CD 有两种不同的含义。第一种Continuous Delivery持续交付持续交付强调代码已经具备随时发布的能力。流程如下提交代码 ↓ 自动编译 ↓ 自动测试 ↓ 自动部署到测试环境 ↓ 人工确认 ↓ 发布生产环境这里最后一步仍然需要人工确认。很多企业采用的就是这种方式。因为生产环境风险较高。必须经过审核。第二种Continuous Deployment持续部署持续部署则更加自动化。流程如下提交代码 ↓ 自动编译 ↓ 自动测试 ↓ 自动部署测试 ↓ 自动部署生产整个过程没有人工参与。只要测试通过。立即上线。这种模式适合自动化测试完善发布频率高风险可控例如互联网平台。五、一次 git push 后到底发生了什么这一部分是整个 CI/CD 的核心。假设开发人员完成一个功能。随后执行gitadd.gitcommit-m完成课程查询功能gitpush看起来只有一个 Push。实际上企业服务器已经开始工作。第一步Gogs 接收代码开发人员Git Push↓Gogs收到新的 Commit。更新远程仓库。随后触发Webhook。第二步Webhook 通知 JenkinsWebhook 可以理解成“有人提交代码了。”收到通知后Jenkins立即启动流水线。整个过程不需要任何人工点击。第三步Jenkins 拉取最新代码Jenkins执行Git Clone 或者 Git Pull确保获取最新版本。第四步Maven 编译随后Jenkins执行mvn clean package完成下载依赖编译源码单元测试打包 Jar如果这里失败。流水线立即结束。不会继续部署。第五步Docker 构建镜像Jar 包成功之后。Jenkins继续执行dockerbuildDocker根据Dockerfile制作Docker Image。此时应用已经拥有统一运行环境。第六步推送镜像可选很多企业不会直接部署。而是先上传镜像仓库。例如Harbor Docker Hub 阿里云镜像仓库以后任何服务器。都可以直接拉取。统一部署。第七步部署测试环境随后Jenkins执行dockerrun或者dockercompose up新的容器启动。测试环境更新完成。此时测试人员开始验证功能。六、为什么 Docker 一定要放在最后很多同学会问为什么不是先 Docker。再 Maven原因很简单。Docker负责运行程序。Maven负责生成程序。只有Jar 包已经生成。Docker 才能制作镜像。因此顺序必须是Git ↓ Compile ↓ Jar ↓ Docker Image ↓ Container这是整个流水线中非常重要的一点。七、天机学堂这一章到底在模拟什么如果把课程内容串起来。其实就是模拟企业研发流程。例如IDEA 编写代码 ↓ Git Push ↓ Gogs ↓ Webhook ↓ Jenkins ↓ Maven ↓ Docker Build ↓ Docker Run ↓ 测试环境课程真正想表达的并不是如何安装 Docker。而是企业如何实现自动化交付。理解这一点之后。再学习后面的 Kubernetes、Harbor。都会容易很多。八、企业为什么喜欢自动部署总结起来主要有四个原因。① 提高效率程序员不用重复打包。复制。启动。部署。② 降低人为错误例如忘记更新代码。复制错 Jar。启动旧版本。自动化全部避免。③ 发布更加稳定所有环境使用同一套Docker Image。开发成功。测试成功。生产同样成功。真正实现Build OnceRun Anywhere一次构建到处运行。④ 更容易回滚如果新版本出现问题。只需要重新启动旧镜像。几分钟即可恢复。而不是重新安装程序。九、本章总结现在我们终于可以把三者串起来了。开发人员 ↓ Git Push ↓ Gogs ↓ Webhook ↓ Jenkins ↓ Git Clone ↓ Maven Build ↓ Docker Build ↓ Docker Image ↓ Docker Container ↓ 测试服务器 ↓ 人工验证 ↓ 生产环境整个过程中Docker、Gogs、Jenkins 并不是竞争关系。而是分别承担不同职责。工具职责Docker提供一致的运行环境Gogs管理代码仓库Jenkins自动化执行流水线三者结合之后企业便拥有了最基础的CI/CD 自动化研发能力。 我的理解很多初学者把CI/CD 理解成 Jenkins其实这是一个常见误区。CI/CD 是一种开发理念而 Jenkins 只是实现这种理念的工具之一。除了 Jenkins还有 GitLab CI、GitHub Actions、Azure DevOps、Tekton 等平台都可以完成相同的工作。因此学习天机学堂时不要把重点放在“会不会点 Jenkins 页面”而要理解它背后的思想把重复、标准化、可自动执行的工作交给机器把时间留给开发者去解决真正的业务问题。当理解了这一点再学习 Docker、Harbor、Kubernetes甚至云原生 DevOps你会发现它们其实都围绕着同一个目标——提高软件交付效率和质量。第四章黑马天机学堂完整项目部署实战——从本地开发到测试部署彻底理解企业微服务开发流程前三章我们已经分别介绍了企业开发模式、Docker、Gogs、Jenkins 以及 CI/CD。这一章我们将结合黑马《天机学堂》的项目把这些知识串联起来。当你理解了这一章你会发现Docker、Gogs、Jenkins 从来都不是独立的软件而是企业研发流程中的三个角色。一、为什么黑马课程要搭建这么多环境很多同学第一次做到这一章时都会有这样的疑问为什么只是运行一个 Spring Boot 项目却要安装 Docker、Gogs、Jenkins甚至会觉得「是不是课程为了增加难度故意让我们学习这些工具」其实并不是。黑马课程的目的并不是教你安装软件而是在模拟真实企业研发环境。因为企业开发从来都不是IDEA ↓ Run ↓ 浏览器访问而是开发 ↓ 提交代码 ↓ 自动构建 ↓ 自动部署 ↓ 测试验证 ↓ 发布生产课程只是把企业每天发生的事情浓缩到一个学习项目中。二、天机学堂整体架构在课程中一个完整的系统通常包含前端(Vue) │ ▼ Gateway 网关 │ ┌──────────┬──────────┬──────────┐ ▼ ▼ ▼ 用户服务 课程服务 交易服务 │ │ │ └──────────┴──────────┘ │ ▼ MySQL / Redis / RabbitMQ / MinIO / Nacos这里可以发现真正运行的不只是一个项目。而是一整套微服务。这也是为什么课程推荐使用 Docker。否则每个服务都需要单独安装依赖。整个环境会非常复杂。三、课程为什么先部署 Docker很多初学者容易误解Docker 是部署工具。实际上课程首先部署 Docker是为了统一所有基础服务。例如MySQL Redis RabbitMQ Nacos MinIO这些基础组件。都可以直接通过 Docker 启动。例如docker compose up -d几分钟内整个开发环境全部启动完成。相比传统安装方式优势非常明显。传统安装Docker 部署手动安装多个软件一键启动所有服务容易出现版本冲突所有人版本一致重装系统重新配置重新拉取镜像即可因此Docker 在课程中承担的是统一开发环境。四、为什么还要部署 Gogs当所有服务启动完成以后。开发人员开始编写代码。例如修改CourseService完成之后执行gitadd.gitcommit-m新增课程查询接口gitpush这里代码已经离开本地。进入Gogs很多同学以为流程已经结束。实际上真正的自动化才刚刚开始。五、Webhook整个自动化流程的起点Git Push 完成以后。Gogs 会检测到新的 Commit随后自动发送HTTP Request通知Jenkins这个动作就叫Webhook可以理解成有人提交代码了。 快开始构建。整个过程完全自动。开发人员甚至不用打开 Jenkins。六、Jenkins 自动开始工作收到通知以后。Jenkins立即启动流水线。整个流程如下Git Clone ↓ Maven Clean ↓ Compile ↓ Package ↓ Docker Build ↓ Docker Run ↓ Deploy这也是课程中Jenkins 任务配置的真正目的。并不是为了学习 Jenkins。而是模拟企业自动构建。七、Maven 在这里做了什么很多同学认为Maven就是下载依赖。其实企业中Maven 主要负责源码 ↓ 编译 ↓ 测试 ↓ 打包 ↓ JarJar 包就是Docker Build需要的输入。因此流程一定是Git ↓ Maven ↓ Jar ↓ Docker顺序不能颠倒。八、Docker Build 到底发生了什么假设项目已经打包成功。随后Jenkins执行dockerbuild-ttj-course-service.Docker读取Dockerfile例如FROM eclipse-temurin:17-jre COPY target/*.jar app.jar ENTRYPOINT [java,-jar,/app.jar]随后生成Docker Image镜像中已经包含JavaJar启动命令以后任何服务器运行dockerrun即可启动。真正做到Build OnceRun Anywhere。九、测试环境如何更新镜像构建完成以后。Jenkins继续执行dockerstop停止旧容器。随后dockerrm删除旧容器。最后dockerrun启动最新版本。整个过程几乎不需要人工参与。测试人员刷新浏览器。即可开始测试。十、如果测试失败怎么办很多初学者担心自动部署是不是很危险实际上企业都会保留旧镜像。例如course-service:v1.0 course-service:v1.1 course-service:v1.2如果最新版本出现 Bug。只需要重新启动上一版本镜像。即可快速回滚。这也是 Docker 在企业中非常重要的一点。十一、什么时候部署生产环境这一点不同企业有所不同。通常流程如下开发 ↓ 测试环境 ↓ 测试通过 ↓ 预发布环境 ↓ 人工确认 ↓ 生产环境互联网企业可能一天发布几十次。传统企业可能一周发布一次。但核心流程基本一致。十二、把整个流程串起来如果把前面所有内容连接起来。最终得到的就是开发人员 ↓ IDEA 编码 ↓ Git Commit ↓ Git Push ↓ Gogs ↓ Webhook ↓ Jenkins ↓ Git Clone ↓ Maven Build ↓ 生成 Jar ↓ Docker Build ↓ Docker Image ↓ Docker Run ↓ 测试环境 ↓ 测试通过 ↓ 生产环境这张图。建议作为全文最重要的一张图。十三、企业真实项目通常还会增加什么黑马课程为了方便学习。已经省略了很多组件。实际企业通常还会增加Harbor镜像仓库 SonarQube代码质量 NexusMaven 私服 Kubernetes容器编排 Prometheus监控 Grafana可视化 ELK日志整个流程会更加完整。例如Git ↓ Jenkins ↓ SonarQube ↓ Docker Build ↓ Harbor ↓ Kubernetes ↓ Production因此天机学堂其实只是企业 DevOps 的入门版本。十四、本章总结经过四章的学习我们已经可以完整回答文章开头提出的问题企业为什么要使用 Docker、Gogs、Jenkins答案其实很简单因为它们分别解决了企业研发流程中的三个关键问题工具企业价值Docker保证开发、测试、生产环境一致Gogs提供企业内部 Git 仓库实现团队协作Jenkins自动执行构建、测试、部署流程它们组合在一起就形成了现代企业最基础的CI/CD 自动化研发平台。企业开发流程总结图开发人员 │ IDEA 编写代码 │ ▼ Git Commit / Push │ ▼ Gogs代码托管 │ Webhook 通知 │ ▼ Jenkins 自动构建 │ ┌──────────┼──────────┐ ▼ ▼ ▼ Git Clone Maven Build Unit Test │ ▼ Docker Build Image │ ▼ Docker Run Container │ ▼ 测试环境部署 │ ▼ 测试通过 → 发布生产 我的理解学习《天机学堂》这一章节时不要只关注命令和配置。课程真正想让我们理解的是一种企业研发思维Docker 让环境标准化。Gogs 让团队协作有序。Jenkins 让重复工作自动化。它们共同构成了一条从代码提交到自动部署的流水线。未来当你继续学习 Harbor、Kubernetes、GitLab CI 或 GitHub Actions 时你会发现它们并不是全新的知识而是在这条流水线上的进一步扩展。理解了流程就理解了企业开发理解了企业开发再学习任何 DevOps 工具都会事半功倍。第五章企业真实项目还会有哪些组件在黑马《天机学堂》中我们使用了DockerGogsJenkinsMySQLRedisRabbitMQNacos这已经能够模拟一个基础的企业研发流程。但在真实公司中通常还会增加更多组件。1. Harbor企业镜像仓库在课程中Docker 镜像通常直接在 Jenkins 所在服务器运行。而企业会把镜像上传到 Harbor镜像仓库Harbor企业常用作用统一管理 Docker 镜像优势版本控制、权限管理、快速回滚典型流程Jenkins → Harbor → Kubernetes这样测试环境拉取同一个镜像预发布环境拉取同一个镜像生产环境拉取同一个镜像真正做到Build OnceRun Anywhere一次构建到处运行2. SonarQube代码质量检查Jenkins 在编译之前往往会先调用SonarQube静态代码分析检查重复代码潜在 Bug安全漏洞代码规范如果质量不达标流水线直接终止Fail不会继续部署3. NexusMaven 私服企业内部通常不会每次都从 Maven 中央仓库下载依赖。而是中央仓库Nexus开发者中央仓库 → Nexus → 开发者优势下载更快减少外网依赖可以管理公司内部 Jar 包4. Kubernetes容器编排平台当天机学堂只有几个微服务时docker run可以管理如果有50 个微服务200 个容器多台服务器就需要KubernetesK8s自动调度、扩容、重启、负载均衡第六章容易混淆的概念强烈建议保留很多人认为实际上Docker 是虚拟机Docker 是容器运行平台Docker 是部署工具首先解决环境一致性Gogs 就是 GitGogs 是基于 Git 的代码托管服务Jenkins 是部署工具Jenkins 是自动化流水线平台CI CDCI 是持续集成CD 是持续交付/部署Image ContainerImage 是模板Container 是运行实例Docker Compose DockerCompose 是多容器编排工具总结升级版现在我们终于可以用一句话概括整篇文章黑马《天机学堂》这一章并不是在教你安装 Docker、Gogs、Jenkins而是在模拟企业从开发到测试部署的完整研发流程。核心流程IDEA 编写代码Git Commit / PushGogs 保存代码Jenkins 自动构建Maven 打包Docker 构建镜像启动容器测试环境验证发布生产最终结论工具企业价值Docker保证开发、测试、生产环境一致Gogs提供企业内部 Git 仓库实现团队协作Jenkins自动执行构建、测试、部署流程真正需要理解的不是三个工具而是一条完整的企业研发流水线。当你能够从 代码提交 一直讲到 Docker 部署、测试验证、生产发布 时你对 Docker、Gogs、Jenkins 的理解就已经超过了大部分只会配置命令的初学者。