软件的开发工作的大致流程
编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署
由上图可知「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」这三个概念的区别是在软件开发流程中根据实现的持续化,自动化的阶段的不同来划分的。
1.持续集成:
持续集成(Continuous integration),简称CI
持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。
CI 需要具备这些:
- ·全面的自动化测试。这是实践持续集成&持续部署的基础,同时,选择合适的自动化测试工具也极其重要;
- ·灵活的基础设施。容器,虚拟机的存在让开发人员和 QA 人员不必再大费周折;
- ·版本控制工具。如 Git,CVS,SVN 等;
- ·自动化的构建和软件发布流程的工具,如 Jenkins,flow.ci;
- ·反馈机制。如构建/测试的失败,可以快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。
持续集成的优点
- ·“快速失败”,在对产品没有风险的情况下进行测试,并快速响应;
- ·最大限度地减少风险,降低修复错误代码的成本;
- ·将重复性的手工流程自动化,让工程师更加专注于代码;
- ·保持频繁部署,快速生成可部署的软件;
- ·提高项目的能见度,方便团队成员了解项目的进度和成熟度;
- ·增强开发人员对软件产品的信心,帮助建立更好的工程师文化。
2.持续交付:
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
持续交付的好处
持续交付和持续集成的优点非常相似:
- ·快速发布。能够应对业务需求,并更快地实现软件价值。
- ·编码->测试->上线->交付的频繁迭代周期缩短,同时获得迅速反馈;
- ·高质量的软件发布标准。整个交付过程标准化、可重复、可靠,
- ·整个交付过程进度可视化,方便团队人员了解项目成熟度;
- ·更先进的团队协作方式。从需求分析、产品的用户体验到交互 设计、开发、测试、运维等角色密切协作,相比于传统的瀑布式软件团队,更少浪费。
3.持续部署:
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称为“Continuous Release”。
持续部署是理想的工作流程
“开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测试结果决定是否部署到预演环境,如果成功部署到预演环境,进行整体验收测试,如果测试通过,自动部署到产品环境,全程自动化高效运转。”
持续部署的优点
持续部署主要好处是,可以相对独立地部署新的功能,并能快速地收集真实用户的反馈。
持续集成(Continuous Integration)、持续交付(Continuous Delivery)和 持续部署(Continuous Deployment)提供了一个优秀的 DevOps 环境,对于整个团队来说,好处与挑战并行。无论如何,频繁部署、快速交付以及开发测试流程自动化都将成为未来软件工程的重要组成部分。
DevOps:Development和Operations的组合,可以把DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。
参考文章:
http://www.jianshu.com/p/2c6ebe34744a
http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html