DevOps 生命周期,你想知道的全都在这里了!
在大多数情况下,软件应用程序开发由于其规范性和复杂性而变得很耗时。 为了在短时间内交付高质量应用程序,软件开发人员正在遵循一套通用的实践,称为DevOps生命周期。
那么,DevOps在软件应用程序开发领域中扮演着什么角色? 让我们深入了解其含义、用途以及DevOps生命周期中的每个关键阶段。
●什么是DevOps●
在DevOps之前,从业人员使用瀑布模型或敏捷开发模型进行软件项目开发:瀑布模型或顺序模型是软件开发生命周期(SDLC)中的一种开创性方法,在这个模型中,软件开发成为一个线性过程,不同的阶段和任务被依次定位;而敏捷开发涉及各种方法的使用和SDLC中多个团队的协作。瀑布模型的线性和敏捷开发的跨功能性无法确保快速、连续地交付无缺陷的软件应用程序。
软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。这样的情况下,DevOps应运而生。
DevOps是一个简单的缩写词,源于“development(开发)”和“Operation(运维)”两个词,它涉及以特定的方式实践应用程序开发的任务。更广泛地说,软件开发和IT运维的结合被称为DevOps。
●DevOps的优势●
DevOps在促进IT运维和软件开发之间的敏捷关系方面的有效性受到几个因素的支持。通过在软件开发和IT运维部门的多个业务部门内实现更好的通信,DevOps通过以下优势的结合改进了软件的总体生产:稳定的运行环境、超快速的交付、坚实的合作、时间优化(特别是在修复/维护阶段)、持续创新。这样的技术优势使得DevOps成为世界上软件应用程序开发中备受追捧的方法。
要了解DevOps如何实现这些优势,了解DevOps的完整生命周期是很重要的。让我们分解DevOps中的关键阶段,并找出实现完美、连续和快速软件开发的过程。
●解密DevOps生命周期●
DevOps主要用于电子商务网站、云本地应用程序和其他大型分布式平台的应用程序开发。它由多个阶段组成,这些阶段统称为DevOps生命周期:持续发展、持续集成、持续测试、持续反馈、持续监测、持续部署、持续运维。
这七个阶段是能确保DevOps优化从提出到生产再到完整交付的整个开发流程的主要组成部分。 下面是对DevOps生命周期的阶段性、完整的分解和分析。
持续开发
DevOps生命周期的第一个阶段是规划和软件编码。其中规划包括理解项目的远景,并基于这些远景设想软件。做规划不涉及任何主要工具,而维护代码需要使用一系列工具。 开发应用程序源代码的第一步是从不同的编程语言中进行选择。 JavaScript,C / C ++,Ruby和Python在DevOps中主要用于编码应用程序。
维护代码的过程称为源代码管理(SCM),其中使用了诸如Git、TFS、GitLab、Subversion等版本控制工具。
在SCM过程中,Git是支持分布式版本控制的首选工具。它通过循环的非线性工作流对数据保证做出贡献。对于涉及大量合作者参与开发活动的大型项目,Git通过提交消息在团队之间建立可靠的通信。
借助版本控制工具,可以在连续开发阶段构建应用程序代码的稳定版本。 开发人员还可以使用Garden,Maven和类似工具将代码打包为.exe(可执行)文件。
持续集成
源代码会被修改多次,这些频繁的更改每周甚至每天都在发生着。 下一阶段的代码集成是整个DevOps生命周期的核心。 在持续集成中,将构建支持附加功能的新代码,并将其集成到现有代码中。
在这个阶段,源代码中的错误会在早期就被检测到。为了生成为应用程序带来更多功能的新代码,开发人员运行用于单元测试、代码评审、集成测试、编译和打包的工具。 将新代码持续集成到现有源代码中有助于反映最终用户在使用更新后的代码时所经历的更改。
Jenkins是被广泛应用的可靠的DevOps工具,用于获取更新的源代码并将构建构建为.exe格式。 这些转换是无缝进行的,更新的代码将打包并进入下一阶段,即生产服务器或测试服务器。
持续测试
一些开发人员在持续集成阶段之前执行持续测试阶段。根据应用程序代码中的更新,可以围绕DevOps生命周期中的持续集成阶段重新定位此阶段。
在这个阶段,对开发的软件进行不断的Bug测试。 使用Docker容器来模拟测试环境。 通过自动化测试,开发人员可以节省往常在手动测试中浪费的精力和时间。 自动化测试生成的报告可改善测试评估过程,分析失败的测试用例变得更加容易。 经过UAT(用户接受测试)过程后,生成的测试套件更简单且没有Bug。
TestNG,Selenium和JUnit是用于自动化测试的一些DevOps工具。 这些工具还可以在预设的时间线上安排测试用例的执行。质量保证工程师(QA)可以使用这些工具对其他几个代码库进行并行测试。它确保了应用程序实现功能完美和网络互联。最后,被测试的代码被重新发送到持续集成阶段以更新源代码。
持续反馈
持续测试和持续集成是确保应用程序代码持续改进的两个关键阶段,而持续反馈是分析这些改进的阶段。
开发人员可以在最终产品上评估这些修改的结果。 最重要的是,测试这些应用程序的客户可以在此阶段分享他们的经验。 在大多数情况下,DevOps生命周期的这一阶段为应用程序开发过程提供了一个转折点。 及时评估反馈,开发人员开始着手进行新更改。 这样,客户反馈很快就能得到积极的回应,这为发布软件应用程序的新版本铺平了道路。
持续监测
监测应用程序的性能对于应用程序开发人员至关重要。 在此阶段,开发人员记录有关应用程序使用的数据,并持续监测着每个功能。 “服务器无法访问”或“内存不足”是可以在这个阶段被解决的一些常见系统错误。
持续监测有助于保持应用程序中服务的可用性。它还能确认重复出现的系统错误的威胁和根本原因。在这个阶段,安全问题可以得到解决,还能自动检测和修复缺陷。
与软件开发团队相比,IT运维团队在这一阶段的参与程度更高。他们的角色在监视用户活动、检查系统是否有异常行为以及跟踪错误的存在方面至关重要。
Sensu,ELK Stack,NewRelic,Splunk和Nagios是用于持续监视的关键DevOps工具。 这些工具可实现对系统、生产服务器和应用程序性能的全面控制。 在这些工具的帮助下,运维团队可以积极参与,以提高应用程序的可靠性和生产率。
当在此阶段检测到重大问题时,应用程序将在DevOps生命周期的所有早期阶段快速重新运行,这就是为何在这个阶段找到解决各种问题的方法会变得更快的原因。
持续部署
通常来说,持续部署阶段发生在持续监视之前。但是,开发人员要确保这个阶段在DevOps生命周期中始终处于活动状态,尤其是在应用程序上线并开始接收大量流量之后。
在此阶段,最终确定的应用程序代码将被部署到生产服务器。配置管理是这一阶段的关键过程,它在所有服务器上执行应用程序代码的精确部署,建立并管理应用程序性能和功能条件的一致性。将代码发布到服务器,为所有服务器安排更新,并且这些配置在整个生产过程中保持一致。
Ansible、Puppet和Chef是用于配置管理的一些有效的DevOps工具,它们经常执行新代码的快速和连续部署。
容器化工具用于通过配置管理过程实现连续部署。 Vagrant是一种容器化工具,可在从开发和测试到阶段和生产的不同环境中发展一致性。 同样,连续部署的可伸缩性由Docker等工具处理。这些工具通过复制和打包来自测试,登台和开发阶段的软件耦合,消除了各种生产故障和系统错误。 最终,该应用程序可以在不同的计算机上流畅运行。
持续运维
DevOps生命周期的最后一个阶段是最短且最简单的阶段。 持续运维的目的是使发布的应用程序和后续更新的过程自动化。 持续运维中的开发周期更短,从而使开发人员能够不断加快该应用程序的上市时间
●DevOps生命周期可交付成果●
DevOps生命周期的每一个阶段都由两个共同因素控制:最大程度的自动化和连续性。多功能工具取代了额外的步骤,大大缩短了检测故障所需的时间。DevOps运行在一个生命周期中,这个生命周期提供了软件应用程序的最佳版本。
最终产品使企业能够恢复迅速开发的速度并同时改善用户体验。
高投资回报率(ROI)简化了成本控制,开发和运维团队可以有机合作。
与持续部署解决方案相结合,将编程代码发送到1000多台生产服务器上是可行的。在DevOps生命周期中,有一些高级模式是为部署而设计的。类似的特性用于交付按需部署和审核。
随着技术的不断创新,DevOps继续以最高的质量和速度发展。如今,它已成为全球数百万公司数字化转型之旅的战略组成部分。
DevOPS生命周期显然打破了团队合作的障碍。 当可以使用DevOps构建负责任的业务环境时,无需进行任何冗余的工作。
DevOps工具生成的报告提供了业务洞察力并增强了SDLC中的可见性。通过端到端的价值管理,DevOps系统地提高了交付速度。
有了DevOps,项目管理和规划的任务将最终完成。DevOps既能应用于大型企业,也能服务于中小企业。组织、安排、调整和跟踪项目都变得更容易。DevOps生命周期的所有阶段都保持完整的可跟踪性。
大多数软件开发人员都可以从DevOps提供的分支工具中受益。它可以高效地设计应用程序UI和管理UX代码、安全地开发和存储项目数据。
由于代码中的每次更改都会影响生产阶段,因此用于自动监视和发布管理的工具分别有助于检测错误和模拟用户响应。
由于使用了单一的分布式版本控制工具,并且通过提供具有快速迭代自由度的高价值业务产品,工作流不会中断。
使用DevOps包管理工具可以为软件应用程序创建可靠的供应链。应用程序及其依赖项被捆绑到容器中,容器将进一步管理。开发人员可以通过安全的容器注册表和存储库轻松地构建代码包。DevOps通过自动化软件开发管道加速了自由、不间断的流程。
自动化测试使团队可以完全接受DevOps生命周期的不同阶段,因为这有助于维持高标准的产品质量。 编码,验证,更改,构建新代码,甚至将它们集成到源代码中都非常容易。
除了自动化测试之外,还有代码质量分析、动态分析安全测试和静态分析安全测试等过程来收集重要的反馈并将其传递给开发人员和测试人员。这增强了开发和操作团队提高代码质量的能力。
关键基础设施配置信息(密码和登录ID)的访问受工具保护,这些工具将它们伪装成秘密变量。为了获得额外的安全性,DevOps提供了有限的访问权限—只有经过授权的用户和进程才能获得访问权限。
凭借其独立的开发环境和更快的开发方法,DevOps成为技术市场的重要贡献者。 它是通过创建动态应用程序来解决技术业务挑战的最重要的工具集。由于这种方法给开发人员和用户都能带来好处,DevOps的采用率持续增加。国内大厂如阿里、腾讯、华为、等都有自己的云端DevOps解决方案。
以开源和私有部署为主要特点的禅道项目管理软件也已经内置了对Git、Subversion、Jenkins的集成,同时还提供了zentao ztf的自动化测试框架,打通了项目管理工具和持续集成工具中间的沟壑,禅道与ZTF的结合贯穿整个DevOps生命周期。
尽管DevOps目前是在全球大多数企业的软件开发项目的技术背景下进行的,但在未来几年,它将继续在现代静态网页和动态软件应用程序的开发中得到多样化的应用。
参考文献:
Amol Muratkar.What is DevOps Lifecycle and How to Manage Yours [OL].(2020-03-26)
https://dzone.com/articles/what-is-devops-lifecycle-how-to-manage-yours
作者:陈琦,资深敏捷测试顾问。拥有20年丰富的敏捷软件研发实践经验,现致力于软件测试自动化和DevOps相关领域的实践和研究。
版权声明: 本文为 InfoQ 作者【陈琦】的原创文章。
原文链接:【http://xie.infoq.cn/article/be5164d597d29c9e6ba4180a6】。文章转载请联系作者。
评论 (6 条评论)