谈谈持续集成,持续交付,持续部署之间的区别

常常会听到持续集成,持续交付,持续部署,三者到底是什么,有何联系和区别呢?数据库


假如把开发工做流程分为如下几个阶段:编程

编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署segmentfault

正如你在上图中看到,「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」有着不一样的软件自动化交付周期。服务器

持续集成

持续集成是指软件我的研发的部分向软件总体部分交付,频繁进行集成以便更快地发现其中的错误。“持续集成”源自于极限编程(XP),是 XP 最初的 12 种实践之一。运维

CI 须要具有这些:

  • 全面的自动化测试。这是实践持续集成&持续部署的基础,同时,选择合适的自动化测试工具也极其重要;工具

  • 灵活的基础设施。容器,虚拟机的存在让开发人员和 QA 人员没必要再大费周折;单元测试

  • 版本控制工具。如 Git,CVS,SVN 等;测试

  • 自动化的构建和软件发布流程的工具,如 Jenkins,flow.ciui

  • 反馈机制。如构建/测试的失败,能够快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。编码

持续集成的优势

  • “快速失败”,在对产品没有风险的状况下进行测试,并快速响应;

  • 最大限度地减小风险,下降修复错误代码的成本;

  • 将重复性的手工流程自动化,让工程师更加专一于代码;

  • 保持频繁部署,快速生成可部署的软件;

  • 提升项目的能见度,方便团队成员了解项目的进度和成熟度;

  • 加强开发人员对软件产品的信心,帮助创建更好的工程师文化。

持续集成,该从何入手

最重要的一环是选择合适的持续集成系统。是搭建私有部署仍是选择托管型持续集成系统,关键在于团队运行的基础设施,团队对持续集成系统的资源投入力度。

对比一下私有部署和托管型持续集成系统,或许能帮助你更好地作出选择。

  • Self Hosted CI 指的是将软件部署在公司的机房或内网中,须要提供多台服务器来完成 CI 系统的运转,同时须要对不一样机器之间进行环境配置。好比Maven 或 Gradle 或 Jenkins ,他们的特色是自由开源,且文档支持普遍。优势在于对构建环境有彻底的控制权,可以实现彻底定制。但须要搭建环境和配置、维护成本高,须要买专门的机器,花费较多人力物力且更新迁移风险高;

  • Hosted CI 指的是由 SaaS 型的 CI 服务,全程在线进行构建配置,不须要考虑装机器,装软件,环境搭建等成本。常见的有 CircleCI,Codeship 和 TravisCI 等,还有国内最新的持续集成服务——flow.ci 。SaaS 型的 CI 的特色在于无需额外机器,几分钟就能够用起来。能够根据你的须要动态调度资源。省时,省心,省力。

总体而言,Jenkins 过去一直是大部分公司的选择,但这个现象正在发生改变,随着公有云服务、Docker,SaaS 的普及,愈来愈多的企业开始选择 Hosted CI,也就是托管型持续集成系统。

另外,在选择合适的持续集成服务时,还须要考量系统的灵活度以适应公司不一样阶段的开发测试需求。

选择持续集成系统只是持续集成应用的其中一步,还须要创建合适的持续集成文化好比代码质量管控、测试文化等。作好持续集成,可为持续交付与持续部署打好坚实基础。

持续交付

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,创建在高水平自动化持续集成之上。

试想一想,若是说等到全部东西都完成了才向下个环节交付,致使全部的问题只能再最后才爆发出来,解决成本巨大甚至没法解决。好比,咱们完成单元测试后,能够把代码部署到链接数据库的 Staging 环境中进行更多的自动化测试。若是代码没有问题,能够继续手动部署到生产环境中。固然,持续交付并非指软件每个改动都要尽快部署到产品环境中,它指的是任何的代码修改均可以在任什么时候候实施部署。

持续交付的好处

持续交付和持续集成的优势很是类似:

  • 快速发布。可以应对业务需求,并更快地实现软件价值。

  • 编码->测试->上线->交付的频繁迭代周期缩短,同时得到迅速反馈;

  • 高质量的软件发布标准。整个交付过程标准化、可重复、可靠,

  • 整个交付过程进度可视化,方便团队人员了解项目成熟度;

  • 更先进的团队协做方式。从需求分析、产品的用户体验到交互 设计、开发、测试、运维等角色密切协做,相比于传统的瀑布式软件团队,更少浪费。

持续部署

持续部署是指当交付的代码经过评审以后,自动部署到生产环境中。持续部署是持续交付的最高阶段。这意味着,全部经过了一系列的自动化测试的改动都将自动部署到生产环境。它也能够被称为“Continuous Release”。

为何说持续部署是理想的工做流程?

“开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测试结果决定是否部署到预演环境,若是成功部署到预演环境,进行总体验收测试,若是测试经过,自动部署到产品环境,全程自动化高效运转。”

实际上,产品在从需求到部署的过程当中,会经历若干种不一样的环境,例如 QA 环境、各类自动化测试运行环境、生产环境等。这些环境的搭建、配置、管理,产品在不一样环 境中的具体部署,情况是比较很是复杂的,从头至尾地全自动持续部署的确困难。那么,若是能作到持续交付,保证代码在模拟环境没问题,也许团队成员作到真正的心理有数。

持续部署的优势

持续部署主要好处是,能够相对独立地部署新的功能,并能快速地收集真实用户的反馈。

“You build it, you run it”,这是 Amazon 一年能够完成 5000 万次部署,平均每一个工程师天天部署超过 50 次的核心秘籍。

最后

「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」提供了一个优秀的 DevOps 环境,对于整个团队来讲,好处与挑战并行。不管如何,频繁部署、快速交付以及开发测试流程自动化都将成为将来软件工程的重要组成部分。

欢迎分享你的观点。

【参考文章】

相关文章
相关标签/搜索