当前位置: 首页 > news >正文

CI/CD是什么?如何理解持续集成、持续交付和持续部署

CI/CD 是一种通过在应用开发阶段引入自动化频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成持续交付持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)。

具体而言,CI/CD 可让持续自动化持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。

CI 是什么?CI 和 CD 有什么区别?

缩略词 CI / CD 具有几个不同的含义。CI/CD 中的“CI”始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。

CI/CD 中的“CD”指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度。

持续交付通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后由运维团队将其部署到实时生产环境中。这旨在解决开发和运维团队之间可见性及沟通较差的问题。因此,持续交付的目的就是确保尽可能减少部署新代码时所需的工作量。

持续部署(另一种“CD”)指的是自动将开发人员的更改从存储库发布到生产环境,以供客户使用。它主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。持续部署以持续交付的优势为根基,实现了管道后续阶段的自动化。

CI/CD 既可能仅指持续集成和持续交付构成的关联环节,也可以指持续集成、持续交付和持续部署这三项构成的关联环节。更为复杂的是,有时“持续交付”也包含了持续部署流程。

归根结底,我们没必要纠结于这些语义,您只需记得 CI/CD 其实就是一个流程(通常形象地表述为管道),用于实现应用开发中的高度持续自动化和持续监控。因案例而异,该术语的具体含义取决于 CI/CD 管道的自动化程度。许多企业最开始先添加 CI,然后逐步实现交付和部署的自动化(例如作为云原生应用的一部分)。

CI 持续集成(Continuous Integration)

现代应用开发的目标是让多位开发人员同时处理同一应用的不同功能。但是,如果企业安排在一天内将所有分支源代码合并在一起(称为“合并日”),最终可能造成工作繁琐、耗时,而且需要手动完成。这是因为当一位独立工作的开发人员对应用进行更改时,有可能会与其他开发人员同时进行的更改发生冲突。如果每个开发人员都自定义自己的本地集成开发环境(IDE),而不是让团队就一个基于云的 IDE 达成一致,那么就会让问题更加雪上加霜。

持续集成(CI)可以帮助开发人员更加频繁地(有时甚至每天)将代码更改合并到共享分支或“主干”中。一旦开发人员对应用所做的更改被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对应用造成破坏。这意味着测试内容涵盖了从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码和现有代码之间存在冲突,CI 可以更加轻松地快速修复这些错误。

CD 持续交付(Continuous Delivery)

完成 CI 中构建及单元测试和集成测试的自动化流程后,持续交付可自动将已验证的代码发布到存储库。为了实现高效的持续交付流程,务必要确保 CI 已内置于开发管道。持续交付的目标是拥有一个可随时部署到生产环境的代码库。

在持续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都涉及测试自动化和代码发布自动化。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中。

CD 持续部署(Continuous Deployment)

对于一个成熟的 CI/CD 管道来说,最后的阶段是持续部署。作为持续交付——自动将生产就绪型构建版本发布到代码存储库——的延伸,持续部署可以自动将应用发布到生产环境。由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都得依赖精心设计的测试自动化。

实际上,持续部署意味着开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。总而言之,所有这些 CI/CD 的关联步骤都有助于降低应用的部署风险,因此更便于以小件的方式(而非一次性)发布对应用的更改。不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段,因此前期投资还是会很大。

附录

  1. IT 自动化是什么意思? https://www.redhat.com/zh/topics/automation/whats-it-automation
  2. CI/CD是什么?如何理解持续集成、持续交付和持续部署 https://www.redhat.com/zh/topics/devops/what-is-ci-cd

IT 自动化是什么意思?

IT 自动化有时也称为基础架构自动化,是使用软件来创建可重复的指令和进程,以此取代或减少人类与 IT 系统的交互。自动化软件在这些指令、工具和框架的约束范围内工作,从而在几乎不需人工干预的情况下执行任务。

为什么需要 IT 自动化?

自动化是 IT 优化和数字化转型的关键。如今多变的 IT 环境需要以前所未有的速度进行扩展,而这个目标的实现离不开 IT 自动化。

IT自动化的范围:有哪些可以自动化?

理论上,只要是 IT 任务,就能实现一定程度的自动化。所以,自动化可以整合并应用到任何方面,如网络自动化、基础架构、云置备与标准操作环境(SOE),以及应用部署和配置管理等。

自动化功能和应用可以进一步延伸到具体的技术(如容器)、方法学(如开发运维)和更广阔的领域(如 边缘计算安全性、测试和监控/警报)。

自动化能带来哪些好处?

或许这么说有点绝对,但全面采用 IT 自动化可以让您的员工无需再进行重复的手动流程。这样,团队可以提高生产率、减少错误、改进协作,腾出时间去做更有意义、更有思想的工作。

集成地狱

集成地狱是指交付团队中的成员集成其个人代码时的生产点。在传统的软件开发环境中,这种集成过程很少是平滑且无缝的,而是需要花费数小时甚至数天的时间来修复代码,以便最终进行集成。持续集成(CI)旨在通过鼓励和鼓励团队成员进行频繁集成(例如每小时或至少每天一次)来完全避免这种情况。

持续集成

持续集成(CI)是一种极限编程(XP)的实践,其中交付团队的成员经常集成他们的工作(例如每小时或每天至少一次)。每个集成都由自动构建验证,该构建也执行测试,以快速,自动地检测任何集成错误。CI的主要目标是避免所谓的“集成地狱”。
CI的主要好处是可以大大减少集成问题,并改善团队协作,从而可以比传统软件开发环境更快地发布更高质量的软件。

相关文章:

  • el-pagination样式美化
  • js高效修改对象数组里的对象属性名
  • vue+element树组件 实现树懒加载的过程详解
  • JS 异步编程六种方案
  • el-table样式美化
  • JavaScript模块化编程文章集锦
  • 《“ 追梦人” 的逐梦路:探寻大学生创客群体的发展之道》
  • Python Web开发 # Flask框架教程
  • 项目上线流程
  • 刻意练习
  • 【成长经历】【钉钉前端】 高中毕业-如何用 15 年从小白到技术专家
  • 转正实习、春招、秋招、校招、社招的4个区别和陷阱
  • 前端工具方法
  • 【转载】8年工作的总结
  • 【转】计算机保研经验总结
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • angular学习第一篇-----环境搭建
  • css属性的继承、初识值、计算值、当前值、应用值
  • django开发-定时任务的使用
  • JAVA SE 6 GC调优笔记
  • jdbc就是这么简单
  • Lucene解析 - 基本概念
  • Ruby 2.x 源代码分析:扩展 概述
  • scala基础语法(二)
  • 阿里研究院入选中国企业智库系统影响力榜
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 开源地图数据可视化库——mapnik
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 入门级的git使用指北
  • 使用agvtool更改app version/build
  • 我建了一个叫Hello World的项目
  • 项目实战-Api的解决方案
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 阿里云API、SDK和CLI应用实践方案
  • ​如何防止网络攻击?
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #### go map 底层结构 ####
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)fread与fwrite详解
  • (C语言)共用体union的用法举例
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (译)计算距离、方位和更多经纬度之间的点
  • (原)本想说脏话,奈何已放下
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)项目管理杂谈-我所期望的新人
  • .NET命令行(CLI)常用命令
  • ??javascript里的变量问题
  • @angular/cli项目构建--Dynamic.Form
  • [ C++ ] STL---string类的使用指南
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [Angular 基础] - 自定义指令,深入学习 directive