“DevOps”已成为一个热门词汇,不同的人对它的理解各有侧重。
要准确理解和定义 DevOps 的含义并非易事。 因此,了解大多数人通常将其关联起来的基本概念,以及 DevOps 的发展历程,将有助于我们对其形成一个全面的认识。
DevOps 的起源
DevOps 是敏捷软件开发理念的典型体现。 其核心思想源于一种迫切需求:即跟上不断加快的软件开发节奏,并借助敏捷方法来实现这一目标。 过去十年间,敏捷文化和实践取得了显著进展,这也揭示了对端到端软件交付生命周期进行更全面管理的需求。
您或许会好奇,敏捷软件开发究竟是什么?
敏捷开发是一个宽泛的术语,它涵盖了几种迭代和增量式软件开发方法。 其中较为流行的敏捷方法包括 Scrum、看板、大规模敏捷框架(Scaled Agile Framework®,SAFe®)、精益开发和极限编程(XP)。
尽管这些敏捷方法在核心价值观和愿景上保持一致,但在具体实践中却各有侧重。 它们都强调迭代和持续反馈,以确保可扩展软件的成功改进和交付。 这些方法还涵盖了项目和软件的持续规划、持续测试、持续集成以及其他众多形式的持续优化。
与传统的瀑布式流程不同,敏捷方法具有轻量级和高度适应性的特点。 它们的最大优势之一在于,它们都专注于赋能团队成员,通过协作和快速决策来解决问题。
DevOps 的理想目标是通过构建、验证、部署和交付等不同阶段,扩展敏捷开发实践,从而提升软件变更的流动效率。 它允许跨职能团队对从设计到生产的软件产品拥有完全的所有权。
DevOps 解决的挑战
部署流程:分布式应用通常需要将二进制文件和配置文件部署到多台服务器。 当涉及到服务器集群时,部署过程会变得更加复杂。 如何部署、部署什么、部署到哪里等问题都极具挑战性。 其直接后果是什么呢?
工件进入下一阶段环境所需的时间过长,这将导致测试延迟、上线时间延迟以及其他一系列问题。
DevOps 允许软件或 Web 开发人员与 IT 运维人员在完全无障碍的协作环境中进行部署。 它使我们能够验证哪些方法是有效的,然后通过自动化将其提升到一个新高度,从而实现持续开发,并为更频繁的开发创造了条件。
DevOps 目标
DevOps 旨在改善从计划到交付的各个环节中利益相关者之间的协作,并通过自动化交付流程来实现以下目标:
- 提高部署频率
- 加快最终产品的上市时间
- 降低新版本的失败率
- 缩短故障修复所需的时间
- 提高系统恢复速度
常见的 DevOps 场景
在启动一个新的软件项目之前,整个团队需要进行充分的沟通,该团队由开发人员、测试人员、运维人员和支持人员组成。 他们共同制定创建可部署、功能完整的软件的详细计划。
当开发人员完成工作后,他们会每天部署新的代码。 自动化测试流程将确保代码已准备好实施。 一旦代码通过自动化测试,它将被部署给少数用户进行试用。 接着,会短时间监控代码,以确保不存在任何不可预见的问题,并且代码运行稳定。 一旦最终监控表明代码运行稳定,新代码将被部署给更多用户。 因此,在规划和开发之后的大部分步骤,都是在没有人为干预的情况下自动完成的。
DevOps 成熟度的不同阶段
DevOps 的成熟度发展通常会经历几个不同的阶段。 以下是一些您需要了解的关键概念。
瀑布开发
在持续集成理念普及之前,开发团队通常会编写大量代码,然后将来自不同团队的代码合并发布。 由于代码版本之间的差异巨大,需要进行大量修改。
这些大量的修改工作通常需要数月甚至更长的时间才能完成。 这个过程效率低下,难以让人满意。
持续集成
持续集成指的是一种快速将新开发的代码集成到即将发布的主代码中的实践。 在发布代码时,持续集成有助于节省大量时间。
DevOps 并非此术语的发明者。 持续集成实际上是极限编程方法中的一种敏捷工程实践。 而 DevOps 采纳了这种做法,因为成功的持续集成需要自动化。 因此,持续集成通常是迈向 DevOps 成熟的第一步。
从 DevOps 的角度来看,持续集成包括代码检查、将其编译为可用代码以及运行必要的验证测试等步骤。
持续交付
持续交付是持续集成的延伸,也是 DevOps 的第二阶段。
持续交付允许您添加额外的自动化和测试步骤,不仅可以快速将代码与主代码行合并,还可以使代码在无需人工干预的情况下几乎可以随时部署。
将代码库保持在几乎可以部署的状态是一种非常重要的实践。
持续部署
持续部署是持续交付的高级发展阶段。 此方法允许我们在无需任何人为干预的情况下,将代码部署到生产环境。
采用持续开发的团队绝不会在未经测试的情况下部署任何代码。 所有新创建的代码在进入生产阶段之前都要经过自动化测试。 代码会被部署给少数用户进行试用,并通过自动化的反馈循环来监控质量和使用情况,确保代码在进入下一阶段之前是稳定和可靠的。
包括 Netflix、Etsy、Amazon、Pinterest、Flickr、IMVU 和 Google 在内的少数公司正在采用持续开发。
价值
DevOps 高度重视通过使用各种 DevOps 工具进行自动化,来发展协作文化和提高工作效率。 要为您的软件解决方案实施 DevOps,您需要将文化和工具相结合。
DevOps 文化
DevOps 是一种独特的文化,它有助于加强协作,减少混乱,更好地处理责任分担,实现自动化,改进质量,进行反馈评估以及提高自动化程度。
敏捷方法一直是交付软件的最佳整体方式。 在衡量进度时,敏捷开发团队会以可工作的软件作为衡量标准。 DevOps 文化中的敏捷方法允许产品负责人、开发人员、测试人员和用户体验(UX)人员紧密合作,并牢记相同的目标。
DevOps 工具
DevOps 工具涵盖了配置管理、测试和构建系统、应用程序开发、版本控制和监控等方面。在实施持续集成、持续交付和持续部署时,需要使用不同的工具,同时它们也经常使用相同的工具。随着交付链的推进,您会需要使用更多的工具。
让我们了解一些流行的工具和实践。
源代码存储库:这是开发人员可以签入和更改代码的地方。源代码存储库管理代码的各种签入版本,以确保开发人员不会相互覆盖代码。
Git、Apache Subversion、IBM Rational、Artifactory、Nexus、Eclipse 等是一些常用的代码存储库工具。
构建服务器:构建服务器是一种自动化工具,用于将源代码中的代码编译成可执行代码库。Jenkins、SonarQube 和 Artifactory 是一些常用的构建服务器工具。
配置管理:Puppet、Chef、Ansible、SaltStack、Run Deck 等工具可以帮助管理应用程序和基础设施的配置,以保持跨环境的一致性。
虚拟基础设施:AWS、GCP 和 Azure 是三大公共云提供商,它们提供了几乎所有的基础设施服务。它们提供了 API,允许您配置基础设施并像代码一样管理它们。
结论
希望这篇文章能让您对 DevOps 有所了解。如果这激发了您的兴趣,您可以尝试一些在线大师班课程。
作者:Payal Goyal