> 文章列表 > 看看IBM是怎么定义DevOps?

看看IBM是怎么定义DevOps?

看看IBM是怎么定义DevOps?

一、什么是DevOps

DevOps 通过结合并自动执行软件开发和 IT 运营团队的工作,加速交付更高质量的软件。

根据定义,DevOps 规定了软件开发流程和组织文化转变,通过自动执行并整合传统上各自为政的开发和 IT 运营团队的工作,加速交付更高质量的软件。

在实践中,最出色的 DevOps 流程和文化超越开发和运营的范畴,在软件开发生命周期中整合了所有应用利益相关方的意见和建议 - 包括平台和基础架构工程、安全、合规、治理、风险管理、业务部门、最终用户和客户。  

DevOps 代表了过去 20 多年软件交付领域的最新成果,从每几个月甚至每几年才发布一次的应用范围的巨型代码版本,发展为每天发布一次或多次的迭代式小型特性或功能更新。

DevOps 的终极目标是满足软件用户对于频繁发布的创新型新功能以及不间断的性能和可用性不断增长的需求。

二、如何实现 DevOps

直到 2000 年之前,大多数软件还都是使用瀑布式方法开发和更新的,这是大规模开发项目的线性方法。 软件开发团队可能需要花费数月时间,开发会影响大部分或所有应用的体量巨大的新代码。  由于这些变更非常广泛,因此他们还需要花费数月时间将新代码集成到代码库中。 

接着,质量保证 (QA)、安全和运营团队也需要花费数月时间来测试代码。 因此,前后两个软件发行版之间的时间间隔,以及发行版之间的几个重大补丁或错误修订之间的时间间隔,往往长达数月甚至数年。 通常,这种“大爆炸”式的功能交付方法具有如下特点:具有复杂而且充满风险的部署计划;难以安排与上游和下游系统的联动; IT“祈祷”在发行版正式投入生产环境使用之前的几个月中,业务需求不会发生巨大变化。

为了加快开发速度和提高质量,开发团队开始采用敏捷软件开发方法,这些方法是迭代式而非线性的,重点是对应用代码库进行更小但更频繁的更新。 其中的主要方法包括​持续集成 和 持续交付,即 CI/CD。 采用 CI/CD 方法时,每隔一两个星期将新的小型代码块合并到代码库中,然后自动集成、测试和准备代码,以部署到生产环境。 敏捷方法将“大爆炸”式的方法转变成一系列“小型的代码块”,这样还有助于隔离风险。

这些敏捷开发实践加速软件开发和交付的效果越好,它们暴露的孤岛式 IT 运营领域就越多,包括系统置备、配置、验收测试、管理、监控等地方,从而可以及早解决问题,防止其成为软件交付生命周期的下一个瓶颈。 

DevOps 源自于敏捷方法。 它添加了新的流程和工具,将 CI/CD 的持续迭代和自动化扩展到软件交付生命周期的其余部分。 它在流程中的每一步都实现了开发和运营之间的密切协作。

三、DevOps 的好处

采用 DevOps 的文化、做法和工具的团队能够提升效率,以更快的速度构建更好的产品,从而获得更高的客户满意度。若要实现以下业务目标,这种改进的协作方式和生产能力不可或缺:

  • 缩短上市时间
  • 适应市场和竞争
  • 保持系统稳定性和可靠性
  • 缩短平均恢复时间

四、DevOps 的工作方式: DevOps 生命周期

DevOps 生命周期(以线性方式描述时,也称为持续交付管道)是一系列迭代式、自动化的开发流程(也称工作流程),在更大的自动化迭代式的开发生命周期内执行,旨在优化高质量软件的快速交付。 工作流程的名称和数量众说纷纭,但通常可归结为以下六类:

持续集成和持续交付 (CI/CD)

配置管理是指管理系统中资源(包括服务器、虚拟机和数据库)的状态。使用配置管理工具,团队能够以一种可控和系统的方式进行更改,因此降低了修改系统配置的风险。团队使用配置管理工具来跟踪系统状态并帮助避免配置漂移,即避免系统资源的配置随时间偏离为其定义的目标状态。

通过与基础设施即代码结合使用,系统定义和配置都很容易进行模板化和自动化,帮助团队大规模地操作复杂的环境。

版本控制

版本控制是管理各版本中代码的做法,用于跟踪修订和更改历史记录,使代码易于评审和恢复。通常使用版本控制系统(比如 Git)来实现这种做法,这些系统允许多个开发人员协作编写代码。有关合并在相同文件中发生的代码更改、处理冲突以及将更改回滚到早期状态,这些系统具有一个清楚的流程。

使用版本控制是一个基本的 DevOps 做法,可帮助开发团队协同工作,在团队成员之间划分编码任务,并存储所有代码,以便在需要时轻松恢复。

版本控制也是其他做法(如持续集成和基础结构即代码)中的必要元素。

敏捷软件开发

敏捷是一种软件开发方法,注重团队协作、客户和用户反馈,以及高度适应在短期发布周期内的变化。采用敏捷的团队向客户提供持续的更改和改进,收集他们的反馈,然后吸取经验并根据客户的需求和需要进行调整。敏捷与其他更传统的框架(如瀑布框架)有本质的不同,瀑布框架包括由顺序阶段定义的较长的发布周期。看板和 Scrum 是两种与敏捷相关的热门框架。

基础结构即代码

基础结构即代码以一种描述性的方式定义系统资源和拓扑,团队可以像编码一样管理这些资源。这些定义也可以存储并在版本控制系统中进行版本控制以及像代码一样进行评审和还原。

使用基础设施即代码有助于团队以可靠、可重复和可控的方式部署系统资源。基础设施即代码也有助于自动化部署并降低人为错误的风险,特别是对于复杂的大型环境。这种可重复、可靠的环境部署解决方案允许团队维护与生产环境相同的开发和测试环境。将环境复制到不同的数据中心和云平台同样变得更加简单和高效。

配置管理

配置管理是指管理系统中资源(包括服务器、虚拟机和数据库)的状态。使用配置管理工具,团队能够以一种可控和系统的方式进行更改,因此降低了修改系统配置的风险。团队使用配置管理工具来跟踪系统状态并帮助避免配置漂移,即避免系统资源的配置随时间偏离为其定义的目标状态。

通过与基础设施即代码结合使用,系统定义和配置都很容易进行模板化和自动化,帮助团队大规模地操作复杂的环境。

持续监视

持续监视意味着能够全面、实时地了解整个应用程序堆栈(从运行应用程序的基础结构到更高级别的软件组件)的性能和运行状况。可查看的内容包括遥测和元数据集合,以及需要引起操作员注意的预定义条件警报的设置。遥测包括从系统各个部分收集的事件数据和日志,这些数据和日志存储在可以分析和查询的地方。

高绩效的 DevOps 团队会确保他们设置了可操作且有意义的警报,并收集了丰富的遥测数据,以便能够从大量数据中获得见解。这些见解有助于团队实时解决问题,并了解如何在未来的开发周期中改进应用程序。

这些工作流程之间还有另外三个重要的持续工作流程:

持续测试: 在典型的 DevOps 生命周期中,集成和部署之间有一个单独的“测试”阶段。 但 DevOps 又更进了一步,可以在各个工作流程中执行测试的某些要素,例如在规划工作流程中执行行为驱动的开发;在开发工作流程中执行单元测试与合同测试;在集成工作流程中执行静态代码扫描、CVE 扫描和语言分析;在部署工作流程中执行烟雾测试、渗透测试和配置测试;在运营工作流程中执行混沌测试、合规性测试;在学习工作流程中执行 A/B 测试。 测试是发现风险和漏洞的强大方法,为 IT 接受、缓解或补救风险提供了机会。

安全性: 瀑布方法和敏捷实现是在交付或部署后"附加"安全工作流程,而 DevOps 力求从一开始(规划)就融入安全措施,因为此时安全问题最容易解决,而且解决成本最低,然后在开发周期的其余阶段持续实施安全措施。 这种安全性方法称为左移(请参阅图 1 以便更轻松地理解这个概念)。 一些组织的左移工作不甚理想,这也导致了 DevSecOps 的兴起(见下文)。

合规性。 法规 合规性(治理和风险)也必须在开发生命周期的早期和整个过程中得到最充分的满足。 受监管行业通常必须强制性满足某种程度的可观察性、可追溯性以及可访问性,以表明如何在运行时运营环境中交付和管理功能。 这需要在持续交付管道和运行时环境中规划、制定、测试和执行策略。 合规性措施的可审计性对于向第三方审计机构证明合规性而言极其重要。

五、DevOps 文化

采用 DevOps 做法可以通过技术来实现流程的自动化和优化,但这一切都需要从组织内部的文化和参与的人员开始。培养 DevOps 文化的挑战在于需要深入改变人们的工作和协作方式。但是,通过推行 DevOps 文化,组织可以创造一个有利于高绩效团队成长的环境。

协作、可见性和一致性

健康的 DevOps 文化的一个标志是团队间能够协作,首要的便是可见性。开发和 IT 运营等不同团队必须能够相互分享 DevOps 流程、优先级和关注点。这些团队还必须能够共同规划工作,并统一与业务相关的成功目标和衡量标准。

范围和责任的转变

当团队统一时,他们拥有所有权并参与其他生命周期阶段,而不仅仅是他们的角色对应的阶段。例如,开发人员不仅要对开发阶段的创新和质量负责,还要对他们的改变在运营阶段带来的性能和稳定性负责。同时,IT 操作员一定要在规划和开发阶段中包括治理、安全性和合规性。

缩短发布周期

DevOps 团队通过在短周期内发布软件保持敏捷。因为进度是渐进式的,缩短发布周期可以让计划和风险管理更容易,同时也可减少对系统稳定性的影响。缩短发布周期还可以让组织适应和应对不断变化的客户需求和竞争压力。

持续学习

高绩效的 DevOps 团队形成了一种成长思维。他们快速失败,然后将经验教训融入到他们的流程中,不断改进,提高客户满意度,加速创新和适应市场。DevOps 是一个旅程,所以总有成长的空间。

六、DevOps 工具:构建 DevOps 工具链

DevOps 和 DevOps 文化需要各种工具以支持异步协作,无缝集成 DevOps 工作流程,以及尽可能提高整个 DevOps 生命周期的自动化水平。 DevOps 工具的类别包括:

  • 项目管理工具 - 使团队能够建立用户情境(需求)的待办工作清单以构成编码项目,将其分解为较小的任务,并跟踪任务直至完成。 许多工具支持敏捷项目管理实践,如开发人员引入 DevOps 的 Scrum、精益和 Kanban。 热门的开源工具包括 GitHub Issues 和 Jira。
     
  • 协作式源代码存储库 - 受到版本控制的编码环境,支持多个开发人员处理同一代码库。 代码存储库与 CI/CD、测试和安全工具集成,以便在代码落实到存储库后,可以自动移至下一步。 开源存储库包括 GiHub 和 GitLab。
     
  • CI/CD 管道 - 用于自动执行代码检出、构建、测试和部署的工具。 Jenkins 是这个类别中最受欢迎的开源工具;这个类别中许多以前开源的其他工具,如 CircleCI,现在仅提供商用版本。 作为持续部署 (CD) 工具,Spinnaker 在应用和基础架构之间充当代码层。 ArgoCD 是 Kubernetes 原生 CI/CD 的另一热门开源选择。
     
  • 测试自动化框架 - 这包括用于自动执行单元、合同、功能、性能、易用性、渗透和安全等测试的软件工具、库和最佳实践。 这些工具中的佼佼者支持多种语言;有些使用人工智能 (AI),可自动重新配置测试以响应代码变更。 测试工具和框架的扩展范围很广! 热门的开源测试自动化框架包括 Selenium、Appium、Katalon、Robot Framework 和 Serenity(以前名为 Thucydides)。
     
  • 配置管理(​基础架构即代码​)工具 - 支持 DevOps 工程师通过执行脚本,配置和置备完全受版本控制并完整形成文档的基础架构。 开源选项包括 Ansible (Red Hat)、Chef、Pupet 和 
    Terraform。 Kubernetes 为容器化应用执行相同的功能(请参阅下面的“DevOps 和云原生开发”)。
  • 监控工具 - 这些工具帮助 DevOps 团队发现并解决系统问题; 他们还实时收集和分析数据,以揭示代码变更如何影响应用性能。 开源监控工具包括 Datadog、Nagios、Prometheus 和 Splunk。
     
  • 持续反馈工具 - 用于通过热图(记录用户在屏幕上的操作)、调研或自助式问题凭单收集用户反馈的工具。