什么是DevOps?人员,流程和产品的结合,过程、方法与系统的统称
《CI/CD(持续集成构建/持续交付):如何测试/集成/交付项目代码?(Jenkins,TravisCI)》
Table of Contents
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。
可以把DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。
传统的软件组织将开发、IT运营和质量保障设为各自分离的部门。在这种环境下如何采用新的开发方法(例如敏捷软件开发),这是一个重要的课题:按照从前的工作方式,开发和部署不需要IT支持或者QA深入的、跨部门的支持,而却需要极其紧密的多部门协作。然而DevOps考虑的还不止是软件部署。它是一套针对这几个部门间沟通与协作问题的流程和方法。
需要频繁交付的企业可能更需要对DevOps有一个大致的了解。Flickr发展了自己的DevOps能力,使之能够支撑业务部门“每天部署10次”的要求──如果一个组织要生产面向多种用户、具备多样功能的应用程序,其部署周期必然会很短。这种能力也被称为持续部署,并且经常与精益创业方法联系起来。 从2009年起,相关的工作组、专业组织和博客快速涌现。
DevOps的引入能对产品交付、测试、功能开发和维护(包括──曾经罕见但如今已屡见不鲜的──“热补丁”)起到意义深远的影响。在缺乏DevOps能力的组织中,开发与运营之间存在着信息“鸿沟”──例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。这种信息鸿沟就是最常出问题的地方。
以下几方面因素可能促使一个组织引入DevOps:
- 1、使用敏捷或其他软件开发过程与方法
- 2、业务负责人要求加快产品交付的速率
- 3、虚拟化和云计算基础设施(可能来自内部或外部供应商)日益普遍
- 4、数据中心自动化技术和配置管理工具的普及
- 5、有一种观点认为,占主导地位的“传统”美国式管理风格(“斯隆模型 vs 丰田模型”)会导致“烟囱式自动化”,从而造成开发与运营之间的鸿沟,因此需要DevOps能力来克服由此引发的问题。
DevOps经常被描述为“开发团队与运营团队之间更具协作性、更高效的关系”。由于团队间协作关系的改善,整个组织的效率因此得到提升,伴随频繁变化而来的生产环境的风险也能得到降低。
DevOps对应用程序发布的影响
在很多企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动。然而在具备DevOps能力的组织中,应用程序发布的风险很低,原因如下 [1] :
(1)减少变更范围
与传统的瀑布式开发模型相比,采用敏捷或迭代式开发意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。
(2)加强发布协调
靠强有力的发布协调人来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电子数据表、电话会议、即时消息、企业门户(wiki、sharepoint)等协作工具来确保所有相关人员理解变更的内容并全力合作。
(3)自动化
强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。
与传统开发方法那种大规模的、不频繁的发布(通常以“季度”或“年”为单位)相比,敏捷方法大大提升了发布频率(通常以“天”或“周”为单位) https://baike.baidu.com/item/devops/2613029
什么是DevOps?
https://docs.microsoft.com/en-us/azure/devops/learn/what-is-devops
创建人:Sam Guckenheimer
DevOps是人员,流程和产品的结合,可为我们的最终用户持续交付价值。 多诺万·布朗
“开发”和“运营”的收缩是指取代孤立的开发和运营来创建多学科的团队,这些团队现在可以与共享的高效实践和工具一起工作。DevOps的基本实践包括敏捷计划,持续集成,持续交付以及对应用程序的监视。
进入DevOps
不要害怕DevOps。有些团队是DevOps诞生的。有些实现了DevOps;其他人则对他们施加了DevOps。3什么是DevOps?DevOps为什么重要?为什么现在?您如何成功实现DevOps?这些是我们想要研究的主题。
了解您的周期时间
让我们从有关软件开发的基本假设开始。我们将通过OODA循环对其进行描述。4最初设计目的是防止战斗机飞行员从空中射击,OODA循环是考虑保持领先竞争对手的好方法。您首先要观察业务,市场,需求,当前用户行为以及可用的遥测数据。然后,您可以针对可能提供的选项进行枚举(也许是通过实验)。接下来,您决定要追求什么,然后通过向实际用户交付有效的软件来采取行动。所有这些都在某个周期时间内发生。
成为数据通知者
希望您可以使用数据来告知下一个周期该做什么。许多经验报告告诉我们,大约三分之一的部署将产生负面的业务成果,大约三分之一的将取得积极的成果,而三分之一将没有任何影响。理想情况下,您希望对那些无法推动业务发展的企业迅速失败,而对那些能够支持业务发展的企业却要加倍努力。有时这称为枢轴或坚持不懈。
努力进行有效学习
快速失败或翻倍失败的速度取决于循环所需的时间,或者精简而言,取决于循环时间。您的周期时间决定了您收集反馈以确定下一个循环中发生的情况的速度。您在每个周期中收集的反馈应该是真实的,可操作的数据。这称为验证学习。
缩短周期时间
当您采用DevOps做法时,可以通过较小的批次工作,使用更多的自动化功能,强化发布管道,改进遥测和更频繁地部署来缩短周期时间。6
优化经过验证的学习
您部署的频率越多,您可以进行的实验就越多,则必须进行枢转或坚持不懈的机会就越多,并且每个周期都需要经过验证的学习。经过验证的学习的这种加速是改进的价值。将其视为您实现的改进与避免的失败的总和。
如何实现DevOps
请记住,目标是缩短周期时间。从发布管道开始。部署一行代码或配置更改需要多长时间?最终,这就是您的速度刹车。
Continuous Integration drives the ongoing merging and testing of code, which leads to finding defects early. Other benefits include less time wasted on fighting merge issues and rapid feedback for development teams.持续集成推动了代码的持续合并和测试,从而导致尽早发现缺陷。 其他好处包括更少的时间用于解决合并问题,以及为开发团队提供快速反馈。
持续向生产和测试环境交付软件解决方案可帮助组织快速修复错误并响应不断变化的业务需求。
通常使用Git进行版本控制,可使位于世界各地的团队在日常开发活动中进行有效的沟通,并与软件开发工具集成以监视活动(如部署)。
敏捷计划和精益项目管理技术用于将工作计划和隔离为冲刺,管理团队容量并帮助团队快速适应不断变化的业务需求。DevOps定义为Done的工作软件正在收集针对预期业务目标的遥测。
监视和记录正在运行的应用程序,包括用于应用程序运行状况和客户使用情况的生产环境,可帮助组织形成假设并快速验证或否定策略。捕获丰富的数据并以各种日志记录格式存储。
公共云和混合云使不可能成为可能。云消除了传统的瓶颈,并使基础设施商品化。无论您是使用基础架构即服务(IaaS)来提升和转移现有应用程序,还是使用平台即服务(PaaS)来获得空前的生产力,云都可以为您提供无限制的数据中心。
基础设施即代码(IaC)是一种实践,可实现环境创建和拆卸的自动化和验证,以帮助交付安全稳定的应用程序托管平台。
微服务架构被利用来将业务用例隔离成可小型重用的服务,这些服务通过接口合同进行通信。这种架构可实现可伸缩性和效率。
容器是虚拟化的下一步发展。它们比虚拟机轻巧得多,可以更快地进行水合作用,并且可以通过文件轻松配置。
DevOps首先可能会受到伤害
如果很痛,请经常做。就像去体育馆一样,采取新的练习一开始可能会受到伤害。您练习新习惯的次数越多,它们就会变得越容易。就像在健身房训练一样,先锻炼大块肌肉,然后再锻炼小块肌肉,首先采用影响最大的方法,并进行交叉训练以产生协同作用。
参考文献
1(Gartner)“ Gartner表示,到2016年,DevOps将从利基市场发展成为全球25%的2000组织所采用的主流策略”,http://www.gartner.com/newsroom/id/2999017
2 Gene Kim,Jez Humble,Patrick Debois和John Willis,《 DevOps手册》,2016年,第1页。xi
第十二夜向莎士比亚致敬3道歉
4约翰·R·博伊德,《得与失的本质》,1995年6月28日,博伊德写的五张幻灯片。另请参阅Adrian Cockcroft,http: //www.slideshare.net/adriancockcroft/speeding-up-31799721
5 Kohavi等。http://ai.stanford.edu/~ronnyk/ExPThinkWeek2009Public.pdf
6埃里克·里斯(Eric Ries),精益创业
DevOps模型已定义
https://aws.amazon.com/devops/what-is-devops/
DevOps是文化理念,实践和工具的组合,可提高组织高速交付应用程序和服务的能力:与使用传统软件开发和基础架构管理流程的组织相比,产品的发展和改进速度更快。这种速度使组织可以更好地为客户提供服务,并在市场上更有效地竞争。
DevOps如何运作
在DevOps模式下,开发和运营团队不再“孤立”。有时,这两个团队合并为一个团队,工程师在整个应用程序生命周期(从开发和测试到部署再到运营)中进行工作,并开发了不仅限于单个功能的一系列技能。
在某些DevOps模型中,质量保证和安全团队也可能与开发和运营以及整个应用程序生命周期紧密集成在一起。当安全是DevOps团队中每个人的重点时,有时将其称为DevSecOps。
这些团队使用实践来自动化过去一直是手动且缓慢的流程。他们使用技术堆栈和工具来帮助他们快速,可靠地操作和发展应用程序。这些工具还可以帮助工程师独立完成通常需要其他团队帮助的任务(例如,部署代码或配置基础结构),这进一步提高了团队的工作效率。
DevOps的好处
速度
快速交货
可靠性
规模
大规模运营和管理您的基础架构和开发流程。自动化和一致性可帮助您有效地管理复杂或不断变化的系统,并降低风险。例如,基础架构即代码可帮助您以可重复且更有效的方式管理开发,测试和生产环境。
改善协作
在DevOps文化模型下建立更有效的团队,该模型强调所有权和责任制等价值观。开发人员和运营团队紧密协作,共同承担许多责任,并结合他们的工作流程。这样可以降低效率,并节省时间(例如,减少开发人员和操作之间的切换时间,编写考虑到运行环境的代码)。
安全
快速移动,同时保持控制力并保持合规性。您可以通过使用自动遵从性策略,细粒度的控件和配置管理技术,在不牺牲安全性的情况下采用DevOps模型。例如,将基础结构用作代码,将策略用作代码,则可以定义并跟踪大规模合规性。
为什么DevOps很重要
软件和互联网已经改变了世界及其行业,从购物到娱乐再到银行。软件不再仅仅支持业务。相反,它成为业务每个部分不可或缺的组成部分。公司通过作为在线服务或应用程序以及在各种设备上交付的软件与客户互动。他们还使用软件,通过改变价值链的各个部分(例如物流,通讯和运营)来提高运营效率。整个20世纪,实物商品公司使用工业自动化改变了他们设计,构建和交付产品的方式,当今世界的公司必须改变其构建和交付软件的方式。
如何采用DevOps模型
DevOps文化哲学
向DevOps过渡需要文化和思维方式的转变。最简单的说,DevOps就是要消除两个传统上孤立的团队,开发和运营之间的障碍。在某些组织中,甚至可能没有单独的开发和运营团队。工程师可能会同时做。借助DevOps,这两个团队可以共同努力,以优化开发人员的生产力和运营的可靠性。他们努力进行频繁的沟通,提高效率,并改善向客户提供的服务质量。他们对服务拥有完全的所有权,通常超出了他们通常通过考虑最终客户的需求以及如何为解决这些需求做出贡献来确定其角色或职务的范围。质量保证和安全团队也可能与这些团队紧密集成。
DevOps实践说明
有一些关键实践可以通过自动化和简化软件开发和基础架构管理流程来帮助组织更快地进行创新。这些实践大多数都是通过适当的工具来完成的。
一种基本实践是执行非常频繁但很小的更新。这就是组织为客户更快地进行创新的方式。这些更新在本质上通常比在传统发行惯例下执行的偶然更新更具增量性。频繁但较小的更新使每个部署的风险降低。他们可以帮助团队更快地解决错误,因为团队可以确定导致错误的最后部署。尽管更新的节奏和大小会有所不同,但是使用DevOps模型的组织比使用传统软件开发实践的组织更频繁地部署更新。
组织还可以使用微服务架构来使其应用程序更加灵活并实现更快的创新。微服务架构将大型,复杂的系统分离为简单,独立的项目。应用程序分为许多单独的组件(服务),每个服务的范围仅限于一个目的或功能,并且独立于其对等服务和整个应用程序运行。这种体系结构减少了更新应用程序的协调开销,并且当每个服务与拥有每个服务所有权的小型敏捷团队配对时,组织可以更快地移动。
但是,微服务和更高的发布频率的组合导致显着更多的部署,这可能带来运营挑战。因此,诸如持续集成和持续交付之类的DevOps实践解决了这些问题,并使组织以安全可靠的方式快速交付。基础架构自动化实践(例如基础架构,如代码和配置管理)有助于保持计算资源的弹性并响应频繁的更改。此外,使用监视和日志记录可帮助工程师跟踪应用程序和基础结构的性能,以便他们可以对问题做出快速反应。
这些实践共同帮助组织为客户提供更快,更可靠的更新。这是重要的DevOps实践的概述。
DevOps实践
持续集成
持续集成是一种软件开发实践,其中,开发人员定期将其代码更改合并到中央存储库中,然后运行自动构建和测试。持续集成的主要目标是更快地发现和解决错误,提高软件质量,并减少验证和发布新软件更新所花费的时间。
持续交付
持续交付是一种软件开发实践,在该实践中,将自动构建,测试和准备将代码更改发布到生产环境。它通过在构建阶段之后将所有代码更改部署到测试环境和/或生产环境来扩展持续集成。如果正确实现了持续交付,则开发人员将始终具有已通过标准化测试过程的可部署的构建工件。
微服务
微服务架构是一种将单个应用程序构建为一组小型服务的设计方法。每个服务都在自己的进程中运行,并使用轻量级机制(通常是基于HTTP的应用程序编程接口(API))通过定义明确的接口与其他服务进行通信。微服务是围绕业务功能构建的;每项服务的范围仅限于一个目的。您可以使用不同的框架或编程语言来编写微服务并作为单个服务或一组服务独立部署它们。
基础架构即代码
基础架构即代码是一种实践,其中使用代码和软件开发技术(例如版本控制和持续集成)来配置和管理基础架构。云的API驱动模型使开发人员和系统管理员能够以编程方式大规模地与基础架构进行交互,而无需手动设置和配置资源。因此,工程师可以使用基于代码的工具与基础架构进行交互,并以类似于对待应用程序代码的方式来对待基础架构。因为它们是由代码定义的,所以可以使用标准化模式快速部署基础结构和服务器,可以使用最新的补丁程序和版本对其进行更新,或者以可重复的方式进行复制。
开发人员和系统管理员使用代码来自动化操作系统和主机配置,操作任务等。使用代码使配置更改可重复且标准化。它使开发人员和系统管理员无需手动配置操作系统,系统应用程序或服务器软件。
通过将基础设施及其配置与云一起整理,组织可以动态地大规模监视和实施合规性。因此,可以以自动化方式跟踪,验证和重新配置由代码描述的基础结构。这使组织可以更轻松地管理资源变更,并确保以分布式方式正确实施安全措施(例如,信息安全或符合PCI-DSS或HIPAA)。由于不合规的资源可以被自动标记以进行进一步调查,甚至可以自动恢复到合规状态,因此组织内的团队可以以更高的速度前进。
监控和记录
组织监视指标和日志,以查看应用程序和基础架构性能如何影响其产品最终用户的体验。通过捕获,分类和分析由应用程序和基础架构生成的数据和日志,组织可以了解更改或更新如何影响用户,从而洞悉问题或意外更改的根本原因。随着服务必须24/7全天可用以及应用程序和基础结构更新频率的增加,主动监视变得越来越重要。创建警报或对此数据进行实时分析还有助于组织更主动地监视其服务。
沟通与合作
组织中加强沟通与协作是DevOps的关键文化方面之一。DevOps工具的使用和软件交付过程的自动化通过将工作流程以及开发和运营职责实际整合在一起来建立协作。在此基础上,这些团队围绕信息共享设定了强大的文化规范,并通过使用聊天应用程序,问题或项目跟踪系统以及Wiki促进了交流。这有助于加速开发人员,运营部门以及其他团队(如市场营销或销售)之间的沟通,使组织的各个部门更紧密地结合目标和项目。
DevOps工具
DevOps模型依靠有效的工具来帮助团队快速,可靠地为其客户进行部署和创新。这些工具可自动执行手动任务,帮助团队大规模管理复杂环境,并使工程师能够控制DevOps所实现的高速运行。AWS提供了专为DevOps设计的服务,并且这些服务首先构建为与AWS云一起使用。这些服务可帮助您使用上述DevOps实践。