ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

DevOps工具链完全指南:从CI/CD到监控的选型与落地

2026/8/30 15:46:04 拓冰建站 浏览量
DevOps工具链完全指南:从CI/CD到监控的选型与落地 在 DevOps 落地过程中很多团队都会遇到同一个困惑工具太多了。代码托管有 GitLab、GitHubCI 有 Jenkins、GitHub Actions配置管理有 Ansible、Terraform监控告警有 Prometheus、Grafana安全扫描又有 SonarQube、Trivy……光是听懂这些名字就够累的更别提把它们串成一条完整的流水线。这篇文章会把 DevOps 工具链拆成几个能力域按“这个工具解决什么问题、什么时候选它、它和邻居工具怎么配合”的思路过一遍。无论你是在搭建个人项目流水线还是给团队规划 DevOps 平台都能从中找到一条清晰的选择路径。1. 先理清概念DevOps 工具链到底是什么1.1 为什么 DevOps 离不开工具链DevOps 是一种软件交付理念强调开发、测试、运维之间的协作目标是让软件从提交代码到部署上线这一整条链路更快、更稳、更可重复。理念本身不依赖工具但理念落地必须依赖工具。原因很简单没有工具人是做不到“每天发布几十次”的。举一个最直观的例子一个小团队如果靠手工打包、手工上传服务器、手工执行重启脚本一次发布可能需要三十分钟而且每次操作都有出错的可能。引入 CI持续集成工具后代码提交会自动触发编译、测试、打包引入 CD持续部署工具后构建产物会自动部署到测试环境甚至生产环境。这个过程中“人的手工操作”被工具替代交付效率才会真正提升。所以DevOps 工具链并不是一堆软件的集合而是把软件交付流程拆成多个环节每个环节用合适的工具去承接。1.2 DevOps 工具链覆盖的八个环节不同团队对工具链的划分略有差异但核心能力域基本一致能力域解决什么问题典型工具项目管理需求和任务追踪Jira、禅道、Trello代码托管源码存储、分支管理、代码评审GitLab、GitHub、Gitea持续集成/持续交付自动构建、测试、部署Jenkins、GitLab CI、GitHub Actions配置管理服务器环境标准化Ansible、SaltStack、Chef基础设施即代码云资源编排管理Terraform、Pulumi、CloudFormation容器化与编排应用打包、运行、扩缩容Docker、Kubernetes、Helm监控与可观测性指标、日志、链路追踪Prometheus、Grafana、ELK、SkyWalking安全与质量代码质量、漏洞扫描、制品管理SonarQube、Trivy、Harbor这篇文章会按环节逐个展开。你可以把文章当作一张“DevOps 工具地图”需要哪个环节时直接定位到对应章节。2. 项目管理与协作工具项目管理工具是 DevOps 流程的入口它记录需求、任务、缺陷并和代码提交、发布记录产生关联。2.1 Jira企业级项目管理的常青树Jira 是 Atlassian 公司的产品在软件研发团队中普及率很高。它支持 Scrum 和看板两种主流研发模式可以创建 Epic大型需求、Story用户故事、Task任务、Bug缺陷等不同类型的问题。Jira 的核心价值在于可定制性。你可以按团队流程自定义工作流例如“待处理 → 开发中 → 代码评审 → 测试中 → 已验收 → 已关闭”。开发者在提交代码时可以在提交信息中带上问题编号例如git commit -m JIRA-123 修复用户登录超时问题这样代码提交和 Jira 问题就会建立关联后续追溯变更原因时非常方便。2.2 禅道国内团队常用的研发管理工具禅道是比较典型的国产项目管理工具集产品管理、项目管理、测试管理、缺陷管理于一体。对于国内中小团队禅道的学习成本比 Jira 低部署也简单。2.3 轻量选择Trello 与在线协作文档如果团队很小不想维护重型管理系统Trello 的看板式管理足够用。它用“列表 卡片”组织任务简单直观。不过它缺少完整的研发流程管理能力比如迭代规划、测试用例管理所以更适合个人任务管理或团队项目起步阶段。项目管理工具选择建议大型团队、复杂流程选 Jira。国内团队、需要内置测试管理选禅道。个人或小团队、追求轻量选 Trello。已经深度使用 GitLab 并且不想额外维护项目管理系统时可以用 GitLab Issue 模块顶上。需要提醒的是项目管理工具只是辅助真正重要的是团队定义的研发流程是否清晰。工具不能自动解决流程混乱问题。3. 代码托管与版本控制工具版本控制是 DevOps 的基石。没有版本控制后面的 CI/CD、自动化测试就无从谈起。3.1 Git所有现代代码托管工具的基础Git 是目前使用最广泛的分布式版本控制工具由 Linux 之父 Linus Torvalds 开发。和 SVN 这类集中式版本控制不同Git 的每个本地仓库都包含完整历史记录离线也能提交。Git 的基本操作包括# 克隆远程仓库 git clone gitgithub.com:username/project.git # 创建并切换到新分支 git checkout -b feature/login # 查看文件状态 git status # 添加文件到暂存区 git add . # 提交代码 git commit -m feat: 增加用户登录功能 # 推送远程分支 git push origin feature/login日常开发中分支管理策略直接影响团队协作效率。目前主流的策略有GitHub Flow所有开发都基于 master 分支拉出功能分支合并后立即部署。适合持续发布、发布频率高的项目。Git Flow区分 master、develop、feature、release、hotfix 分支适合有固定发布周期的项目。GitLab Flow结合环境维度增加 pre-production、production 分支适合兼顾发布节奏和环境管理的场景。3.2 GitLab一体化 DevOps 平台GitLab 是一个很有意思的选手它不只是一个代码托管平台还内置了 CI/CD、安全扫描、容器镜像仓库、依赖管理等功能。很多团队采用 GitLab 的初衷只是做代码托管后来慢慢把 CI/CD 也迁过来做成一套轻量 DevOps 平台。GitLab 支持三种使用形态GitLab.com官方 SaaS、自托管社区版CE、自托管企业版EE。中小团队用社区版就够企业版主要在权限管控、安全合规方面有增强。3.3 GitHub开源社区最重要的代码托管平台GitHub 是全球最大的代码托管平台几乎所有的知名开源项目都托管在这里。GitHub 提供的 Pull RequestPR机制是目前业界公认比较顺畅的代码评审流程。GitHub Actions 让 GitHub 具备了直接执行 CI/CD 的能力。你可以在仓库中创建.github/workflows/ci.yml文件定义流水线name: CI on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Set up JDK 17 uses: actions/setup-javav4 with: java-version: 17 - name: Build with Maven run: mvn -B package --no-transfer-progress这段配置的意思是当 main 分支收到 push 或 pull request 事件时自动在 Ubuntu 环境上运行一次 Maven 构建。不需要额外安装 Jenkins一个 YAML 文件就定义了构建流程。3.4 Gitea极轻量的自托管方案Gitea 是一个用 Go 编写的轻量 Git 服务单个二进制文件就能运行内存占用只有几百 MB非常适合小团队内网部署或个人使用。它支持仓库管理、Issue、Pull Request、Webhook 等基础功能也可以通过内置的 Actions 模块实现 CI/CD。代码托管工具选型总结需要全功能 DevOps 平台、环境自建GitLab。参与开源、使用 GitHub 生态GitHub。资源有限、轻量部署Gitea。只做代码托管、不想转换工作习惯保留原有 SVN 也可以但建议慢慢迁移到 Git。4. 持续集成与持续交付CI/CDCI/CD 是 DevOps 工具链中最核心的部分。CIContinuous Integration指代码提交后自动触发构建和测试保证每次提交的代码是可集成的CD 分两层Continuous Delivery持续交付指制品可以随时部署Continuous Deployment持续部署指通过测试后自动部署到生产环境。4.1 Jenkins插件生态最丰富的 CI/CD 系统Jenkins 是老牌 CI/CD 工具由 Java 开发核心特性是插件体系。目前有上千款插件覆盖代码获取、构建、测试、部署、通知等各个场景。Jenkins Pipeline 用 Groovy 语言编写支持声明式语法。下面是一个简单的声明式 Pipelinepipeline { agent any stages { stage(Checkout) { steps { git url: https://github.com/example/demo.git } } stage(Build) { steps { sh mvn clean package } } stage(Test) { steps { sh mvn test } } stage(Deploy) { steps { sh ./deploy.sh } } } post { failure { emailext body: Build failed, please check., subject: CI FAILED } } }这个 Pipeline 定义了四个阶段拉取代码、构建、测试、部署。如果构建失败会自动发送邮件通知。Jenkins 最大的优势是灵活几乎任何环境都能接入。但它也有代价维护成本高需要安装插件、管理节点、处理并发构建队列。对团队来说是“上限很高、下限也低”的选择。4.2 GitLab CI与代码仓库深度集成GitLab CI 是 GitLab 内置的 CI/CD 模块不需要额外部署服务器。使用方式是在项目根目录创建.gitlab-ci.yml定义流水线stages: - build - test - deploy build-job: stage: build script: - echo 编译应用 - mvn clean package test-job: stage: test script: - echo 运行测试 - mvn test deploy-job: stage: deploy script: - echo 部署到测试服务器 - scp target/app.jar userserver:/opt/app/ only: - mainGitLab CI 的优势是和代码仓库在一个平台里配置简单权限模型和代码仓库一致。缺点是 Runner执行构建的机器需要自己维护大型项目对 Runner 的调度策略需要额外设计。4.3 GitHub Actions开源项目的事实标准GitHub Actions 的配置方式前面已经展示过。它在生态集成上做得很好你可以直接在 Marketplace 中找到各种现成的 Action例如部署到云服务器、发布 Docker 镜像、发送钉钉通知等。GitHub Actions 适合托管在 GitHub 上的项目。如果是自建 GitLab可以用 GitLab CI如果项目在 GitHub优先考虑 Actions不需要额外部署 Jenkins。4.4 Argo CD面向 Kubernetes 的持续交付工具当应用部署到 Kubernetes 集群时传统 CI/CD 工具直接执行kubectl apply的做法不够可靠原因在于环境差异、版本回滚、权限管理都比较难控制。Argo CD 采用 GitOps 模式Git 仓库是应用状态的唯一事实来源工具监听 Git 仓库变化自动把集群状态同步到 Git 中描述的状态。Argo CD 的使用思路将 Kubernetes 的 YAML 清单或 Helm Chart 保存到 Git 仓库。在 Argo CD 中创建一个 Application关联 Git 仓库和 Kubernetes 集群。当 Git 仓库内容变更时Argo CD 自动同步部署到集群。这种模式的优点是部署过程可审计、可回滚任何集群状态变化都可以从 Git 历史中找到来源。CI/CD 工具选型建议已经使用 GitLab优先用 GitLab CI。项目托管在 GitHub优先用 GitHub Actions。需要高度自定义流水线、公司已有 Jenkins 基础设施继续用 Jenkins。Kubernetes 部署场景引入 Argo CD 做持续交付层。5. 配置管理与基础设施即代码早期运维通过手工修改服务器配置文件来管理环境这种方式在服务器数量少时可行服务器一多就出问题漏改、误改、配置漂移。配置管理工具和 IaC 工具就是解决这些问题的。5.1 Ansible无代理的自动化运维工具Ansible 是当前使用最广泛的配置管理工具之一。它最大的特点是无需在目标机器上安装客户端只需要通过 SSH 连接即可执行任务。Ansible 使用 YAML 编写 Playbook下面是一个安装并启动 Nginx 的示例--- - name: 安装并启动 Nginx hosts: webservers become: yes tasks: - name: 安装 Nginx apt: name: nginx state: present - name: 启动 Nginx 服务 systemd: name: nginx state: started enabled: yeshosts: webservers指定目标主机组become: yes表示使用 sudo 权限执行。这种声明式写法的好处是幂等——重复执行同一份 Playbook结果一致不会因为重复运行产生副作用。Ansible 适合做服务器的软件安装、服务配置、环境标准化。执行命令很简单ansible-playbook -i inventory.ini deploy_nginx.yml5.2 Terraform云资源编排工具Ansible 处理的是“服务器内部的状态”Terraform 处理的是“云平台上的资源”。Terraform 用 HCLHashiCorp Configuration Language语言描述基础设施比如创建一台云服务器、创建一个负载均衡器、创建一个数据库实例。下面是一个使用 Terraform 创建阿里云 ECS 的简化示例provider alicloud { region cn-hangzhou } resource alicloud_instance web { instance_name devops-web image_id ubuntu_20_04_x64_20G_alibase_20230815.vhd instance_type ecs.c6.large security_groups [alicloud_security_group.web.id] } resource alicloud_security_group web { name web-sg description Web server security group }执行terraform init初始化terraform plan预览变更terraform apply应用变更。Terraform 会维护状态文件记录当前已创建的云资源后续增删改都会基于状态文件执行。Terraform 适合管理整个云上环境包括 VPC、交换机、安全组、云服务器、负载均衡等。相比在控制台手动点击创建Terraform 的优势是变更可评审、资源可复用、环境可复制。5.3 配置管理和 IaC 的分工很多初学者会把 Ansible 和 Terraform 混在一起实际上它们解决不同层面的问题工具管理对象典型场景Ansible服务器内的软件、配置、服务服务器初始化、应用部署Terraform云平台上的资源创建 VPC、云服务器、数据库Pulumi云平台上的资源使用通用编程语言团队更熟悉 TypeScript/Python实际项目里两者可以组合使用Terraform 负责创建云服务器Ansible 负责在服务器上安装软件、部署应用。6. 容器化与 Kubernetes 生态容器技术是目前应用交付的主流方式。它解决的核心问题是环境一致性问题开发环境能跑、测试环境能跑、生产环境也应该能跑因为运行的是同一个镜像。6.1 Docker镜像构建与容器运行的基础Docker 提供了一种标准化的打包方式把应用及其依赖、配置、启动命令打包成一个镜像。下面是一个简单的 Java 应用 DockerfileFROM openjdk:17-jdk-slim WORKDIR /app COPY target/demo-app.jar /app/demo-app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, demo-app.jar]构建镜像并运行docker build -t demo-app:1.0.0 . docker run -d -p 8080:8080 --name demo demo-app:1.0.0镜像一旦构建就可以在任何装有 Docker 的机器上以一致的方式运行。这个特性让“环境不一致”问题从源头被消除。6.2 Kubernetes容器编排平台当容器数量多到一台机器放不下时就需要引入 Kubernetes。Kubernetes 负责容器的调度、扩展、故障恢复、服务发现等。它把一组服务器抽象成一个资源池应用只需要声明“我要运行 3 个实例”Kubernetes 会保证这 3 个实例始终可用。Kubernetes 的使用门槛比较高涉及的概念包括 Pod、Deployment、Service、Ingress、ConfigMap、Secret 等。下面是一个简单的 Deployment 配置apiVersion: apps/v1 kind: Deployment metadata: name: demo-app spec: replicas: 3 selector: matchLabels: app: demo-app template: metadata: labels: app: demo-app spec: containers: - name: demo-app image: registry.example.com/demo-app:1.0.0 ports: - containerPort: 8080通过kubectl apply -f deployment.yaml应用到集群后Kubernetes 会创建 3 个 Pod 副本并在某个 Pod 异常退出时自动重启。6.3 HelmKubernetes 应用的包管理器一个完整的微服务应用通常包含 Deployment、Service、ConfigMap、Secret、Ingress 等多个 YAML 文件直接维护这些文件非常痛苦。Helm 把这些清单打包成一个 Chart通过模板变量实现不同环境复用。安装一个 Charthelm repo add bitnami https://charts.bitnami.com/bitnami helm install my-mysql bitnami/mysql --set auth.rootPasswordsecret对于自研应用可以使用helm create my-chart创建模板结构然后修改 values.yaml 定制化。6.4 Portainer轻量容器管理界面如果团队还没有全面切换到 Kubernetes只想管理 Docker 环境Portainer 是一个很合适的工具。它提供 Web 界面可以查看容器状态、查看日志、进入容器终端、管理镜像和网络。对于中小型项目来说Portainer 够用且容易上手。容器工具链选型参考单机应用部署Docker Compose 足够。多机、需要弹性伸缩上 Kubernetes。不想直接维护 Kubernetes 原生 YAML用 Helm 管理。想节省运维成本可以用托管 Kubernetes 服务。7. 监控、日志与可观测性应用上线只是开始真正的挑战是出了问题你能多快知道多快定位。这部分靠的是监控和可观测性工具。7.1 Prometheus指标监控的标准组件Prometheus 是目前云原生领域的事实标准监控系统。它通过拉取方式采集指标支持多维数据模型和 PromQL 查询语言。采集目标通过配置文件定义scrape_configs: - job_name: demo-app static_configs: - targets: [localhost:8080]Java 应用可以通过引入 micrometer-registry-prometheus 依赖暴露/actuator/prometheus端点Prometheus 从这个端点采集 JVM 内存、线程数、HTTP 请求耗时等指标。7.2 Grafana可视化监控面板Prometheus 采集数据后需要一个展示界面Grafana 是目前最常用的可视化平台。它支持连接 Prometheus、Loki、Elasticsearch、MySQL 等多种数据源可以创建各种图表和仪表盘。Grafana 的使用流程在数据源配置中添加 Prometheus 地址。创建一个 Dashboard。添加 Panel通过 PromQL 查询指标。例如查询 JVM 内存使用量jvm_memory_used_bytes{areaheap}7.3 ELK / Loki日志聚合日志是排查问题的第一手资料。ELK 是 Elasticsearch、Logstash、Kibana 的组合Logstash 负责收集和解析日志Elasticsearch 负责存储和索引Kibana 负责展示和搜索。这套方案功能强大但组件较多、资源占用高。如果团队已经使用 Grafana可以优先考虑 Loki。Loki 是 Grafana Labs 推出的轻量日志系统设计理念是“只索引日志的元数据不索引日志内容”因此资源占用比 ELK 低很多。Grafana 中可以同时展示 Prometheus 指标和 Loki 日志排障体验更连贯。7.4 OpenTelemetry 与链路追踪微服务架构中一个请求可能经过多个服务。排查性能问题时需要知道请求在各服务之间是怎么调用的、耗时花在哪个环节。链路追踪工具解决的就是这个问题。OpenTelemetry 是 CNCF 下的可观测性标准提供统一的 API 和 SDK 来采集指标、日志、链路数据。后端可以对接 Jaeger、SkyWalking 等链路追踪系统。Spring Cloud 项目接入 SkyWalking 的方式很简单下载 SkyWalking Agent启动时指定 agent 路径即可。java -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_namedemo-app -jar demo-app.jar可观测性工具选型参考中小团队Prometheus Grafana Loki。已有 Elasticsearch 基础设施保留 ELK。微服务链路追踪SkyWalking 或 Jaeger OpenTelemetry。8. 制品管理与安全质量工具DevOps 不止是“能上线”还要保证“上线的东西是安全的、质量合格的”。8.1 SonarQube代码质量与静态扫描SonarQube 是一款代码质量管理平台支持多语言可以检测代码中的 bug、漏洞、坏味道、重复代码、测试覆盖率等问题。在 Maven 项目中执行扫描mvn clean verify sonar:sonar \ -Dsonar.projectKeydemo-app \ -Dsonar.host.urlhttp://sonarqube.example.com \ -Dsonar.loginyour_token扫描结果会展示在 SonarQube 界面中包含问题等级和修复建议。建议把质量门禁接入 CI 流水线质量不达标就不允许合并代码。8.2 Trivy容器镜像漏洞扫描Trivy 是一个开源漏洞扫描器可以扫描容器镜像、文件系统、Git 仓库中的已知漏洞。使用方式很简单trivy image demo-app:1.0.0输出结果会列出漏洞的严重等级、受影响的软件包版本和处理建议。把 Trivy 集成到 CI 流水线中在镜像推送前自动扫描可以避免带漏洞的镜像流入生产环境。8.3 Harbor企业级镜像仓库Harbor 是一个开源的企业级容器镜像仓库支持镜像复制、访问控制、漏洞扫描、审计日志等功能。相比把镜像直接推到 Docker Hub私有化部署 Harbor 更符合企业安全规范。推送镜像到 Harbordocker tag demo-app:1.0.0 harbor.example.com/library/demo-app:1.0.0 docker push harbor.example.com/library/demo-app:1.0.09. 工具选型与落地建议9.1 不要追求“全家桶”很多团队在规划 DevOps 平台时会把所有主流工具都部署一遍结果平台搭好了没人用维护成本却一直上涨。工具的价值在于解决实际问题不在于数量。选型时可以问自己三个问题当前交付流程中瓶颈在哪是编译慢、部署慢、还是故障发现慢团队的维护能力能否跟上这个工具例如 Jenkins 插件升级、Kubernetes 集群维护都需要持续投入。工具之间能否形成最小闭环例如 GitLab 本身可以完成 代码托管 CI/CD先跑通这条路再逐步加入监控、安全扫描。9.2 推荐的最小闭环方案对于中小团队可以优先考虑下面这套组合能力推荐方案原因代码托管 CI/CDGitLab一体化少维护一套系统应用运行环境Docker Compose 起步需要时上 Kubernetes降低初期门槛服务器配置管理Ansible无 Agent上手快监控与日志Prometheus Grafana Loki统一在 Grafana 中查看镜像仓库Harbor私有化部署安全可控质量扫描SonarQube Trivy质量和安全双保障这套方案的优点是每个工具都是各自领域的主流选择社区资料丰富工具之间可以串联成完整链路运维成本相对可控。9.3 平台化工具的演进方向当团队规模变大、项目数量增多后直接操作多个独立工具会变得繁琐。此时可以关注一些 DevOps 平台化产品例如 GitLab 完整版本身就是平台化形态。也可以基于 Backstage 这类开发者门户工具把服务信息、CI/CD 状态、监控链接都集中到一个门户中减少开发者在多个平台之间切换的成本。10. 常见问题与排查思路10.1 CI 流水线中构建超时问题现象常见原因解决思路构建任务长时间不结束依赖下载慢、测试用例阻塞配置国内镜像源增加构建超时时间检查测试代码并发构建互相抢占资源Runner 节点不足或配置超卖限制并发数增加 Runner 节点设置资源配额构建超时最常见的根源是依赖下载慢。Maven 项目可以配置阿里云镜像加速mirror idaliyun/id mirrorOfcentral/mirrorOf urlhttps://maven.aliyun.com/repository/public/url /mirror10.2 容器部署后服务无法访问问题现象常见原因解决思路容器已启动但外部访问失败端口映射错误、防火墙未放行检查docker ps的端口映射检查安全组规则Kubernetes Pod 重启健康检查失败、资源不足查看kubectl describe pod获取失败事件排查时先看容器日志docker logs --tail 100 container_idKubernetes 环境使用kubectl logs --tail 100 pod_name10.3 监控面板上没有数据问题现象常见原因解决思路Grafana 面板显示 No data指标名写错、数据源连接失败在 Prometheus 中用 PromQL 验证指标是否存在Prometheus 采集不到目标网络不通、端口未暴露查看 Prometheus Target 状态页Prometheus 的 Targets 页面/targets是排查采集问题的第一入口它会显示每个采集目标的状态和最后一次抓取报错。11. 工程实践与落地经验11.1 流水线设计要“先窄后宽”第一版流水线不要设计得太复杂先实现“代码提交 → 自动构建 → 自动部署测试环境”这条主干。跑通之后再逐步加入自动化测试、质量扫描、安全扫描、生产环境部署等环节。流水线本身也是一个持续演进的过程不要试图一步到位。11.2 镜像版本必须不可变给镜像打标签时尽量避免使用latest因为latest是可变的同一时间不同机器上可能拉取到不同版本排障时会非常混乱。推荐使用 Git 提交号或语义化版本号作为镜像标签docker build -t demo-app:1.0.0-$(git rev-parse --short HEAD) .11.3 密钥必须走专用管理工具不要在 CI 配置文件中写入数据库密码、云平台 AccessKey 等敏感信息。使用 GitLab CI 的变量功能、GitHub Actions 的 Secrets 功能或者引入 Vault 这类专用密钥管理工具。密钥一旦泄露影响范围可能是整个云环境。11.4 TCP 备份与回滚意识虽然工具链会自动化和标准化流程但生产环境变更仍然需要以下原则变更前做好备份、变更后验证结果、准备回滚方案。涉及数据库变更时务必在测试环境完整验证并备份数据避免执行不可恢复的删除或更新操作。11.5 使用建议DevOps 工具链的学习路径大致如下先掌握 Git 和 Linux 基础操作这是所有工具的地基。独立部署一个 GitLab体验从代码提交到 CI/CD 的完整流程。使用 Docker 容器化部署一个自己写的应用。学习 Ansible把服务器环境配置自动化。再逐步引入监控、日志、安全扫描工具。最后根据业务规模决定是否进入 Kubernetes 和 Argo CD。如果本篇文章对你有帮助可以先收藏等真正动手搭建 DevOps 工具链时再对照查阅。遇到具体工具的报错也可以先按这篇文章中的排查思路走一遍大部分问题都能定位到原因。动手搭建一遍比看十遍工具介绍都更有用。