浅谈持续集成(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 ...
随机推荐
- key解析
密钥在不同实体之间传递,因此密钥必须可以序列化. 所有密钥三个特性: 算法:密钥使用的算法,如DES和DSA等,通过getAlgorithm()获取算法名 编码形式:密钥的外部编码形式,如X.509, ...
- flutter兼论
Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2017年5月发布 第一个版本以来,目前Fl ...
- Linux Shell 统计一(行\列)数值的总和及行、列转换
(对一列数字求和) 在日常工作当中需要对文本过滤出来的数字进行求和运算,例如想统计一个MySQL分区表现在有多大 # ls -lsh AdPlateform#P#p*.ibd |grep G 2.6 ...
- 关于java的访问修饰符权限
作用域 public protected default private 同一个类 yes yes yes yes 同一个包 yes yes ...
- 技术分享PPT整理(一):Bootstrap基础与应用
最近在复习的时候总感觉有些知识点总结过,但是翻了一下博客没有找到,才想起来有一些内容是放在部门的技术分享里的,趁这个时候跳了几篇相对有价值的梳理一下,因为都是PPT,所以内容相对零散,以要点和图片为主 ...
- python3 int() 各数据类型转int
print(int('0b1010',0))#二进制数print(int('0xa',0))#十六进制数print(int('0xa',16))print(int('a',16))print(int( ...
- Ubuntu20.04linux内核(5.4.0版本)编译准备与实现过程-编译前准备(1)
最近项目也和linux kernel技术有关,调试内核和内核模块.修改内核源码,是学习内核的重要技术手段之一.应用这些技术时,都有一本基本的要求,那就是编译内核.因此,在分析内核调试技术之前,本随笔给 ...
- 配置docker的pdflatex环境
技术背景 Latex在文档撰写方面是不可或缺的工具,尤其是在写文章方面,是必须要用到的文字排版工具.但是latex的环境部署并不是一个特别人性化的操作,尤其是在各种不同的平台上操作是完全不一样的,还经 ...
- C++并发与多线程学习笔记--future成员函数、shared_future、atomic
std::future的其他成员函数 std::shared_future 原子操作.概念.基本用法 多线程主要是为了执行某个函数,本文的函数的例子,采用如下写法 int mythread() { c ...
- [GDKOI2021] 普及组 Day1 总结
[ G D K O I 2021 ] 普 及 组 D a y 1 总 结 [GDKOI2021] 普及组 Day1 总结 [GDKOI2021]普及组Day1总结 长达3天的快乐GDKOI2021普及 ...