详解CI、CD相关概念

2023-11-16

在软件的编译发布的过程中,经常能够看到CI、CD这样的词语。其实他们是专业的缩写短语,这里介绍下他们的概念和区别。

敏捷软件开发

       敏捷软件开发,英文全称:Agile software development,是从1990年代开始逐渐引起广泛关注的新型软件开发方式,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用。

CI:持续集成(CONTINUOUS INTEGRATION)

基本概念

CI的全称是Continuous Integration,表示持续集成。

在CI环境中,开发人员将会频繁地向主干提交代码。这些新提交的代码在最终合并到主干前,需要经过编译和自动化测试流进行验证。

持续集成过程中很重视自动化测试验证结果,以保障所有的提交在合并主线之后的质量问题,对可能出现的一些问题进行预警。

需要具备的条件

    团队需要为每个新功能、代码改进、或者问题修复创建自动化测试用例。
    你需要一个持续集成服务器,它可以监控代码提交情况,对每个新的提交进行自动化测试。
    研发团队需要尽可能快的提交代码,至少每天一次提交。

带来的效益

    通过自动化测试可以提早拿到回归测试的结果,避免将一些问题提交到交付生产中。
    发布编译将会更加容易,因为合并之初已经将所有问题都规避了。
    减少工作问题切换,研发可以很快获得构建失败的消息,在开始下一个任务之前就可以很快解决。
    测试成本大幅降低,你的CI服务器可以在几秒钟之内运行上百条测试。
    你的QA团队花费在测试上面的时间会大幅缩短,将会更加侧重于质量文化的提升上面。

CD:持续部署(CONTINUOUS DEPLOYMENT)

基本概念

CD的全称是Continuous Deployment,表示持续部署。

在CD环境中,通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,任何修改通过了所有已有的工作流就会直接和客户见面,只有当一个修改在工作流中构建失败才能阻止它部署到产品线。

持续部署是一个很优秀的方式,可以加速与客户的反馈循环,但是会给团队带来压力,因为不再有“发布日”了。开发人员可以专注于构建软件,他们看到他们的修改在他们完成工作后几分钟就上线了。

    基本上,当开发人员在主分支中合并一个提交时,这个分支将被构建、测试,如果一切顺利,则部署到生产环境中。

需要具备的条件

    研发团队测试理念比较完善。测试单元的健壮性直接决定你的交付质量。
    你的文档和部署频率要保持一致。
    特征标志成为发布重大变化过程的固有部分,以确保您可以与其他部门(支持,市场营销,公关…)协调。

带来的效益

    发布频率更快,因为你不需要停下来等待发布。每一处提交都会自动触发发布流。
    在小批量发布的时候,风险降低了,发现问题也可以很轻松的修复。
    客户每天都可以看到我们的持续改进和提升,而不是每个月或者每季度,或者每年。

CD:持续交付(CONTINUOUS DELIVERY)

基本概念

持续交付的英文全称是:Continuous delivery,缩写也是CD,它是一种软件工程手法。

它可以让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

    有时候,持续交付也与持续部署混淆。持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署。如果要实施持续部署,必须先实施持续交付。

需要具备的条件

    你需要有强大的持续集成组件和足够多的测试项可以满足你代码的需求。
    部署需要自动化。触发是手动的,但是部署一旦开始,就不能人为干预。
    你的团队可能需要接受特性开关,没有完成的功能模块不会影响到线上产品。

带来的效益

    繁琐的部署工作没有了。你的团队不在需要花费几天的时间去准备一个发布。
    你可以更快的进行交付,这样就加快了与客户之间的反馈环。
    轻松应对小变更,加速迭代。

原文:https://blog.csdn.net/sinat_35930259/article/details/79429743  
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详解CI、CD相关概念 的相关文章

  • 高德地图, 动态绘制多个marker 并 随着地图缩放, 判定marker之间的距离, 显示不同 marker 效果

    转载
  • JVM系统线程

    虚拟机线程 这种线程的操作时需要JVM达到安全点才会出现 这些操作必须在不同的线程中发生的原因是他们都需要JVM达到安全点 这样堆才不会变化 这种线程的执行类型包括 stop the world 的垃圾收集 线程栈收集 线程挂起以及偏向撤销
  • MFC Windows程序设计1_3

    使用VS2008生成MFC程序 选择对话框形式 主要的需要注意的 在App类中 重写InitInstance 函数 MyDlg dlg m pWindow dlg dlg doModal return FALSE 注意InitInstanc
  • 读书有感:《失业的程序员》

    失业的程序员 是我在三天前心血来潮找来的一本书 这是一本极其易读 风趣横生的关于程序员从失业到创业的小说类书籍 书中主人公从一开始辞职失业 到整合资源开始创业 再到最后看似创业已经稳定却是艰难险阻 创业团队也从一开始的 2 人 到 10 多
  • HTML5(十一)——WebSocket 基础教程

    一 为什么要学 WebSocket websocket 是 HTML5 提供的一种长链接双向通讯协议 使得客户端和服务器之间的数据交换更简单 允许服务端主动向客户端推送数据 并且客户端与服务端只需连接一次 就可以保持长久连接 并进行数据通信
  • Unity 委托 (Delegate) 的简单理解以及实现

    委托相当于把某一个方法当成参数 当执行委托的时候就相当于执行了方法 所以这个方法必须和委托具有相同的参数类型 委托的简单实现 using UnityEngine 委托 代理 是存有对某个方法的引用的一种引用类型变量 委托语法 delegat
  • 蓝桥杯冲击01 - 质数篇

    目录 前言 一 质数是什么 二 易错点 三 试除法判断是否为质数 四 质数常考三大模型 五 真题练手 前言 距离蓝桥杯还有一个月 高效复习蓝桥杯知识 质数相关的题目在蓝桥杯中经常出现 例如 2016年蓝桥杯省赛初赛第四题就是要求判断一个数是
  • 基于宽表的数据建模

    一 业务背景 1 1 数据建模现状 互联网企业往往存在多个产品线 每天源源不断产出大量数据 这些数据服务于数据分析师 业务上的产品经理 运营 数据开发人员等各角色 为了满足这些角色的各种需求 业界传统数仓常采用的是经典分层模型的数仓架构 从
  • 部分安卓端ncnn模型推理输出数据存在大量-nan和nan的问题

    原文issue链接 部分安卓端ncnn模型推理输出数据存在大量 nan的问题 Issue 3607 Tencent ncnn github com 问题描述 onnx ncnn模型在pc端推理输出结果正确且基本一致 在部分安卓设备上使用同一
  • 剑指 Offer 41. 数据流中的中位数(java+python)

    如何得到一个数据流中的中位数 如果从数据流中读出奇数个数值 那么中位数就是所有数值排序之后位于中间的数值 如果从数据流中读出偶数个数值 那么中位数就是所有数值排序之后中间两个数的平均值 例如 2 3 4 的中位数是 3 2 3 的中位数是
  • 微信小程序内添加腾讯地图 导航

    1 微信小程序 设置 第三方设置 插件管理 添加插件 如果搜索不到腾讯位置服务路线规划插件 可搜索如下地址直接添加腾讯位置服务路线规划 小程序插件 微信公众平台 问题 提示添加失败 项目主体不符的 可以通过 服务 微信服务市场 搜索 腾讯位
  • Python3 sorted自定义排序

    Python3的sorted函数具有key参数 可以进行自定义的排序 但并不是直接将自定义比较函数赋给key 这一点和C 是不一样的 在python3中 需要import functools来传递比较函数 注意 在Python3中 自定义比
  • hibernate之关于1+N的问题

    Hibernate 之关于1 N的问题 1 N问题 也有人叫做N 1问题 至今未统一 在这里我会告诉大家我为什么称之为1 N问题 什么情况下会产生1 N问题 在实际的项目开发中 我们配置的一对多 或者是多对一 在查询的时候会产生一种现象 例
  • Qt Http请求,post和get的两种方式

    今天我们介绍一下QT的http请求 这里有post和get两种方式 一 post请求方式 参数分为网址和具体请求值两个部分 有时候还需要设置头信息 看具体情况定 1 void MainWindow sendPostRequest 2 3 Q
  • 防止SQL注入

    SQL注入是指攻击者通过在输入的数据中注入恶意的SQL代码 以获取非法访问 窃取敏感信息等操作 以下是一些防止SQL注入的方法 使用参数化查询 使用参数化查询可以防止SQL注入攻击 参数化查询是指在执行查询时 将参数与查询语句分离 使得输入
  • java程序员微信群,欢迎准java行业人员加入,会一直更新

    微信群 请扫描二维码加入 本人在北京 主场北京 位置不限 仅限java行业交流 C C 以及python请另外加群 谢谢 欢迎准 java行业的进入 杜绝假冒程序员加入 精兵简政 群内与java无关私事请私聊 任何java的问题 欢迎讨论
  • NodeJS实现视频转码

    视频转码就是一个先解码 再编码的过程 从而将原来的视频转换成我们需要的视频 这种转换可能包括各式 mp4 avi flv等 分辨率 码率 帧率等 传统的视频转码中 很常用的工具是FFmpeg FFmpeg是一套可以用来记录 转换数字音频 视
  • UNIX环境高级编程 学习笔记 第十四章 高级I/O

    低速系统调用为可能使进程永远阻塞的一类系统调用 1 如果某些文件类型 管道 终端设备 网络设备 的数据不存在 读操作可能会使调用者永远阻塞 2 如果数据不能被某文件类型立即接受 管道中无空间 网络流控制 写操作可能会使调用者永远阻塞 3 在
  • 25行代码爬取英雄联盟手游英雄皮肤图片

    下面附源码 手游网址 英雄联盟手游官网 腾讯游戏 1 点击英雄 2 随机点一个英雄进去 3 按F12进入开发者模式 然后刷新 4 在搜索框里输入 js 找到skins js点击 我们可以发现所有现有的英雄皮肤信息都在里面 皮肤的图片链接以及

随机推荐

  • (Java基础知识) 几种Java任务调度比较

    前言 任务调度是指基于给定时间点 给定时间间隔或者给定执行次数自动执行任务 本文由浅入深介绍四种任务调度的 Java 实现 Timer ScheduledExecutor 开源工具包 Quartz 开源工具包 JCronTab 此外 为结合
  • pycharm配置镜像源

    一 背景 由于python再下载包时 下载时容易出现超时 等各种问题 原因 由于Python库的服务器都在国外 国内下载是速度普遍会很慢 所以需要配置一个镜像源来加快下载速度 二 解决方案 方案一 配置国内镜像源 清华 https pypi
  • 数据链路层的有那三个基本问题?为什么都必须加以解决?

    数据链路层的有那三个基本问题 为什么都必须加以解决 数据链路层的三个基本问题 封装成帧 透明传输 差错检测 封装成帧就是在一段数据前后分别添加首部和尾部 接收端以便从收到的比特流中识别帧的开始与结束 帧定界是分组交换的必然要求 透明传输避免
  • DCM与CCM

    1 什么是DCM断续工作模式 CCM连续工作模式 首先 反激开关电源的工作模式有三种 连续模式 临界模式 断续模式 如图为输出电流的波形图 由U L di dt 得到di U L dt 输入电压U和电感都是定值 所以电流的三角形式 在某一固
  • 数据分析之小白的爬虫入门教学

    数据是数据分析的基础 俗话说巧妇难为无米之炊 想要做好数据分析 必须先获得数据 在去年的这个时候 我一直想自己尝试写个爬虫 我买了一本python的书籍 但是因为种种原因 当时自己学习的速度很慢 一直到最近才慢慢的会写一些简单的爬虫 那这篇
  • python怎么求e的指数_分享Python中用于计算指数的exp()方法实例教程

    exp 方法返回指数x ex 语法 以下是exp 方法的语法 import math math exp x 注意 此函数是无法直接访问的 所以我们需要导入math模块 然后需要用math的静态对象来调用这个函数 参数x 这是一个数值表达式
  • Springboot @Async 异步任务调用

    异步调用的概念 异步调用相对于同步调用而言 通常的方法都是程序按照顺序来执行的 程序的每一步都需要等到上一步执行完成之后才能继续往下执行 而异步调用则无需等待 它可以在不阻塞主线程的情况下执行高耗时方法 如何实现异步调用 在不使用Sprin
  • 使用仿站小工具

    一 前提条件 要仿的网站页面路径必须是完整的 html路径项目 最优仿站 提供一个可以仿站的模板网站 格展网络 网站模板 网站源码 企业网站模板 免费模板下载https www 91084 com 二 获取页面路径 例如 1 选择门户模板
  • Sourceinsight最佳配色方案及颜色字体调整方法

    在Ubuntu下面用Gedit有一款比较好看的配色 应该是Darkblue 按照那个样子在SI里面做了一个差不多的 按个人喜好 背景色换成黑色 如下所示 配色的方案文件可以从此处链接免费下载 配色方案下载点击此处 下载该文件后 导入方法 O
  • 使用linux套接字实现的简易服务器与客户端

    本文中的代码是我在学习linux套接字编程时写的 运行环境为RedHat 编译环境为G 测试环境有两台linux虚拟机 地址分别设为192 168 8 123和192 168 8 99 其中 192 168 8 123上运行了客户端 其源码
  • 小白如何学习GNSS(三)- 如何阅读rtklib源码

    总览 和前两篇一样 都是画重点 而不会去解读代码 只会告诉你哪些代码需要阅读 而哪些可以稍后阅读 哪些基本不需要关注 首先给一个总览 即 输入 gt 处理 gt 输出 输入的观测文件 o文件 和星历文件 p文件 都是rinex格式 建议初步
  • 博弈论题目之Nim游戏

    Nim游戏 题目 你和你的朋友 两个人一起玩Nim游戏 桌子上有一堆石头 你们轮流进行自己的回合 你作为先手 每一个回合 轮到的人拿掉1 3块石头 拿掉最后一块石头的人就是获胜者 假设你们每一步都是最优解 请编写一个函数 来判断你是否可以在
  • 内部web服务器,部署HTTPS(nginx + 宝塔面板设置)

    1 需求 在BS应用研发过程中 很多浏览器的功能需要在开启web服务器的https功能才能实现 例如chrome浏览器的系统剪切板 Ctrl C Ctrl V 的使用 但是开发过程中 一般使用内部的服务器 只有IP地址 而没有域名 通过购买
  • openwrt下载安装docker

    安装包下载 https download docker com linux static stable x86 64 Install static binaries Download the static binary archive Go
  • 每天一道面试题(第一天)

    目录 1 String StringBuffer 和 StringBuilder 的区别是什么 2 既然说到synchronized 说说你对synchronized关键字的了解 1 String StringBuffer 和 String
  • C常见问题之RAND_MAX到底是多少

    本博客已迁往http coredumper cn 用rand 生成的随机数大于等于0 小于等于RAND MAX RAND MAX是stdlib h中宏定义的一个常量 其值最小为32767 最大为2147483647 其值与具体的库函数有关
  • nacos注册中心、配置中心使用指南

    nacos 1 4 1 客户端使用以及相关配置 nacos客户端使用gitee地址 1 目录结构 2 nacos服务端添加配置 默认用户名 nacos 默认密码 nacos 2 1添加命名空间 2 2根据服务名添加配置文件 注意 配置名称必
  • 【线代】线性方程组:非齐次/齐次方解的个数、系数矩阵的秩、未知数个数的关系?为什么 Ax=0 比 Ax=b 少1个线性无关的解?

    目录 一 起因 二 概念理解 1 Ax 0 基础解系 2 Ax b 线性无关解的个数 3 为什么 Ax 0 比 Ax b 少1个线性无关的解 三 解题 四 小结 一 起因 上一篇文章主要讲了线性方程组求解时 不同对解的问法是什么含义 今天这
  • 计算机专业就业发展现状,计算机专业就业形势分析

    根据当前计算机专业毕业生就业情况以及网上相关数据资料 本文着重从以下几个方面分析计算机专业毕业生目前就业形势 一 近几年计算机专业就业的基本情况 通过网络以及一些其他手段的调查发现 就计算机专业近几年的就业数据来看 主要呈现以下几个趋势 1
  • 详解CI、CD相关概念

    在软件的编译发布的过程中 经常能够看到CI CD这样的词语 其实他们是专业的缩写短语 这里介绍下他们的概念和区别 敏捷软件开发 敏捷软件开发 英文全称 Agile software development 是从1990年代开始逐渐引起广泛关