持续交付(Continuous Delivery)是指频繁地将软件的新版本交付给质量团队或者用户,以供评审,如果评审通过,代码就进入生产阶段。
持续部署(Continuous Deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境中。
通过上面的定义我们不难发现,持续突出的就是一个快字,商业软件的快速落地需求推动了软件工程的发展。可持续的、快速迭代的软件过程是当今主流开发规约。尤其在互联网行业,快速响应即是生命线。从一个想法到产品落地都处在冲锋的过程中,机会稍纵即逝。响应用户反馈也是万分敏捷,早晨的反馈在当天就会上线发布,快得让用户感觉倍受重视。“快”已经成为商业竞争力。这一切都要求企业具备快速响应的能力,这正是推动持续集成、持续交付、持续部署的动力。

产品或者项目的参与者应该能够深刻体会到团队协作时,工作交接(系统集成)部分最容易出问题,会消耗大量的沟通成本与时间成本,直接拖慢进度。所以,一个行之有效的项目管理过程(包括沟通管理、流程管理)在大型项目中效果明显。当前敏捷开发是主流,持续集成、持续交付与持续部署正好能够帮助高效地实施敏捷过程,促进开发、运维和质量保障(QA)部门之间的沟通、协作与整合。
1.2 CI&CD 带来的变化通常把开发工作过程分为编码、构建、集成、测试、交付、部署几个阶段(见图1-1),持续集成、持续交付、持续部署刚好覆盖这些阶段。从提高效率上来讲,对每个阶段的优化都可以缩短软件交付时间。持续集成、持续交付及持续部署的过程即是一个软件开发优化过程。
▲图1-1 CI&CD 过程
墨菲定律大家都不陌生,越是担心什么就越会发生什么;在多团队协作时,比如系统对接时,我们都会担心对接是否顺利,往往也不枉我们担心,时常我们会被集成折磨得焦头烂额。有很多团队只是担心,并没有拿出有效的措施去避免这种事情发生,以至于延长了交付时间。既然担心,我们何不及早集成,把问题先暴露出来?
目前多数公司都已经使用了版本管理工具来管理源码,比如GitLab、SVN 等版本管理工具。在版本管理这一块,公司会根据自己的实际情况来制订版本管理办法。对于持续集成来说,业内建议只维护一个源码仓库,降低版本管理的复杂度。开发人员持续提交自己的修改,自动触发编译,自动集成,自动进行自动化的测试,及早反馈集成过程中的问题,就能更好地防止出现平时不集成、集成就出问题的现象。
通过自动化的持续集成,把管理流程固化;保证集成的有序性、可靠性;减少版本发布的不合规性(开发或者测试手动打包,可能一天打多个包,更新多次,测试不充分),保证版本可控,问题可追溯(至于哪个版本出现的问题,可以回溯)。
一旦把这种持续集成的过程固定下来,形成一个自动化过程,就具备了持续集成的能力,软件交付的可靠性就大大增强,这无形也是一种竞争力。这种竞争力保证了集成的有序性、可靠性。过程的自动化抛弃了人工,降低了出错率,提高了速度,自然会节省成本。
1.3 CI&CD 实施现状在日常生活中处处都体现着一个“快”字,互联网更是对快追求到极致。持续集成、持续交付、持续部署在互联网行业更为广泛。作者没有统计哪些公司在用,只是圈子中朋友公司都实施了持续集成,具备持续交付能力。至于持续部署就没这么广泛了,毕竟持续部署不仅仅是技术问题,还涉及管理、营运等问题。尤其是一些金融企业、大型国企,开发团队外包,测试外包,运营半外包,安全要求高,很难快速实施。多数能够在测试环境中建立起CI&CD就已经很不错了。
阿里云、腾讯云、网易蜂巢等国内云,都提供了从GitLab 下拉代码、编译打包、单元测试、镜像制作、容器发布的功能。这个过程实际上就是持续集成、持续交付的过程,同时具有持续部署的能力。基本上,持续集成、持续交付、持续部署是一种服务能力,是云平台必须具备的能力。
下面引自2017 年DevOps 现状调查报告。
统计资料显示,DevOps 正在各个行业、各种规模的企业中落地。DevOps 团队的比例在2014 年是16%,在2015 年是19%,在2016 年是22%,在2017 年已经增长到27%,越来越多的企业和团队开始拥抱DevOps。图1-2 是2017 年DevOps 现状调查报告统计的从业分布情况。
完整的报告可以从qcloudimg 网站下载。
在本书撰写过程中2018 年DevOps 现状调查报告也已经出来,图1-3 是精英级执行团队使用DevOps 后的效率。
精英级执行团队在以下几个方面有着突出的表现。
1)代码发布频率高46 倍。
2)代码从提交至发布的速度快2555 倍。
3)故障变更率降低1/7。
4)事故恢复时间快2604 倍。
另外,云计算持续增长(见图1-4)。有17%的调查者仍然没有使用云厂商的服务。AWS最受欢迎,占比为52%,Azure 屈居次席,占比为34%。
1.4 CI&CD 技术栈
目前持续集成、持续交付、持续部署在开源社区都是热点,用户可以方便地利用这些开
源组件来构建自己企业的持续集成、持续交付及持续部署平台。
持续集成工具中以Jenkins 使用最为广泛,由Jenkins 来作业化持续集成过程;利用GitLab
来管理程序版本;利用Gerrit 来做代码审核;利用Sonar 进行代码质量扫描;利用JUnit 进行
单元测试;利用Docker compose 来构建镜像;利用Docker 来部署容器;利用Kubernetes、
Rancher 等进行服务编排。图1-5 显示了常见的CI&CD 技术栈。后续讲解CI&CD 落地时会
运用到其中的一些技术与工具。当然,基本上都运用开源工具,这也有助于企业在落地时节
省费用。
腾讯研发总监leo fan,阿里巴巴高级技术专家吴毓雄,滴滴出行高级技术专家任杨,飞谷云创始人\大数据实战专家\平安壹钱包前大数据架构师张粤磊联合推荐
来自一线的实践经验,深入呈现技术细节;详实的实操示例,即学即用的实战技术
讲解了持续集成中引人入胜的内容:CI/CD到底要解决什么问题?它与DevOps之间的关系是怎样的?程序员如何用工具化的系统持续进行代码的版本管理、构建、打包、集成、测试和部署?利用云平台和容器技术实现弹性伸缩价值等