一、什么是 DevOps

DevOps = Development (开发) + Operations (运维),不是一个工具、不是一门技术、不是一款软件,是一套理念、方法论、工作文化与实践集合,目标是打破开发团队和运维团队之间的壁垒,实现软件快速、稳定、持续、高质量交付。

传统模式痛点

传统 IT 分工:

  • 开发 (Dev):负责写代码、实现功能,希望快速上新功能、频繁发版
  • 运维 (Ops):负责服务器、部署、稳定性、故障,害怕频繁上线,越稳定越好

双方目标天然冲突:开发要快,运维要稳,形成著名的墙(Wall of Confusion)

开发写完丢给运维,运维部署环境各种报错,互相甩锅、上线慢、故障多、迭代周期长

DevOps 核心思想:开发、测试、运维、产品紧密协作,整条软件交付链路打通,共同对线上业务负责

二、DevOps 核心理念

  1. 文化 Culture 最重要一层,优先改变思维。打破部门墙、责任共担、不要 “我的代码、你的服务器”,所有人共同对最终线上结果负责。
  2. 自动化 Automation 尽可能把重复工作交给工具:构建、测试、打包、部署、回滚、监控自动化,减少人工操作失误。
  3. 精益 Lean 消除流程浪费,缩短交付周期,小步快跑,不要一次性开发超大版本再上线。
  4. 度量 Measurement 一切可量化:发布频率、故障恢复时长、失败率、部署耗时,用数据驱动改进。
  5. 共享 Sharing 文档、经验、故障复盘、技术方案全员共享,知识透明。

口诀:文化先行、工具落地、流程保障、数据度量、持续优化

三、DevOps 八大能力域

CALMS 是 DevOps 最经典定义,5 个维度

  • C‑Culture 文化:协作、无指责故障复盘、共同担责
  • A‑Automation 自动化:交付流水线自动化
  • L‑Lean 精益:减少等待、减少批量、小增量交付
  • M‑Measurement 度量指标:收集交付、质量、运维数据
  • S‑Sharing 共享:信息透明,知识共享

四、DevOps 完整生命周期

很多人误区:DevOps ≠ CI/CD CI/CD 是 DevOps 最重要工具实践,DevOps 范围更大,覆盖软件全生命周期 完整 DevOps 闭环:规划 → 开发 → 构建 → 测试 → 发布 → 部署 → 运维 → 监控 → 反馈,循环迭代

1. 规划 Plan

产品需求拆分、任务排期、迭代规划 工具:Jira、Trello、飞书项目、禅道

DevOps 提倡小需求、短迭代,避免大版本

2. 开发 Develop

程序员编码、版本控制

  • 代码管理:Git
  • 分支策略:GitFlow / TrunkBased (主干开发,DevOps 最推荐) 主干开发:所有人日常合并到主分支,通过功能开关控制功能是否启用,避免长期独立分支

3. 持续集成 CI

CI:持续集成 含义:多人开发,频繁(每天多次)把自己代码合并到主干仓库,自动做构建 + 单元测试 解决问题:很久才合并一次代码,最后爆发大量代码冲突 流程:代码提交 → 触发流水线 → 拉取代码 → 编译打包 → 自动单元测试 主流 CI 工具:Jenkins、GitLab‑CI、GitHub Actions、Azure DevOps、Tekton

4. 持续测试 CT

自动化测试嵌入流水线

  • 单元测试、接口自动化、UI 自动化、性能测试、安全扫描 不等到最后人工全量测试,代码变更就立刻做自动化校验 工具:JUnit、Postman、Selenium、JMeter、SonarQube (代码质量扫描)

5. 持续交付 CD

CD 第一层含义:持续交付 Continuous Delivery 含义:代码经过 CI + 自动化测试之后,随时可以一键部署到生产环境 代码包时刻处于可上线状态,但是否点发布按钮由人手动决定 持续交付 = 产出随时可部署的软件包

6. 持续部署 CD

CD 第二层含义:持续部署 Continuous Deployment 持续交付的进阶版:全部自动化,通过流水线自动部署生产,不需要人工点击 只有质量足够高、自动化测试覆盖率足够高的团队敢做持续部署

关系总结 CI < 持续交付 < 持续部署

  • CI:代码合并自动构建测试
  • 持续交付:包已经准备好,可随时上线(人工确认上线)
  • 持续部署:全自动直接上生产

7. 运维 Operate

服务上线之后的日常运维工作 环境管理、配置管理、资源调度 工具:Docker (容器打包)、K8s (Kubernetes 容器编排)、Ansible

8. 持续监控 & 反馈 Continuous Monitoring

线上运行状态实时监控,并且把问题快速反馈回开发 监控 4 大类

  1. 基础设施监控:CPU、内存、磁盘
  2. 应用性能监控 APM:接口耗时、异常、报错
  3. 日志监控:程序日志
  4. 用户体验监控 工具:Prometheus+Grafana、ELK (Elasticsearch+Logstash+Kibana)、SkyWalking 反馈闭环:线上出问题 → 告警 → 快速定位 → 开发修复 → 再次走流水线发布

五、DevOps 常用技术栈

阶段代表工具
需求 & 项目管理Jira、禅道、TAPD
代码仓库Git、Gitee、GitLab、GitHub
CI 流水线Jenkins、GitLab CI、Github Actions
代码质量SonarQube
制品仓库 (存包)Nexus、Harbor (镜像仓库)
容器打包Docker
编排部署K8s(Kubernetes)
配置管理Ansible
监控告警Prometheus、Grafana、AlertManager
日志收集ELK、Loki
APM 链路追踪SkyWalking、Pinpoint

工具只是载体!没有上面 DevOps 文化,买再多工具也做不成 DevOps

六、4 个经典部署策略

用来保障频繁发布同时保证稳定性

  1. 蓝绿发布 Blue‑Green 线上同时运行两套完全一样环境:蓝 (旧版本)、绿 (新版本)。新版本全部部署在绿环境,验证没问题,流量一次性全部切过去。 优点:回滚极快;缺点:双倍资源成本
  2. 金丝雀发布(灰度发布 Canary) 先切一小部分流量到新版本,观察一段时间,没问题再逐步全量放量 风险最低,企业最常用
  3. 滚动发布 Rolling Update 一台一台服务器逐步升级版本,不停机。K8s 默认策略
  4. 功能开关 Feature Toggle 代码提前合并上线,功能默认关闭;后台配置打开功能,不用重新发版。主干开发必备技术

七、DevOps 和敏捷、SRE 的区别

  1. 敏捷 Agile:偏向开发侧,解决需求迭代、快速交付软件;敏捷只管怎么快速做出软件
  2. DevOps:打通开发 + 运维整条链路,解决软件怎么稳定快速上线、运维;敏捷是 DevOps 基础
  3. SRE 站点可靠性工程:谷歌提出,偏向运维侧,用软件工程方式做运维,保障线上稳定性;SRE 可以看作 DevOps 运维方向的高级实践

简单一句话:

敏捷:怎么更快做出来 DevOps:怎么做出来并且安全快速上线跑起来 SRE:上线后怎么长期稳定运行

八、DevOps 带来的收益

  1. 缩短版本交付周期,从按月发布 → 按周 / 按天甚至一天多次发布
  2. 减少上线故障,自动化提前发现问题
  3. 故障恢复速度大幅提升
  4. 开发运维矛盾减少,沟通成本下降
  5. 线上稳定性提升,业务响应速度变快

更多推荐