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. Java pdf转高清图片

    为什么80%的码农都做不了架构师?>>>   package com.hyb.kai.web.controller; import java.awt.image.BufferedIm ...

  2. 数据库SQL语言从入门到精通--Part 5--E-R图(实体联系图)用来描述数据库图例

    数据库从入门到精通合集(超详细,学习数据库必看) E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. ...

  3. Shell脚本(二)数学运算

    直接上代码. #!/bin/bash no1= no2= echo "using let ..." let result=no1+no2 echo "result is: ...

  4. 数据库-第八章 数据库编程-8.1 嵌入式SQL

    嵌入式SQL 一.嵌入式SQL的处理过程 1.嵌入式SQL语句的基本格式 2.嵌入式SQL的处理过程 3.主语言访问数据库的基本步骤 ⅰ建立数据库连接 ⅱ定义必要的主变量和数据通信区 ⅲ访问数据库并返 ...

  5. AOP行为日志

    最近新项目要记录行为日志,很久没有用AOP,研究了一下. 废话补多少,先上个流程图: 数据库日志表设计 字段名称 字段类型 注释 LOG_ID VARCHAR2(255)   LOG_LEVEL  N ...

  6. 类型信息(反射,RTTI)

    类型信息 1.java如何在运行时识别对象和类的信息 "传统的"RTTI run-time type identification ,假设我们在编译时已经知道了所有类型,在编译的时 ...

  7. vue组件中的“:”、“@”、“.”属性

    冒号属性 :是指令 v-bind 的缩写,是为了动态绑定数据,用于响应式地更新 HTML 特性. 加了冒号,后面是变量或表达式:不加冒号的是字符串. 如图:将Home组件中的 probe-type 的 ...

  8. React-Redux填坑

    这篇东西以后慢慢补充. Q:今天遇到一个问题是 TypeError:dispatch is not a function A:一直报这个type error,调试了好一阵,最后在tof上看到网友说co ...

  9. GreenPlum执行gpfdist报错:libssl.so.1.0.0: cannot open shared object file: No such file or directory

    当你报这个错时,是因为你执行 ./gpfdist 时默认去找寻/usr/lib64的环境依赖,没有去找寻你gpfdist安装目录中lib的目录. 解决方法: 根据报错提示,将你gpfdist安装目录中 ...

  10. Spring @Required 注释

    @Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个BeanInitializationExc ...