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)的更多相关文章

  1. Gitlab+Gitlab-CI+Docker实现持续集成(CI)与持续部署(CD)

    写在前面 记录一下,一个自动化开发部署项目的构建过程与简单使用,实现真正的DevOps gitlab安装 步骤一:安装依赖 yum -y install git gcc glibc-static te ...

  2. GitLab、Jenkins结合构建持续集成(CI)环境

    1 持续集成 概述及运行流程 1.1 持续集成概述 持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并迚程自 ...

  3. Jenkins+Gitlab搭建持续集成(CI)环境

    利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...

  4. CentOS 7 部署Gitlab+Jenkins持续集成(CI)环境

    持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试  开发→代 ...

  5. 基于Jenkins的持续集成CI

    CI(continuous integration)持续集成 一次构建:可能包含编译,测试,审查和部署,以及其他一些事情,一次构建就是将源代码放在一起,并验证软件是否可以作为一个一致的单元运行的过程. ...

  6. 【OF框架】在Azure DevOps中配置项目持续集成CI服务,推送镜像到Azure容器注册表

    准备工作 开通Azure账号,具有开通服务权限,关键是里面要有钱. 开通Azure DevOps,能够创建组织和项目. 具备一定的DevOps知识,了解CICD概念.Docker基本操作. 一.创建& ...

  7. 持续集成(CI)工具------Hudson/Jenkins(Continuous Integration)安装与配置具体解释

    本文同意转载.但请标明出处:http://blog.csdn.net/wanghantong/article/40985653/, 版权全部 文章概述: 一. 描写叙述了持续集成工具Hudson的安装 ...

  8. 用持续集成工具Travis进行构建和部署

    用持续集成工具Travis进行构建和部署 用持续集成工具Travis进行构建和部署 摘要:本文简单说明了如何使用持续集成工具Travis进行构建和部署的过程. 1. 概述 持续集成(Continuou ...

  9. 持续集成之Jenkins+Gitlab实现持续集成 [二]

    持续集成之Jenkins+Gitlab实现持续集成 [二] 项目:使用git+jenkins实现持续集成 开始构建  General  源码管理 我们安装的是Git插件,还可以安装svn插件  我们将 ...

  10. jenkins持续集成工作原理、功能、部署方式等介绍

    超详细的jenkins持续集成工作原理.功能.部署方式等介绍 原创 波波说运维 2019-08-29 00:01:00 概述 今天简单整理了一下jenkins的一些概念性内容,归纳如下: 1.概念 j ...

随机推荐

  1. 【odoo14】第三章、创建插件

    现在我们已经有了开发环境并了解了如何管理实例及数据库,现在让我们来学习下如何创建插件模块. 本章内容如下: 创建和安装模块 完成manifest文件 组织模块文件结构 添加模型 添加菜单及视图 添加访 ...

  2. 【H264】视频编码发展简史

    一.常见视频编码格式 编码格式有很多,如下图: 目前比较常用的编码有: H26x系列:由ITU(国际电传视讯联盟)主导,侧重网络传输 MPEG系列:由ISO(国际标准组织机构)下属的MPEG(运动图象 ...

  3. 你真的懂 i++ 和 ++i 吗?

    对于 ++i 和 i++,许多人可能都知道,不就是先加1再取值,和先取值再加1嘛.然而,真的是这样吗?请先看以下4道题,能全部答对可以忽略这篇文章. 题目 // 示例1 int i = 1; i = ...

  4. Canal高可用架构部署

    一.前言 canal 是阿里的一款开源项目,纯 Java 开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB). canal 模拟 mys ...

  5. C#异步编程由浅入深(一)

    一.什么算异步?   广义来讲,两个工作流能同时进行就算异步,例如,CPU与外设之间的工作流就是异步的.在面向服务的系统中,各个子系统之间通信一般都是异步的,例如,订单系统与支付系统之间的通信是异步的 ...

  6. 手机浏览器通过Scheme跳转APP,兼容各种手机浏览器

    一个比较完整的产品线,必定有APP和网站,另外还有微信公众号网页和小程序.那么有一个比较常见的需求就是在手机浏览器内打开APP,实现起来也比较简单,只要APP配置的有URLScheme即可. 但是因为 ...

  7. 详解php中函数的引用传递和返回 (附代码)

    本篇文章带大家了解一下php的引用,详细介绍一下函数的引用传递和引用返回.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助.php的引用(就是在变量或者函数.对象等前面加上&符号 ...

  8. redis setNx原子锁

    https://github.com/suqi/rlock/blob/master/rlock.py 保持逻辑并发情况不产生多次结果 常用于下单,钱包,抢购,秒杀等场景 1 LOCK_TIMEOUT ...

  9. Netflix业务运维分析和总结

    目录 Netflix工作环境的分析和思考 为什么Netflix会做得如此极致? 海量业务规模下的技术架构和挑战 更加合理的组织架构和先进的工具体系及理念 自由与责任并存的企业文化 当前问题: 精选提问 ...

  10. 冒泡算法(BubbleSort)

    /*冒泡排序原理 比较相邻的元素.如果前一个元素比后一个元素大,就交换这两个元素的位置. 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素.最终最后位置的元素就是最大值.实现步骤 1 ...