基础概念:
持续集成(Continuous Integration)指的是,频繁地将代码集成到主干,以便快速发现错误、防止分支大幅度偏离主干。
持续集成的目的,就是在产品快速迭代的同时保持代码质量,它的核心措施主要有两点:
1)代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成。
2)通过Code Review、代码质量分析工具对代码质量进行把关,以便确定是否能够集成。
Martin Flower说过, “持续集成并不能消除Bug,而是让他们非常容易发现和改正。”
从图例上来看持续集成的流程就十分清晰了:
可以看出,持续集成的 核心 在于 确保新增的代码能够与原先代码正确的集成。与后续要介绍的持续交付以及持续部署,其最主要的差别也就在于其目标不同。
不过持续集成的流程还存在一定的异议:上图所示的流程为 Build -> Test,在阮老师的教程里头是 Test -> Build。不过,持续集成本身只不过是一种软件工程的方法或者策略,其并不规定具体的实现。在实际的应用中,还是需要结合具体的开发语言或者工具来定。
持续集成的优势
和我们一直在使用的 阶段集成(完成一个阶段的开发后执行代码的集成) 相比, 持续集成 的策略能够为我们带来哪些好处呢?
持续交付(Continuous Delivery)指的是,新版本为了能够快速安全的交付到生产环境中,需要将新版本先交付到类生产(Production-like)环境中(如UAT/Staging/Lab环境),以便进行相应的业务验证、安全验证、性能验证等过程。
一旦类生产环境验证通过,新版本就进入到生产阶段。
持续交付可以看作是持续集成的进一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
可以看到,与 持续集成 相比较,持续交付 添加了 Test -> Staging -> Production 的流程,也就是为新增的代码添加了一个保证: 确保新增的代码在生产环境中是可用的 。
在这一增加的流程中,Test 环节不仅仅包含基本的单元测试,还需要延伸到更为复杂的功能测试以及集成测试等。在这里,Staging 指的是 类生产环境 ,其尽可能的对真实的网络拓扑、数据库数据以及硬件设备等资源进行模拟,从而为测试人员反馈代码在生成环境中的可能表现。流程中每一个环节的执行结果都会对开发人员进行反馈,每一个出现的错误都会导致版本的回滚。当测试完毕确认无误之后,将由相关人员对其进行 手动部署到生产环境。
持续部署(Continuous Deployment)指的是,新版本通过类生产环境的验证后,自动部署到生产环境中。
持续部署可以看成持续交付的进一步。持续部署的前提是自动化完成测试、构建、验证等步骤。
持续部署的目标是,代码在任何时刻都可以进入自动地进入生产阶段,为最终用户提供服务。
可以看到,同 持续交付 相比 持续集成 的区别体现在对 Production 的自动化。从开发人员提交代码到编译、测试、部署的全流程不需要人工的干预,完全通过自动化的方式执行。这一策略加快了代码提交到功能上线的速度,保证新的功能能够第一时间部署到生产环境并被使用。
我对于 持续集成、 持续交付 和 持续部署 三者的理解是:
那么,在哪里能买得到呢? 该怎么对这些方法进行使用呢?
这就需要相关工具的配合协作了,以前端开发为例:
原文:https://www.cnblogs.com/momoyan/p/14094572.html