什么是DevOps?解决了哪些挑战?DevOps从何而来,又如何演变?
DevOps概念已经被越来越多的人所熟知,本文将从不同职能与DevOps的联系,以及DevOps运动如何演变入手,希望可以帮助你对DevOps有更深刻的理解。
1
DevOps从哪来?
DevOps是敏捷软件开发的产物,它是敏捷软件开发的产物,是敏捷软件开发为了跟上软件开发速度和实现吞吐量而产生的。在过去的十年中,敏捷文化和方法的进步揭示了对端到端软件交付生命周期更全面的方法的需求。
什么是敏捷软件开发?
敏捷开发是几个迭代和增量软件开发方法的总称。最流行的敏捷方法包括Scrum、看板、伸缩敏捷框架(安全)、精益开发和极限编程(XP)。
什么是敏捷软件开发?
虽然每一种敏捷方法在其特定的方法上都是独特的,但它们都有共同的愿景和核心价值(参见敏捷宣言)。它们都从根本上结合了迭代和迭代所提供的连续反馈,从而不断地改进和交付软件系统。它们都涉及到持续的计划、持续的测试、持续的集成,以及项目和软件的其他形式的持续发展。它们都是轻量级的,尤其是与传统的瀑布式流程相比,并且具有固有的适应性。关于敏捷方法最重要的一点是,它们都集中于授权人们快速有效地协作并一起做出决策。
一开始,敏捷团队主要由开发人员组成。随着这些敏捷团队在生产软件方面变得越来越高效,很明显,将质量保证(QA)和开发作为单独的团队是低效的。敏捷发展到包括QA,以提高软件交付的速度,现在敏捷再次发展到包括交付和支持成员,以将敏捷从构思扩展到交付。
DevOps理念通过在构建、验证、部署和交付阶段进一步简化软件变更的移动,从而扩展了敏捷开发实践,同时赋予跨职能团队从设计到生产支持对软件应用程序的完全所有权。
DevOps是一种IT思维方式,它鼓励软件开发人员和IT操作人员之间的交流、协作、集成和自动化,以提高交付软件的速度和质量。
DevOps团队专注于标准化开发环境和自动化交付过程,以提高交付的可预测性、效率、安全性和可维护性。DevOps理念为开发人员提供了对生产环境的更多控制,以及对生产基础设施的更好理解。DevOps鼓励授权团队自主构建、验证、交付和支持他们自己的应用程序。
2
DevOps解决了哪些挑战?
在开发DevOps应用程序之前,团队负责收集软件程序的业务需求并编写代码。然后,如果满足需求,则由单独的QA团队在单独的开发环境中测试程序,并发布操作要部署的代码。部署团队被进一步分割成孤立的组,比如网络组和数据库组。每当一个软件程序被扔到一个独立的团队中,它就增加了瓶颈。这种范例的问题在于,当团队分开工作时
- 开发人员通常不知道QA和Ops的障碍,这些障碍会阻止程序按照预期的方式工作。
- QA和Ops通常跨许多特性工作,很少涉及软件的商业目的和价值。
- 每个小组都有相反的目标,当事情出错时,就会导致效率低下和相互指责。
DevOps通过建立协作的跨功能团队来解决这些挑战,这些团队共同承担维护运行软件的系统的责任,并准备软件在系统上运行,同时增加质量反馈和自动化问题。
一个常见的前devops场景
开发团队的目标是发布尽可能多的功能,他们会向QA提交一个新版本。然后测试人员的目标就是找到尽可能多的bug。当测试人员将他们的发现提交给开发人员时,开发人员会变得有戒心,并责怪测试环境中的测试人员。测试人员回答说,问题不在于他们的测试环境,而在于开发人员的代码。
最终问题被解决了,QA把经过调试的新版本交给了Ops。Ops团队的目标是限制对他们系统的更改,但是他们担心发布代码会导致系统崩溃,互相指责。
Ops说Dev给他们提供了错误的工件。Dev说在测试环境中一切都运行良好。生产环境不是开发人员和质量保证人员的职责,所以当Ops花费整晚的时间来解决生产问题时,他们不会插手。
3
DevOps的目标是什么?
改进所有涉众之间的协作,从计划到交付,以及交付过程的自动化
- 提高部署频率
- 争取更快上市时间
- 降低新版本的失败率
- 缩短修复时间
- 缩短平均恢复时间
根据2015年DevOps状态报告,“高效能的IT组织部署频率提高30倍,交货时间缩短200倍;他们的故障减少了60倍,恢复速度提高了168倍。”
常见的Pre-DevOps场景软件团队在开始新的软件项目之前会面。团队包括开发人员、测试人员、操作人员和支持专业人员。该团队计划如何创建可用于部署的工作软件。
每天,当开发人员完成代码时,都会部署新的代码。自动化测试确保代码可以部署。在代码通过所有自动化测试之后,它将被部署到少数用户中。对新代码进行短期监控,以确保不会出现无法预料的问题并且稳定。一旦监控显示新代码是稳定的,新代码就会扩散到其他用户。规划和开发之后的许多(如果不是全部的话)步骤都无需人工干预。
4
你在DevOps中处于什么位置?
DevOps连续体是查看DevOps不同方面的一种有用的方法。底部的横轴表示人们认为DevOps从根本上应该关注的内容。一些人坚定地认为DevOps应该更重视文化而不是工具,而另一些人则倾向于重视工具而不是文化。
- 左下55%
- 右下角26%
- 14%左上
- 5%右上
思想领袖、博客作者经常在右上角描绘DevOps的愿景,他们往往对DevOps文化或自动化工具有强烈的偏见。关于DevOps文化和工具哪个更重要的争论从未停止,但事实是没有工具你就不能拥有DevOps,如果你没有强大的支持文化,那么世界上所有的工具都不会有帮助。
5
DevOps成熟的阶段是什么?
瀑布发展
在持续集成之前,开发团队需要花三到四个月的时间编写一组代码。然后这些团队会合并他们的代码以发布它。不同版本的代码会非常不同,并且更改太多,以至于实际的集成步骤可能要花费数月的时间这个过程非常低效。
持续集成
持续集成是将新开发的代码与将要发布的代码主体快速集成的实践。当团队准备发布代码时,持续集成可以节省大量时间。
DevOps没有提出这个术语。持续集成是一种源自极限编程方法的敏捷工程实践。这些术语已经存在了一段时间,但是DevOps采用了这个术语是因为成功进行连续集成需要自动化。持续集成通常是实现DevOps成熟的第一步。
从DevOps的角度来看,持续集成过程包括检入代码,将其编译成可用的(通常是二进制可执行的)代码,并运行一些基本的验证测试。
持续交付
持续交付是持续集成的扩展[DevOps阶段2]。它位于持续集成之上。在执行持续交付时,通过添加自动化和测试,就不需要频繁地将代码与主代码行合并,而是在几乎没有人工干预的情况下部署代码。这是一种让代码库持续处于准备部署状态的实践。
持续部署
持续部署,不要和持续交付混淆,它是持续交付的最先进的进化。这是在没有任何人工干预的情况下将所有方式完全部署到生产中的实践。
使用持续交付的团队不会部署未经测试的代码;相反,新创建的代码在被推出生产之前通过自动化测试运行。代码发布通常只对一小部分用户开放,在代码进一步传播之前,会有一个自动的反馈循环来监控质量和使用情况。
只有极少数的公司真正实践了持续部署。Netflix、Etsy、亚马逊、Pinterest、Flicker、IMVU和谷歌都是进行持续部署的公司的成功示例。
6
DevOps的价值是什么?
DevOps专注于建立协作文化并通过使用DevOps工具进行自动化来提高效率。虽然某些组织和人员倾向于彼此珍视,但事实是,要成功就需要文化和工具的结合。这是您需要了解的这两个DevOps值的信息。
DevOps着重于建立一种协作文化,并通过使用DevOps工具的自动化来提高效率。
DevOps文化
DevOps文化的特点是增加协作、减少孤岛、共享责任、自治团队、提高质量、重视反馈和增加自动化。许多DevOps值都是敏捷值,因为DevOps是敏捷的扩展。
敏捷方法是一种更全面的软件交付方式。敏捷开发团队根据可工作的软件来度量进展。产品负责人、开发人员、测试人员和用户体验人员为了相同的目标紧密合作。
DevOps只是在敏捷团队中加入了运维的思维模式,或许还会加入一名负责这些工作的团队成员。在DevOps之前,进度是根据工作软件来衡量的,而DevOps的进度是根据客户手中的工作软件来衡量的。
为了实现这一点,开发人员和运维人员必须打破孤岛,彼此协作,共同维护运行软件的系统,准备在系统上运行的软件,并增加质量反馈和交付自动化。
DevOps工具
DevOps工具包括配置管理、测试和构建系统、应用程序部署、版本控制和监视工具。持续集成、持续交付和持续部署需要不同的工具。虽然这三种实践都可以使用相同的工具,但是随着交付链的进展,将需要更多的工具。
7
DevOps中使用哪些工具?
前面我们简要讨论了DevOps中使用的一些工具;下面是一些需要了解的关键工具和实践。
源代码库
源代码存储库是开发人员签入和更改代码的地方。源代码存储库管理签入的不同版本的代码,因此开发人员不必重写彼此的工作。
流行的源代码存储库工具有Git、Subversion、Cloudforce、Bitbucket和TFS。
构建服务器
构建服务器是一种自动化工具,它将源代码存储库中的代码编译为可执行代码库。流行的工具有Jenkins, SonarQube和Artifactory。
配置管理
配置管理定义服务器或环境的配置。流行的配置管理工具是Puppet和Chef。
虚拟基础架构
AmazonWeb Services和Microsoft Azure就是虚拟基础设施的例子。虚拟基础设施由出售基础设施或平台即服务(PaaS)的云供应商提供。这些基础设施具有api,允许您使用配置管理工具(如Puppet和Chef)以编程方式创建新机器。也有私有云。例如,VMware有vCloud。私有虚拟基础设施允许在数据中心的硬件上运行云。
虚拟基础架构与自动化工具相结合,使组织实践DevOps的组织无需配置任何键盘即可配置服务器。如果要测试全新的代码,则可以将其自动发送到云基础架构,构建环境,然后运行所有测试,而无需人工干预。
测试自动化
测试自动化已经存在很长时间了。DevOps测试集中于构建管道中的自动化测试,以确保拥有可部署的构建时,已经准备好部署。在没有任何人工干预的情况下,不可能达到连续交付的结果,因为在没有广泛的自动化测试策略的情况下,代码是可以部署的。最流行的工具是Selenium and Water。
管道编排
管道就像一条生产装配线,从开发人员说“我想我已经完成”一直到代码被部署到生产或后期预生产环境中为止一直发生。