本文档全面概述了 DevOps 实践和持续集成/持续交付 (CI/CD) 流水线。它涵盖了构成现代软件交付基础的核心概念、工具、实现模式和最佳实践。本指南侧重于 DevOps 和 CI/CD 流水线的技术方面、容器化技术、部署策略以及使组织能够更快、更可靠地交付软件的监控方法。
有关云基础设施和分布式系统(通常是 DevOps 实践的补充)的信息,请参阅 云和分布式系统。有关 DevOps 的安全方面(DevSecOps),请参阅 安全系统和实践。
DevOps 是一套实践,它结合了软件开发(Dev)和 IT 运营(Ops),以缩短系统开发生命周期,同时频繁可靠地交付功能、修复和更新。主要目标是缩小开发和运营团队之间的差距,从而更快地交付高质量软件。
来源: README.md369-396
CI/CD 代表两个相互关联的实践:持续集成和持续交付/部署。
精心设计的 CI/CD 系统包含几个关键组件,它们协同工作以自动化软件交付过程。
Docker 是一个平台,它将应用程序及其依赖项打包到容器中,以便在不同环境中一致地部署。
来源: README.md380 README.md382 README.md395
来源: README.md380
Kubernetes (K8s) 是一个开源的容器编排平台,可自动化容器化应用程序的部署、扩展和管理。
来源: README.md375 README.md376-378 README.md394
Kubernetes 提供不同的服务类型,用于在集群内部和外部公开应用程序。
来源: README.md375
Kubernetes 设计模式为容器编排中的常见挑战提供了解决方案。
来源: README.md370
不同的部署策略在风险、复杂性和停机时间之间提供了各种权衡。
来源: README.md384 README.md386 README.md389
Terraform 是一个开源的 IaC 工具,支持跨多个云提供商进行声明式基础架构配置。
来源: README.md387
有效的监控、日志记录和指标收集对于维护和故障排除生产系统至关重要。
来源: README.md390 README.md391 README.md375
来源: README.md373
Netflix 拥有复杂的 CI/CD 流水线,每天支持数千次部署。
Uber 使用高度自动化的 CI/CD 流水线来管理其微服务架构。
| 方面 | DevOps | 站点可靠性工程 (SRE) | 平台工程 |
|---|---|---|---|
| 重点 | 打破开发和运营之间的孤岛 | 将软件工程应用于运营 | 创建自助开发者平台 |
| 源 | 行业运动 | 近期行业演变 | |
| 关键指标 | 部署频率、交付周期、平均修复时间 (MTTR)、变更失败率 | SLI、SLO、错误预算 | 开发者生产力、平台采用率 |
| 主要实践 | CI/CD、IaC、监控 | 自动化、可靠性、减少重复劳动 | 内部开发者平台、API、抽象 |
| 团队结构 | 跨职能团队 | 专业的 SRE 团队 | 为开发者提供服务的平台团队 |
来源: README.md388
| 方面 | DevOps | NoOps |
|---|---|---|
| 定义 | Dev与Ops的协作 | 消除对专用运维的需求 |
| 基础设施 | 由协作团队通过 IaC 进行管理 | 完全由云提供商/平台管理 |
| 运维工作 | 简化但仍然存在 | 自动化或抽象化 |
| 采用 | 行业内广泛采用 | 新兴,尤其是在无服务器架构中 |
| 技术栈 | 容器、IaC、CI/CD 工具 | 无服务器、PaaS、BaaS |
来源: README.md392
Kubernetes 拥有丰富的工具生态系统,可以增强其功能
来源: README.md377-378
DevOps 和 CI/CD 已经改变了组织开发、部署和维护软件的方式。通过自动化软件交付流程以及打破开发和运维团队之间的壁垒,DevOps 实践能够实现更快、更可靠的软件交付。Docker、Kubernetes 和各种 CI/CD 工具等关键技术促进了这一转型,而监控、日志记录和部署策略等实践则确保了软件能够以最小的风险和最大的效率进行交付。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(b28380)