浅谈 CI/CD 持续集成 持续交互 持续交付
CI/CD
「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」提供了一个优秀的 DevOps 环境。
DevOps简单的说就是为了打破传统开发和运维之间的隔阂与低效,在保证产品质量的前提下实现更自动化、更高效的协作与产品的交付。

持续集成(Continuous integration)
是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现和定位其中的错误。
持续集成强调开发人员提交了新代码之后,立刻自动的进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
持续集成过程中很重视自动化测试验证结果,对可能出现的一些问题进行预警,以保障最终合并的代码没有问题。
持续交付(Continuous delivery,缩写为 CD)
,是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付并不是指软件每一个改动都要尽快部署到产品环境中,它指的是任何的代码修改都可以在任何时候实施部署。
这里强调:
- 手动部署
- 有部署的能力,但不一定部署
持续部署(continuous deployment)
是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率,让 engineering productivity 最大化。
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。
这里强调:
- 持续部署是自动的
- 持续部署是持续交付的最高阶段
持续交付与持续部署的关系:
持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署。如果要实施持续部署,必须先实施持续交付。
- 持续交付表示的是一种能力
- 而持续部署则是一种方式
持续交付是持续集成的扩展,持续部署是持续交互的最高阶段。
CI&CD流程:

详细点(How):

Why:
如果开发的是一个新项目,暂时还没有任何用户,那么每次提交代码后发布将会特别简单,可以随时随地发布。一旦产品开始开发后,就需要提高测试文化,并确保在构建应用程序时增加代码覆盖率。当您准备好面向用户发布时,您将有一个非常好的连续部署过程,在该过程中,所有新的更改都将在自动发布到生产环境之前进行测试。
如果正在开发的是一个老系统,就需要放慢节奏,开始打造持续集成&持续交付。首先可以完成一些简单可自动化执行的单元测试,不需要考虑复杂的端到端的测试。另外,应该尽快尝试自动化部署,搭建可以自动化部署的临时环境。因为自动化部署,可以让开发者去优化测试用例,而不是停下来联调发布。
快速交付价值
举个例子,你家装修厨房,其中一项是铺地砖,边角地砖要切割大小。如果一次全切割完再铺上去,发现尺寸有误的话浪费和返工时间就大了,不如切一块铺一块。这就是持续集成。
装修厨房有很多部分,每个部分都有检测手段,如地砖铺完了要测试漏水与否,线路铺完了要通电测试电路通顺,水管装好了也要测试冷水热水。如果全部装完了再测,出现问题可能会互相影响,比如电路不行可能要把地砖给挖开……。那么每完成一部分就测试,这是持续交互。
全部装修完了,你去验收,发现地砖颜色不合意,水池太小,灶台位置不对,返工吗?所以不如没完成一部分,你就去用一下试用验收,这就是持续部署。
DevOps 现状调查报告也已经出来,精英级执行团队在以下几个方面有着突出的表现:
1)代码发布频率高46 倍。
2)代码从提交至发布的速度快2555 倍。
3)故障变更率降低1/7。
4)事故恢复时间快2604 倍。
CI&CD 的价值:
持续集成(Continuous Integration,CI)是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括静态扫描、安全扫描、自动测试等过程)的检验,以尽快发现集成错误。许多团队发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度(以上引用自Martin Fowler 对持续集成的定义)。 持续集成的目的:就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
Martin Fowler 说过,”持续集成并不能消除 Bug,而是让它们非常容易发现和改正。”
持续交付(Continuous Delivery)是指频繁地将软件的新版本交付给质量团队或者用户,以供评审,如果评审通过,代码就进入生产阶段。持续交付的目的:用来确保让代码能够快速、安全的部署到产品环境中,它通过将每一次改动都提交到一个模拟产品环境中,使用严格的自动化测试,确保业务应用和服务能符合预期。
持续部署(Continuous Deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境中。
商业软件的快速落地需求推动了软件工程的发展。可持续的、快速迭代的软件过程是当今主流开发规约。在互联网行业,快速响应即是生命线。从一个想法到产品落地都处在冲锋的过程中,机会稍纵即逝。响应用户反馈也是万分敏捷,早晨的反馈在当天就会上线发布,快得让用户感觉倍受重视。“快”已经成为商业竞争力。这一切都要求企业具备快速响应的能力,这正是推动持续集成、持续交付、持续部署的动力。
产品或者项目的参与者应该能够深刻体会到团队协作时,工作交接(系统集成)部分最容易出问题,会消耗大量的沟通成本与时间成本,直接拖慢进度。所以,一个行之有效的项目管理过程(包括沟通管理、流程管理)在大型项目中效果明显。当前敏捷开发是主流,持续集成、持续交付与持续部署正好能够帮助高效地实施敏捷过程,促进开发、运维和质量保障(QA)部门之间的沟通、协作与整合。
更先进的团队协作方式。从需求分析、产品的用户体验到交互 设计、开发、测试、运维等角色密切协作,相比于传统的瀑布式软件团队,更少浪费。
PPT讲解链接:
链接:https://pan.baidu.com/s/1VdKviBdwBMs-zD3eiqswjA 密码:yzvk
