DevOps是敏捷在软件开发团队的另一应用,它借鉴敏捷开发方法,并提出了轻量化运维。目前,DevOps处于高速增长的阶段,基于DevOps的变革正在如火如荼地展开,尤其是在大企业中,DevOps受到了广泛的欢迎。
作为一个热门的概念,DevOps近年来频频出现在各大技术社区和媒体的文章中,备受行业大咖的追捧,吸引了很多吃瓜群众的围观,这也就不可避免的带来了人们关于敏捷和DevOps的争论。很多人认为敏捷等于scrum,DevOps等于持续交付,这种过度简化的理解让敏捷和DevOps在众人口中成为了对立存在。
事实上,在2008敏捷大会Patrick DuBois和Andrew Clay Schafer尝试建立二者之间的关系并提出“敏捷架构”这一概念时,敏捷与DevOps之间的关系就已初现端倪。尽管Patrick后来提出了“DevOps”一词,但敏捷大会依然被追溯为DevOps的起点。
在最早期时,软件开发使用的还是瀑布模型。这种模型通过制定计划、需求分析、软件设计、程序编写、软件测试、运行维护等6个流程将整个软件生命周期衔接起来。这6个流程有着严格的先后次序之分,只有当前面的流程结束之后,下一个流程才能开始运转。
但项目不可能是单向运作的,客户有需求,产品也可能会有问题需要改进。随着时间推移,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少。在这个情况下,大家发现,笨重迟缓的瀑布式开发已经不合时宜了。于是,软件开发团队引入了“敏捷开发”的概念。
敏捷开发是一种能应对快速变化需求的软件开发方式,它采用 “迭代开发”,将软件项目需求分成多个迭代,且每个迭代成果在完成开发、测试、反馈等环节后都可以进行交付。
在这种模式下,每一个迭代就是一个周期,每个迭代后都能交付可独立运行的成果。不仅资源得到最大化的利用、反馈更加及时,而且交付成果的效率显著提高,极大地降低了风险。
敏捷开发极大地提高了软件开发的速度,但它注重的是软件的开发阶段,并未兼顾到运维阶段。在开发人员与运维人员进行交接的时候,并没有体现出敏捷的价值、原则,因此开发与运维之间仍缺乏一些必要的协作效率。这时DevOps就应运而生,DevOps促进开发、运维、测试之间的高效协同,集开发、运维、测试于一体,范围扩大到软件的完整生命周期,从而做到用持续软件交付来修复并更快地解决问题。
DevOps是基于敏捷开发而出现的,它通过将运维纳入产品开发过程的思维方式非常好地补充了敏捷开发。在DevOps框架中所表征的研发部分主要应用敏捷开发的最佳实践,比如Scrum方法等。其中敏捷所提倡的时间盒子(Timebox)、限制在制品(WIP)、持续集成(CI)和定义完成(DoD)等管理思想同样也适用于DevOps。
在软件生命周期中,不论是瀑布模型还是现如今各大公司都在积极转型的敏捷开发和DevOps,都是在软件行业不断发展中产生的,迎合了行业发展的需要。而在这个过程里,敏捷开发和DevOps相互协作一致对外,更像是盟友而非对手,经历了敏捷革命的洗礼与催化,它们必将殊途同归,同属于一片蓝天之下。
文.keller