[原]DevOps主要通过哪几方面的改变来提升发布软件效率和质量的?
传统的软件运营人员通常倾向于尽量避免修改功能,从而降低满足非功能性需求的风险。但如果拒绝了小的修改,而给定时间段内需要修改的总量不变,那么每次变更的规模就会变大,从而增加每次发布的风险(因为变更涉及的范围更大)。
DevOps的指导思想是“精益运维”。精益生产的很多原则,例如缩短交付周期、消除浪费、重视价值流动、拉动式生产、质量内建等,在DevOps中都得到了体现。与传统的软件发布方式相比,DevOps主要通过以下几方面的改变来提升效率和质量。
减少每次发布的变更范围。与传统的瀑布式开发模型相比,采用迭代的工作方式意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长(如图2所示)。与传统开发方法那种大规模的、不频繁的发布(通常以“季度”或“年”为单位)相比,具备DevOps能力的组织大大提升了发布频率(通常以“天”或“周”为单位)。
加强开发与运营协调。通过强有力的发布协调机制来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电话会议、即时消息、企业门户(wiki、sharepoint)等协作工具来确保所有相关人员理解变更的内容;使用统一的流程和工具,例如故事墙、燃尽图、在线项目管理工具(例如Mingle、JIRA)、配置管理工具(例如Subversion、Git、Mercurial)等。
自动化。借助强大的部署自动化手段和标准化的环境管理来降低部署操作的成本,确保部署任务的可重复性,减少部署出错的可能性,例如以下列举的几种方式。
(1)用VMWare或Xen等虚拟化技术标准化生产环境,实现生产环境的快速复制和快速恢复。
(2)用Puppet或Chef等工具自动化环境设置、软件安装/配置等操作,将配置信息转化为源代码,实现环境配置的版本控制。
(3)用Capistrano等工具自动化软件产品的部署,实现部署过程的版本控制。
(4)用dbdeploy等工具自动化数据库变更,实现数据迁移的版本控制。
(5)用Selenium、Cucumber等工具自动化生产环境的冒烟测试和回归测试。
从工作流程、协调机制、技术工具等几个方面同时着手,就能在软件组织中建立起DevOps能力,从而将精益运维变成现实。
本文摘自即将在8月初上市的《软件开发践行录》