持续集成、持续交付、持续部署的关系和区别
1、概述
通常,一个软件的开发过程大概包括以下几个阶段:编码、构建、集成、测试、交付、部署。
如下图所示,持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)有着不同的软件自动化交付周期。
2、什么是持续集成?
持续集成(Continuous Integration)是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。
在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测试环境。这样做的好处就是,随时发现问题,随时修复。因为修复问题的成本随着时间的推移而增长,越早发现,修复成本越低。
3、什么是持续交付?
持续交付(Continuous Delivery)在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
如果说等到所有东西都完成了才向下个环节交付,导致所有的问题只能在最后才爆发出来,解决成本巨大甚至无法解决。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中进行更多的自动化测试。如果代码没有问题,可以继续手动部署到生产环境中。当然,持续交付并不是指软件每一个改动都要尽快部署到产品环境中,它指的是任何的代码修改都可以在任何时候实施部署。
4、什么是持续部署?
持续部署(Continuous Deployment)是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。
持续部署的工作过程如下:
开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测试结果决定是否部署到预演环境,如果成功部署到预演环境,进行整体验收测试,如果测试通过,自动部署到产品环境,全程自动化高效运转。
5、总结
综上所示,从持续集成、持续交付到持续部署是一个不断递进的过程,软件开发自动化程度也随之不断提高,对于团队来说,需要选择合适的软件工具,并为团队协同开发搭建合理的工作流程。