DevOps 是一种软件开发方法,通过将软件开发 (Dev) 和 IT 运营 (Ops) 团队的工作相结合并实现自动化,加速交付高性能应用程序和服务。
DevOps 既包括一组称为“DevOps 生命周期”的自动化工作流,也包括支持这些工作流的文化转变。
DevOps 生命周期旨在优化高质量软件的快速交付。它包括一系列迭代、自动化的工作流,这些工作流在更大的自动化和迭代式开发生命周期中运行。
工作流的名称和顺序可能因组织而异,但 DevOps 生命周期通常包括八个核心步骤。
首先,团队确定下一个版本的新特性和功能。在此工作流中,他们借鉴用户反馈、成功案例和内部利益相关者的输入,例如平台和基础设施工程师以及安全、合规、治理、风险管理和业务线团队。
规划阶段的目标是创建待办事项文档。待办事项是指随着时间推移添加到产品中的新功能、改进和错误修复的优先列表。
DevOps 团队对待办事项中确定的新功能和增强功能进行编码。DevOps 中的常见编码实践包括:
在将代码发送到持续交付管道的下一个阶段之前,开发人员通常使用本地工作站编写和测试代码。
新代码将集成到现有代码库中,然后进行测试和打包,以便发布和部署。此阶段通常自动执行的活动包括:将代码更改合并到主副本中;将更新后的代码放入存储库;以及将代码编译、测试和打包到可执行文件中。
在 DevOps 中,构建阶段的输出通常存储在二进制存储库中。与源代码存储库不同,二进制存储库存储打包的输出(例如库和可执行文件),以便在开发生命周期的其他阶段重复使用。
在此阶段,项目移动到生产环境,用户可以在其中访问更新的应用程序。
许多组织首先将应用程序部署到一小部分最终用户,以确保应用程序正常工作。稳定后,就可以向所有人部署应用程序。
在此阶段,DevOps 团队检查新功能是否运行顺畅,以及是否可供用户使用且不会中断服务。他们使用自动化可观测性和管理工具来持续监控和优化运营,以确保网络、存储、平台、计算和安全状况均处于正常。
在此阶段,团队收集分析用户反馈及历史工作流经验,用以优化未来流程与产品。对功能特性、运行性能及业务价值的持续监控,为下一版本新功能与增强组件的规划提供依据。
DevOps 文化的特点是致力于协作、沟通和自动化。
在项目管理层面,DevOps 需要所有软件交付利益相关者之间持续沟通并分担责任,以便快速创新并从一开始就注重质量。利益相关者当然包括软件开发和 IT 运营团队,但也包括合规、治理、风险、业务线和安全团队。
在技术层面,DevOps 要求致力于自动化工具,以保持项目在工作流内和工作流间的运动。例如,基础设施组件的自动化测试、部署和配置可以帮助加快项目交付并减少错误。
DevOps 也需要反馈和衡量,这使得团队能够不断优化周期并提高软件质量和性能。
为了采用 DevOps 文化,组织必须经常打破孤岛并将人员重组为自主的跨职能 DevOps 团队。这些团队从头到尾(从计划到反馈)致力于项目,无需交接工作或等待其他团队的批准。在敏捷软件开发的背景下,这种责任和协作是共同关注价值和卓越成果的基石。
DevSecOps 是开发、安全和运营 (Development, Security and Operations) 的缩写。它是 DevOps 的扩展,包括软件开发每个阶段的网络安全实践和安全团队。
过去,在开发周期结束时,“追加”安全性,这几乎算是种事后补救措施。一个单独的安全团队应用这些安全措施,然后一个单独的质量保证 (QA) 小组测试这些措施。
DevSecOps 从软件开发生命周期一开始就将应用程序和基础设施安全性集成到 DevOps 实践和工具中。它在安全问题出现时,以及在部署到生产之前,以更容易、更快、更低成本的方式解决这些问题。
由于这种能力可以加快软件交付、降低成本和改善安全状况,许多组织现在正在采用 DevSecOps 作为标准的 DevOps 方法。
通过将开发人员的工作和运营更紧密地结合在一起,DevOps 可以提高效率并减少工作量。由于开发人员和运营团队共同分享工作流和承担责任,因此随着项目的进展,意外会越来越少。团队更清楚地了解其代码在运行时环境中的预期执行方式。
通过加强协作和使用微服务架构,DevOps 团队可以更快地交付新代码,在微服务架构中,每个应用程序都由许多松散耦合且可独立部署的组件或服务组成。
通过微服务,不同的团队可以同时处理新版本的不同组件,以加快开发周期。这种方法可推动持续改进、创新和错误修复,从而加速推向市场。
DevOps 还通过持续交付和持续集成的实践加速和自动化构建、测试和部署软件版本的过程。组织能够更快地适应市场变化,从而更好地满足客户需求。
自动化测试有助于确保软件和基础架构更新的质量和可靠性。监控和记录可实时验证应用程序性能。
DevOps 自动化加快了代码的开发、测试和生产,使得组织可以更快、更高效地扩展。
例如,如果组织需要快速添加更多应用程序来满足业务需求,通过 DevOps,组织无需通过冗长、缓慢且容易出错的编码过程来实施这些更改。
使用 DevSecOps,安全性从一开始就集成到开发流程中,而不是在最后进行改造。团队将安全测试和审计纳入工作流,以帮助执行安全标准并跟踪监管要求的遵守情况。
为了支持 DevOps 方法和文化,DevOps 实施需要专门的工具链,以实现异步协作、DevOps 工作流的无缝集成以及在整个 DevOps 生命周期中尽可能多地实现自动化。
DevOps 工具的类别包括:
版本控制编码环境使多个开发人员能够管理代码变更、跟踪变更并在同一代码库上协同工作。这些代码存储库通常通过应用程序编程接口 (API) 与 CI/CD、测试和安全工具集成,因此,当代码提交到存储库时,它可以自动进入下一步。流行的版本控制系统包括 Git(常用于 GitHub)、Apache Subversion 和 Mercurial。
CI/CD 管道有助于自动执行核心软件开发任务,例如集成代码、测试代码质量、编译和打包代码以及部署软件。此类别中的热门工具包括 Jenkins、CircleCI 和 TeamCity。
配置管理工具帮助 DevOps 团队在各种 IT 环境中配置基础设施、软件和应用程序。这些工具可自动执行配置任务,例如设置和部署硬件或应用软件补丁,以确保一致性、减少错误并提高可靠性。流行的配置管理工具包括 Puppet、Chef 和 SaltStack。
IaC 使用高级描述性编码语言来自动配置 IT 基础设施。开发人员无需指导系统如何配置基础设施,而是描述所需的最终状态,然后 IaC 软件会处理其余部分。
有了这种自动化,每次开发、测试或部署软件应用程序时,开发人员就不必花时间和精力手动编写 IT 基础设施变更脚本。
流行的 IaC 工具包括 Terraform、Pulumi 和 AWS CloudFormation。
监控和可观测性工具可帮助 DevOps 团队识别和解决系统问题,例如响应时间缓慢或资源消耗过多。它们还实时收集和分析数据,以揭示代码更改如何影响应用程序性能。
常用的可观测性和监控工具包括 Prometheus、Datadog、IBM Instana®、New Relic 和 Splunk。
这些工具可通过热图(记录用户在屏幕上的操作)、调查、轮询或自助服务问题工单来收集用户反馈。一些工具还监控社交媒体以收集用户反馈并衡量对应用程序更新的满意度。
站点可靠性工程 (SRE) 和 DevOps 是软件工程中的互补战略,可以打破孤岛,提高软件交付的效率和可靠性。DevOps 团队专注于进行更新和部署新功能,而 SRE 实践则致力于在系统扩展时保护系统的可靠性。
SRE 将 DevOps 与传统 IT 运营相结合,以自动执行系统管理员原本可能手动执行的任务,例如生产系统管理、变革管理和事件响应。SRE 致力于将传统的系统管理员转变为工程师。
SRE 旨在平衡组织对快速应用程序开发的需求和满足与客户的服务级别协议 (SLA) 中指定的性能和可用性级别的需求。
站点可靠性工程师通过确定应用程序引起的操作风险的可接受水平(称为错误预算),并通过实现操作自动化来满足该水平,最终获得这种平衡。
在跨职能 DevOps 团队中,SRE 可以充当开发和运营之间的桥梁。SRE 提供指标和自动化工具,以帮助团队尽快通过 DevOps 管道推送代码更改和新功能,且不会违反组织的 SLA 要求。
AI 可以分析大量数据,以预测和解决流程问题,例如应用程序故障或流程瓶颈。例如,AI 可以预测网络流量激增,并自动提供更多资源,帮助防止服务中断或系统中断。
通过识别隐藏的错误、性能问题和软件异常,AI 可以帮助开发人员解决应用程序问题,防止问题升级。例如,AI 可以标记需要注意的问题,例如 CPU 使用率意外飙升或多个微服务故障。
AI 可以审查和测试代码,以帮助确保代码比手动方法更快地做好部署准备。例如,AI 工具可以分析代码更改,以发现潜在错误或识别软件更新期间无意创建的安全漏洞。
DevOps 流程和工具继续扩展和发展,以应对全新的 IT 和业务挑战。推动 DevOps 未来发展的一些技术和实践包括:
平台工程是使用标准化工具、自动化工作流和一致的环境创建和管理平台以提高开发人员工作效率的学科。平台工程可以为团队提供自助服务功能,以执行资源预置、软件配置和应用程序容器化等任务,从而提高工作效率并加快 DevOps 流程。
可观测性是指仅根据其外部输出(特别是遥测)的知识来理解复杂系统的内部状态或状况的能力。与传统 DevOps 监控实践(侧重于预定义指标)相比,可观测性工具能提供对系统行为的更深入洞察分析。
由于能够隔离根本原因并主动识别复杂系统中的问题,可观测性工具越来越成为 DevOps 工作流中的重要组件。
低代码和无代码工具使得具备有限编码知识的人员能够参与 DevOps 工作流。借助拖放界面,业务用户无需传统编码即可构建应用程序。这种方法简化了旨在满足特定业务需求的应用程序的创建和交付。
实现本地、云端或大型机上任何应用程序的自动化软件交付
。使用开发运维软件和工具,在多种设备和环境中构建、部署和管理云原生应用程序。
利用 IBM 的云咨询服务发掘新功能并提升业务敏捷性。了解如何通过混合云战略和专家合作共同制定解决方案、加快数字化转型并优化性能。