DevOps简介
目录
1、概念
2、解决的痛点
3、核心理念:CALMS 模型
4、DevOps 的生命周期
5、 常见的 DevOps 工具链
1、概念
DevOps不是某个具体职位,而是一套文化、实践和工具的集合,旨在缩短系统开发生命周期,提供高质量的持续交付。
它试图打破开发团队(追求快速变更)和运维团队(追求系统稳定)之间传统的壁垒和矛盾。
2、解决的痛点
在 DevOps 出现之前,大多数企业采用传统的“瀑布模型”或类似的孤岛式工作方式:
-
开发与运维的目标冲突: 开发团队的目标是快速推出新功能,而运维团队的目标是确保生产环境的稳定。这种冲突常常导致互相指责。
-
发布周期漫长: 从开发完成到最终上线,需要经过复杂的集成、测试和部署流程,耗时数周甚至数月。
-
手动操作易错: 部署过程大量依赖手动操作,容易出错,且难以复现。
-
问题反馈滞后: 问题只有在部署到生产环境后才会被发现,此时修复成本极高。
-
效率低下: 团队将大量时间花费在等待、排查部署问题等非增值活动上。
3、核心理念:CALMS 模型
CALMS 是一个广泛用于评估和实现 DevOps 文化的框架。
-
C - Culture(文化): 这是 DevOps 的基石。强调共享责任、打破部门墙、信任与协作。开发需要关心代码的运行状况,运维需要提前参与设计阶段。
-
A - Automation(自动化): 凡是重复性的工作,都应自动化。 这是实现 DevOps 速度与可靠性的关键技术手段。自动化测试、自动化部署、自动化监控等。
-
L - Lean(精益): 借鉴精益制造思想,关注价值流动,减少浪费(如等待时间、不必要的流程)。追求小批量、持续不断地交付价值。
-
M - Measurement(度量): 用数据和指标驱动决策和改进。常见的指标包括:部署频率、变更前置时间、变更失败率、平均恢复时间(MTTR)。没有度量,就无法改进。
-
S - Sharing(分享): 鼓励知识、工具和经验的透明共享。避免信息孤岛,建立共同的学习型组织。
4、DevOps 的生命周期
DevOps 实践通常贯穿整个应用生命周期,形成一个无限的循环(称为“无限循环”),象征着持续交付和持续改进。这个循环通常包含以下八个阶段:
-
计划: 定义功能和要求,跟踪进度。工具如 Jira, Confluence。实践: 敏捷开发。
-
编码: 编写代码和代码仓库管理。实践: 版本控制(如 Git)、分支策略(如 GitFlow)。
-
构建: 将代码编译成可执行文件。实践: 持续集成。开发人员频繁地将代码合并到主干,并自动触发构建和单元测试。工具如 Jenkins, GitLab CI。
-
测试: 确保代码质量。实践: 自动化测试(单元测试、集成测试、端到端测试)。工具如 Selenium, JUnit。
-
发布: 准备将应用部署到生产环境。实践: 持续交付。确保代码始终处于可部署状态。
-
部署: 将构建好的应用发布到生产环境。实践: 持续部署(自动部署)、基础设施即代码(IaC,用代码管理和配置服务器,如 Terraform, Ansible)、容器化(如 Docker, Kubernetes)。
-
运维: 维护应用程序在生产环境中的运行。实践: 监控和日志记录(如 Prometheus, ELK Stack),保证系统稳定性和性能。
-
监控: 收集应用和环境的运行数据。实践: 通过监控发现问题,并将反馈(如用户反馈、性能瓶颈)快速传递回“计划”阶段,开启新的循环。
5、常见的 DevOps 工具链
-
版本控制: Git, GitHub, GitLab, Bitbucket
-
持续集成/持续交付: Jenkins, GitLab CI/CD, CircleCI, Travis CI
-
CI阶段:代码拉取 -> 编译(
mvn compile
) -> 运行单元测试(mvn test
) -> 打包(mvn package
) -> 制品上传(到Nexus/JFrog Artifactory)。 -
CD阶段:从制品库拉取包 -> 构建Docker镜像 -> 推送镜像到仓库 -> 部署到测试/生产环境(通常调用K8s或云平台API)。
-
-
配置管理和IaC(基础设施即代码): Ansible, Terraform, Puppet, Chef
-
容器化: Docker
-
容器编排: Kubernetes
-
监控与日志: Prometheus, Grafana, ELK Stack, Nagios
-
协作与沟通: Slack, Microsoft Teams, Jira