浅谈持续集成(CI)、持续交付(CD)、持续部署(CD)
CI/CD是实现敏捷和Devops理念的一种方法,具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的
整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发、
测试、运维团队以敏捷方式协同支持。
首先是瀑布,其次是敏捷,现在是DevOps。这就是现代开发人员开发优质产品的方式。随着DevOps的兴
起,出现了持续集成,持续交付(CI / CD)和持续部署的新方法。传统的软件开发和交付方法正在迅速过时。
从历史上看,在敏捷时代,大多数公司会以每月,每季度,每半年甚至每年的发行版来部署/销售软件(还记得
那些日子吗?)。但是,现在在DevOps时代,每周,每天甚至一天多次都是标准。当SaaS接管世界时,尤其
如此,您可以在不强迫客户下载新组件的情况下,轻松地动态更新应用程序。很多时候,他们甚至都不会意识
到事情正在发生变化。
持续集成(Continuous Integration)
大师 Martin Fowler 对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,
通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,
自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发
内聚的软件。
持续集成的重点是将各个开发人员的工作产品融合到一个存储库中。通常,此操作每天要进行多次,其主
要目的是为了及早发现集成错误,最终将导致更紧密的内聚和更多的开发协作。连续输送的目的是使展开或释
放过程中固有的摩擦点最小化。通常,实现涉及自动化构建部署的每个步骤,以便可以随时随地(理想情况下)
完成安全的代码发布。 连续部署是一种更高的自动化程度,其中,只要对代码进行了重大更改,都会自动进行
构建/部署。
通过持续集成,开发人员经常将其代码集成到通用存储库的主分支中。开发人员不会在每个周期的末尾单
独构建功能并提交每个功能,而是会努力在任何一天多次向存储库贡献软件工作产品。
这里的主要想法是通过让开发人员更快,更频繁地进行集成来降低集成成本。在实践中,开发人员通常会
在集成时发现新代码与现有代码之间的边界冲突。如果尽早且经常进行,则期望这样的冲突解决方案将更容易
执行且成本更低。
当然,需要权衡取舍。此过程更改不提供任何其他质量保证。许多组织发现这种集成变得更加昂贵,因为
它们依靠手动过程来确保新代码不会引入新的错误,也不会破坏现有的代码。为了减少集成任务中的摩擦,连
续集成依赖于测试套件和自动测试执行。
持续交付(Continuous Delivery)
这里借用阮一峰老师的说法,持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付
给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。 持续交付可以看作持续集成的下一步。
它强调的是,不管怎么更新,软件是随时随地可以交付的。注意,持续交付在自动化测试和集成结束后,不一
定会自动部署。如果有自动部署,则是持续部署的概念了。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」
(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库
的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。
持续部署(Continuous Deployment)
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶
段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称为“Continuous Release”。
持续部署扩展了持续交付,因此,如果软件构建通过所有测试,则将自动部署。在这样的过程中,
不需要人来决定何时以及什么生产。CI/CD系统的最后一步将自动部署成功退出交付管道的所有构建组
件/软件包。可以将此类自动部署配置为快速向客户分发组件,功能和修补程序,并准确地提供当前生
产中的内容。
结语
持续集成、持续交付、持续部署相辅相成,提供了一个良好的DevOps环境,对于整个团队来说,
收益与挑战并行。从软件开发发展的趋势来看,频繁部署、快速交付以及开发测试流程的自动化将成
为未来软件工程的重要组成部分。
浅谈持续集成(CI)、持续交付(CD)、持续部署(CD)的更多相关文章
- Gitlab+Gitlab-CI+Docker实现持续集成(CI)与持续部署(CD)
写在前面 记录一下,一个自动化开发部署项目的构建过程与简单使用,实现真正的DevOps gitlab安装 步骤一:安装依赖 yum -y install git gcc glibc-static te ...
- GitLab、Jenkins结合构建持续集成(CI)环境
1 持续集成 概述及运行流程 1.1 持续集成概述 持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并迚程自 ...
- Jenkins+Gitlab搭建持续集成(CI)环境
利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...
- CentOS 7 部署Gitlab+Jenkins持续集成(CI)环境
持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试 开发→代 ...
- 基于Jenkins的持续集成CI
CI(continuous integration)持续集成 一次构建:可能包含编译,测试,审查和部署,以及其他一些事情,一次构建就是将源代码放在一起,并验证软件是否可以作为一个一致的单元运行的过程. ...
- 【OF框架】在Azure DevOps中配置项目持续集成CI服务,推送镜像到Azure容器注册表
准备工作 开通Azure账号,具有开通服务权限,关键是里面要有钱. 开通Azure DevOps,能够创建组织和项目. 具备一定的DevOps知识,了解CICD概念.Docker基本操作. 一.创建& ...
- 持续集成(CI)工具------Hudson/Jenkins(Continuous Integration)安装与配置具体解释
本文同意转载.但请标明出处:http://blog.csdn.net/wanghantong/article/40985653/, 版权全部 文章概述: 一. 描写叙述了持续集成工具Hudson的安装 ...
- 用持续集成工具Travis进行构建和部署
用持续集成工具Travis进行构建和部署 用持续集成工具Travis进行构建和部署 摘要:本文简单说明了如何使用持续集成工具Travis进行构建和部署的过程. 1. 概述 持续集成(Continuou ...
- 持续集成之Jenkins+Gitlab实现持续集成 [二]
持续集成之Jenkins+Gitlab实现持续集成 [二] 项目:使用git+jenkins实现持续集成 开始构建 General 源码管理 我们安装的是Git插件,还可以安装svn插件 我们将 ...
- jenkins持续集成工作原理、功能、部署方式等介绍
超详细的jenkins持续集成工作原理.功能.部署方式等介绍 原创 波波说运维 2019-08-29 00:01:00 概述 今天简单整理了一下jenkins的一些概念性内容,归纳如下: 1.概念 j ...
随机推荐
- 关于python浮点数精度问题计算误差的原因分析
在python中使用浮点数运算可能会出现如下问题 a = 0.1+0.2print(a) 输出的结果是 0.30000000000000004 原因如下: 出现上面的情况,主要还是因浮点数在计算机中实 ...
- python 常用库收集
读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都 ...
- GoPath模式和GoMoudle模式的相爱相杀
相信看我文章的文章的童鞋,golang版本已经是1.3版本以上.如果你的版本还停留在1.3以下,那这篇文章可以做为你的提升之法. go moudle的前世今生 前世-gopath gopath是什么 ...
- MyBatis、Spring、SpringMVC 源码下载地址
MyBatis.Spring.SpringMVC 源码下载地址 github mybatis https://github.com/fengyu415/MyBatis-Learn.git spring ...
- iNeuOS工业互联平台,生产过程业务联动控制
1.概述 工业物联网也好.工业互联网也好或是其他生产系统,反向控制始终无法回避.搞工业最直接.最体现效果的两个方面是采集各种数据和生产过程业务控制,所谓大数据预测和分析,那是仁者见仁.智者见智,下一篇 ...
- Spring Cloud 升级之路 - 2020.0.x - 1. 背景知识、需求描述与公共依赖
1. 背景知识.需求描述与公共依赖 1.1. 背景知识 & 需求描述 Spring Cloud 官方文档说了,它是一个完整的微服务体系,用户可以通过使用 Spring Cloud 快速搭建一个 ...
- [源码解析] 分布式任务队列 Celery 之启动 Consumer
[源码解析] 分布式任务队列 Celery 之启动 Consumer 目录 [源码解析] 分布式任务队列 Celery 之启动 Consumer 0x00 摘要 0x01 综述 1.1 kombu.c ...
- 热更新解决方案--xlua学习笔记
一.热更新方案简介 在Unity游戏工程中,C#代码(编译型语言)资源和Resources文件夹下的资源打包后都不可以更改,因此这部分内容不能进行热更新,而lua代码(解释型语言)逻辑不需要进行预编译 ...
- Java中的equals()和hashCode() - 超详细篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的equals()和hashCode() - 详细篇>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻烦在评论 ...
- Jenkins教程:使用Jenkins进行持续集成
[注]本文译自: https://www.edureka.co/blog/jenkins-tutorial/ 本文将重点介绍 Jenkins 架构和 Jenkins 构建管道,并向您展示如何在 J ...