摘要: 天下武功唯快不破 一个新产品特性经由市场客户反馈,产品经理提炼需求,UI原型设计,研发设计开发等各个环节终于到了测试和交付环节。将新特性交付客户,在市场经受验证,提高运维工具在市场中的竞争力,其中重要的一个秘诀就是”快“。 然而运维工具开发在引入持续交付实践之...
天下武功唯快不破
一个新产品特性经由市场客户反馈,产品经理提炼需求,UI原型设计,研发设计开发等各个环节终于到了测试和交付环节。将新特性交付客户,在市场经受验证,提高运维工具在市场中的竞争力,其中重要的一个秘诀就是”快“。
然而运维工具开发在引入持续交付实践之前存在以下问题:
1. 测试的准备和执行慢。手动组装各子模块的打包,系统环境变更,测试包构建,系统安装,然后交付给测试人员,效率低还容易出错。
2. 开发和测试串行。交付测试后需花费3人日测试,中间如果测试出问题,还需要反复。
3. 开发和测试环境不一致。出现由于环境不同引起的系统行为差异,问题调查费时费力。
4. 版本升级前后,系统运行环境的变更无记录。正式发包前手动修改系统环境,增加不确定性因素,对系统造成整体性影响。
为了解决以上问题,美创运维开发团队引入了DevOps实践中的持续交付,基于持续构建、测试和集成的开发原则对原有方法进行改进。
怎么做持续交付
在整个交付过程中,通常包括环境搭建, 代码部署, 测试的准备和执行过程。
一、基于容器技术的环境隔离
在环境搭建步骤,我们通过docker容器技术将系统运行所需要的操作系统依赖,软件运行环境依赖等都封装在容器中,通过容器编排技术将各个组件编排成完整系统,使得开发,测试和生产系统运行的环境都是一模一样的。
二、变更管理和部署流水线
将系统运行基础设施和产品代码一并纳入git分布式源代码管理系统。”部署流水线”是指确保代码和基础设施始终处于可部署状态,所有提交到主干的代码都可以安全地部署到生产环境。
三、自动化构建
在开发环境中,采用Jenkins系统构造基于代码提交触发自动构建的方式,更新升级开发环境。开发人员在类生产环境中编写、测试和运行自己的代码,就能在日常工作中完成代码与环境集成的大部分工作,而不需要等到发布时才做。在第一个开发周期结束时,代码和环境已经被多次集成,应用已被证明能在类生产环境中正确运行。
在测试环境中,采用Jenkins系统进行每日构建。每天将开发分支的代码自动化获取,安装构建基础设施和软件运行依赖,生成docker镜像,在测试环境安装升级,并调用自动化测试脚本进行测试。在构建失败或自动化执行失败时,系统发邮件通知开发人员,第一时间处理。这样在整个开发周期中,测试人员和开发人员都可以并行工作。
测试完成后一键发布正式版本。通过以上改进,使得运维工具的发布迭代加速,以每个月2次的发布频次交付市场。
下一步方向
l 自动化测试覆盖率进一步加强。
l 系统架构演进。
l 持续学习和实验文化在团队中推广。
参考文献
1.Jenkins基于tag或分支参数化构建实践 http://wiki.mchz.com.cn/pages/viewpage.action?pageId=25069971
2.DevOps 实践指南 [美]Gene Kim, Jez Humble, Patrick Debois, John Wills
3.Docker缓存机制及编写dockerfile注意事项 http://wiki.mchz.com.cn/pages/viewpage.action?pageId=25070166