CI / CD是任何DevOps操作的两大基石,这是一种开发软件的方式,旨在生产快速而强大的软件,随时以可持续的方式发布更新。 当例行更改代码时,开发周期会更加频繁、更有意义且更快速。通过此过程,我们可以确保只有已知良好的代码才能成为软件产品的一部分。
Continuous Integration,Continuous Delivery,Continuous Deployment,即持续集成、持续交付和持续部署构成DevOps的3C。在这篇文章中,将从以下几个方面阐述:传统集成、持续集成及过程、持续交付、持续部署、3C优势

传统集成

传统集成时,团队没有任何类型的中央构建服务器。源代码可以存储在中央源代码存储库中,但是开发人员不必定期提交更改。在计划发布之前,开发人员可能会手动集成更改,这会导致许多问题,例如由于许多开发人员同时集成而带来的最后一刻的冲突,或者由于集成而导致的组件故障。
传统集成的某些缺点如下:开发人员不经常集成代码,导致最后一刻的隐患;反馈回路慢;由于需要修复许多组件而无法轻松解决问题;难以按时交付产品;高成本。为了克服这些问题,CI和CD应运而生,它们从技术角度和业务角度都具有许多优点。

持续集成Continuous Integration

持续集成是一种开发实践,要求开发人员每天多次将代码集成到共享存储库中,以避免代码冲突。
然后,每个签入均由自动构建进行验证,从而使团队可以及早发现问题。这使团队可以花更少的时间进行回溯,而将更多的时间用于构建新功能。
这里的概念是在一个项目上有多个开发人员,以将资源库的主分支保持为最新形式的源代码,因此每个开发人员都可以签出或者从最新的代码中提取,以避免发生冲突。

集成过程

开发人员在自己特定的分支中开发其功能,然后将其新分支推送到协作存储库中。 运行自动化的单元测试和集成测试,并将错误和其他代码质量问题通知团队。一旦自动测试通过,开发人员就会创建拉取请求。开发人员和审阅者可以直接对开发人员提交给主分支的更改发表评论。

完成评审过程并将新代码合并到主分支后,功能开发和错误修复周期将从集成的主分支继续运行。这在团队内(特别是每个人都在处理许多小任务的大型团队)通常会在一天内发生多次,这意味着每个人都在同一个通用代码库上工作。这样就大大减少了代码的差异以及功能开发人员彼此之间不同步而引起的相关问题。

持续交付Continuous Delivery

持续交付是一个更改代码会自动生成、自动测试并为发布到生产环境中做好准备的过程,软件可以在任何时候发布到生产环境中。
持续集成的代码提交将进一步进行性能和功能测试,直到批准发布为止。要有效执行持续交付,需要强大的持续集成。如果正确实施,开发人员将始终拥有已通过标准化测试过程的可部署的构建工件。
这个过程在开发人员提交代码时开始,在登台环境中完成测试后结束,以便代码可以部署到生产环境中。如果在自动测试过程中出现任何错误或Bug,CI工具将自动通过任意一种通知(如电子邮件或短信)告知开发人员。
持续交付通常涉及一个类似于生产的暂存区域,在将更改发布到生产之前,需要手动接受这些更改。
发布到生产环境的决策更多地是业务决策,而不是技术决策。

持续部署Continuous Deployment

持续部署与持续交付非常相似。二者唯一区别是,在持续部署中,所有通过自动化测试阶段的代码提交都将自动发布到生产环境中。
持续部署不需要在登台环境中进行任何手动测试,因为自动化测试将在发行版的所有阶段中执行。
这两种CD都依赖于实时基础设施配置和应用程序监视工具,用以在部署之前发现由于缺乏人工验证而在测试反馈循环中没有被找出的问题。

3C的优势

1、缓解风险

许多开发人员面临这样的问题:应用程序在本地环境可运行,但是在面对更高级可用性时无法运行。这是因为在本地环境和投入生产的地方可能存在很多不同之处。一些质量保证任务如浏览器测试,可以降低将Bug一直传播到活动站点的风险。

2、加快上市时间

持续集成、持续部署和持续交付的应用可以让团队更快地发现故障并快速修复,从而提高软件发布率,加快交付速度。

3、更改可追溯

所有团队成员必须使用相同的源存储库来维护其代码。很明显,可以看到代码库被进行了哪些更改以及由谁进行了更改。

4、提高代码覆盖率

CI服务器检查每一次构建的测试覆盖率。无论你在何处提交未经测试类的新代码,服务器都会显示错误,因为没有足够的代码覆盖率,因此开发人员将致力于增加低层级可用性的覆盖率,以便在部署到更高级的可用性时不会出现与代码覆盖率有关的问题。

5、质量:从优秀到卓越

CI有助于测试人员将项目总时间的50%用于运行集成的标称测试、查找Bug和其他细微问题。这使得测试团队能够更深入地研究问题,测试更多的场景,并产生更好的总体质量和结果。

6、更少的积压工作

将CI/CD纳入团队的开发过程中可以减少积压工作中非关键缺陷的数量。这些小缺陷会在生产前被检测出来,并在发布给最终用户之前被修复。

7、用户满意度

随着部署在连续的周期中运行,这将使团队能够跟踪项目并实时提供反馈,并在必要时修复团队中的缺点。通过一致的评审,新产品的开发将更加精细,并将更加符合终端用户的期望。

8、减少团队成员之间的摩擦

确保跨多个位置的多个开发人员工作的代码始终集成到一个公共存储库中。这避免了由于大量和冲突的代码提交而导致的混乱。

结论

在当今瞬息万变的竞争环境中,开发商正努力将他们的产品快速投放市场,如果没有一套简洁而合适的流程,几乎不可能发布高质量的代码。因而,转向持续集成和持续部署将极大地改变软件开发过程。它将简化整个过程,从而帮助团队提供更稳定、更安全、更优质的产品。

参考文献:Krishnagayathri
Gopinath .Continuous Integration And Delivery
[OL].(2020-04-27) https://dzone.com/articles/continuous-integration-and-delivery

DevOps知识点——3C知多少的更多相关文章

  1. DevOps之技能面

    <教学手册(Teaching Manual)> 教学:人类培养态度.传授知识.训练技能的活动.教学目的:知识与技能的层次:(了解.理解.熟悉.掌握.精通).教学手段:理论与实践的方面:(科 ...

  2. Java进击C#——应用开发之WinForm环境

    本章简言 上一章笔者讲到关于IO文件操作类,了解如何处理文件流.从这一章开始笔者将讲解相对比较高级的知识点.而本章笔者就对WinForm开发的知识点进行讲解和引导.现在很多业务都是面向于B/S模式的开 ...

  3. CSS position &居中(水平,垂直)

    css position是个很重要的知识点: 知乎Header部分: 知乎Header-inner部分: position属性值: fixed:生成绝对定位的元素,相对浏览器窗口进行定位(位置可通过: ...

  4. 应用开发之WinForm环境

    本章简言 上一章笔者讲到关于IO文件操作类,了解如何处理文件流.从这一章开始笔者将讲解相对比较高级的知识点.而本章笔者就对WinForm开发的知识点进行讲解和引导.现在很多业务都是面向于B/S模式的开 ...

  5. 『Python题库 - 填空题』151道Python笔试填空题

    『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...

  6. 《阿里巴巴Java开发手册》码出高效详解(一)- 为什么要学习阿里编码手册

    <Java 开发手册>(以下简称<手册>)是每个 Java 工程师人手必备的一本参考指南.该手册包括 编程规约.异常日志.单元测试.安全规约.MySQL 数据库.工程结构.设计 ...

  7. PAT Advanced 1020 Tree Traversals (25) [⼆叉树的遍历,后序中序转层序]

    题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder an ...

  8. PAT Advanced 1049 Counting Ones (30) [数学问题-简单数学问题]

    题目 The task is simple: given any positive integer N, you are supposed to count the total number of 1 ...

  9. Android 程序员必须知道的 53 个知识点

    1. android 单实例运行方法 我们都知道 Android 平台没有任务管理器,而内部 App 维护者一个 Activity history stack 来实现窗口显示和销毁,对于常规从快捷方式 ...

随机推荐

  1. 自动安装带nginx_upstream_check_module模块的Nginx脚本

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #!/bin/bash    useradd -s /sbin/no ...

  2. Hadoop学习笔记(二)——插件安装和使用(Hadoop Eclipse)

    1. Hadoop Eclipse @ 配置 需注意 在写Hadoop的根目录时,路径不能有空格 http://blog.sina.com.cn/s/blog_56d8111101014mlg.htm ...

  3. 一张图告诉你UML图怎么画❀

    UML 能帮我们做什么? 我们在进行项目的时候,通过使用 UML 的面向对象图的方式来更明确.清晰的表达项目中的架设思想.项目结构.执行顺序等一些逻辑思维. UML 介绍: 1997年,OMG 组织( ...

  4. Codeforce 1311A Add Odd or Subtract Even

    Add Odd or Subtract Even time limit per test2 seconds memory limit per test256 megabytes inputstanda ...

  5. VUE 后台管理系统权限控制

    谈一谈VUE 后台管理系统权限控制 前端权限从本质上来讲, 就是控制视图层的展示,比如说是某个页面或者某个按钮,后端权限可以控制某个用户是否能够查询数据, 是否能够修改数据等操作,后端权限大部分是基于 ...

  6. 【Java8新特性】你知道Java8为什么要引入Lambda表达式吗?

    写在前面 这是一道真实的面试题,一个读者朋友出去面试,面试官竟然问他这样一个问题:你说说Java8中为什么引入Lambda表达式?引入Lambda表达式后有哪些好处呢?还好这个朋友对Java8早有准备 ...

  7. C# 基础至集合-数组、List<T>、ArrayList、LinkedList、HashMap的一些区别

    1:数组 ]; //赋值 strs[] = "; strs[] = "; //修改 strs[] = "burg"; //删除 没法删除 除非转化为可变数组li ...

  8. 基于情感词典的python情感分析

    近期老师给我们安排了一个大作业,要求根据情感词典对微博语料进行情感分析.于是在网上狂找资料,看相关书籍,终于搞出了这个任务.现在做做笔记,总结一下本次的任务,同时也给遇到有同样需求的人,提供一点帮助. ...

  9. 排序算法整理(Python实现)

    目录 1. 冒泡排序 2. 选择排序 3. 插入排序 4. 归并排序 5. 快速排序 1. 冒泡排序   冒泡排序(Bubble Sort)是稳定排序,其基本思想是:遍历待排序列,依次两两比较,如果顺 ...

  10. JDBC09 CLOB文本大对象

    CLOB(Character Large Object) -用于储存大量的文本数据 BLOB(Binary Large Object) -用于存储大量的二进制数据 -大字段有些特殊,不同数据处理的方式 ...