【编者的话】DevOps是Develop与Operations的缩写。DevOps不是凭空冒出来的,是我们持续集成思想的延伸。
使用敏捷或其他软件开发过程与方法,项目要求加快产品交付的速率,虚拟化和云计算基础设施(可能来自内部或外部供应商)日益普遍,都促使我们不断向DevOps方向发展。
因此,现在的业务开发,对传统的CI提出了更新更高的要求,借助于云技术,我们可以在DesOps趋势下实现从传统CI向云化CI的演变。
笔者所在项目在敏捷推进过程中,已经建立了一套以Jenkins为核心的CI持续集成系统,相信很多项目也是通过Jenkins来构建项目自己的CI防护网的。
基于CI持续集成系统对敏捷的重要性,稳定和高效成为了CI集成系统最重要的两个要素。
在实际使用过程中,各种类型的编译环境,部署安装、配置维护,成本越来越大,工作重复、效率低;随着CI集成越来越复杂,对设备的性能、稳定性要求越来越高,维护成本也越来越高,越来越专业,需要人员有专门的技能才能维护。
同时随着敏捷的深入,快速交付、快速部署,对CI集成时间、周期、效率提出了更高的要求,CI系统的效率和反馈速度也成为瓶颈。产品级敏捷也期望能够全程监控CI的过程质量,全方位度量、质量保证,对CI系统提出了更高的要求。
综上所述,总结一下项目在持续集成方面的痛点:
现在DevOps概念在业界比较火热,并逐渐成为趋势。这也让我们觉得借助云计算和DevOps理念来进一步持续推进传统CI,正是我们需要的。
(1)OKR驱动
OKR驱动,本着向更有价值,更有挑战性的目标冲刺的原则。
在部门的改进工作坊上,结合项目的痛点,大家一起制定了项目的DevOps贯通OKR计划。跟随着公司研发云项目的不断演进过程中,逐渐认识到云CI在DevOps推进过程中,越来越扮演着非常重要的角色。
经过研究,云CI使用到的Jenkins和Docker技术,以及云内的计算资源,能够助力后面的云托管、云构建,所以CI上云成为我们DevOps推进中非常有价值的事情。
(2)总体方案
借助云计算的发展,传统CI向云CI进行演进。
(3)总体流程
流水线任务优化和拆分,串行变并行,资源云化,度量及时反馈。
(1)执行环境标准化
主要的原则是:环境分类、标准化,利用Docker技术资源云化。
执行环境标准化的目的是将CI任务按照运行环境分类管理,并且梳理出每个任务运行所依赖的环境要求(重点:操作系统以及软件)。
以我们项目IaaS版本构建为例:
最终,执行环境需要使用Docker技术实现容器化,实现Ship&Run。
(2)CI任务整理优化
主要的原则是:任务拆分,去依赖和状态,串行变并行。
(1)CI任务配置执行
相比于以前,现在CI Jenkins任务的部署就非常简单,尤其是使用Mesos集群的任务,可以简单到只需要下面这样Pull&Run:
docker pull mirrors.zte.com.cn:5000/ft-cloudci-centos:latest docker run --rm mirrors.zte.com.cn:5000/ft-cloudci-centos
因为需要使用到Linux、Docker和Jenkins,所以这些相应的技术要熟悉。
另外,CI任务改并行后,必须要考虑多任务并行时,代码文件(含二进制文件)在Mesos集群机器中动态挂载的问题。
经过实践,建议的文件挂载方式如下:
通过CI上云,解决了项目CI的四个痛点。
现状:版本已经上线,任务优化和拆分,串行变并行,资源云化
收益: