当前位置: 首页 > news >正文

CI流水线的理解

一、概念

单元测试:针对软件的基本单元(如:类、函数)所做的测试。

集成测试:将软件代码单元集成起来后,以组件、模块和子系统为单位进行的测试,主要测试接口间的交互关系。也称组件测试,子系统测试等。

CI/CD流水线总共包含三个阶段:持续集成、持续交付、持续部署。我整合了CSDN其他博主写的博客,在结合我的工作经验,具体的理解整理后如下:

二、持续集成CI(continuous integration)

持续集成的定义:       

        持续集成是一种软件开发实践,指的是团队成员频繁的将代码集成到主干分支的过程。一般每人每天至少集成一次,也可以多次。每次集成经过自动构建、自动(单元)测试,以尽快检测出集成错误,确认是否正确将新代码和原有代码集成在一起。

持续集成的目标:

        确保新增的代码能够与原先代码正确的集成,快速的提供一个可供测试的新版本(在测试环境中成功部署,软件可运行并且基本功能可用)。

持续集成的流程:build -> test -> result.

  1. 开发人员提交代码到Source Repository(源代码仓库),并通过git hook通知
  2. 出发 CI Server 的相关功能,执行 构建 -> 测试 -> 输出结果 的流程
  3. 生成并向开发人员发送反馈结果的report

持续集成的好处:

        1、持续集成频繁的集成可以把复杂的代码逻辑切割成小块,每完成一点更新,就集成到主干,这样可以快速发现错误,定位错误;

        2、节省人力成本,通过Jenkins自动构建和自动测试可以节省很多时间,加快软件开发进度,从而可以投入到更有价值的工作中去

        3、更细致的工作(代码)提交意味着可以更容易的判断当前的工作进度,开发流程变得易于管控。

三、持续交付CD(continuous delivery)

持续交付的定义:

        持续交付是一种能够使得软件在较短的周期中可靠地发布的软件工程方法,最终是通过手动部署到生产环境。指的是在持续集成的基础上,增加了test、staging、production 三个环节。在这个阶段,测试人员、PM在测试环境和预发布环境对最终要部署的项目进行全面且多轮的验证。

持续交付的目标: 

        拥有一个满足用户预期和质量要求的可随时部署到生产环境的代码库(新版本),确保新增的代码在生产环境中是可用的。

持续交付的流程:test -> staging ->production.

  1. Test环节,是在测试环境中对新增加的特性、功能进行全面的测试,包括了集成、功能、兼容性、安全、性能等系统测试。测试通过后,代码将自动部署到预发布环境。
  2. Staging指的是预发布环境,其尽可能模拟生产环境的真实网络拓扑、数据库及服务器硬件设备等资源,由测试人员验证代码在预发布环境中的可能表现。这个阶段,通常进行验收测试和全面回归测试(自动化测试的方式)。
  3. Production阶段将由相关人员(通常是运维)将新版本手动部署到生产环境。(如果发现问题,可以随时回滚)

四、持续部署CD(continuous deployment)

持续部署的定义:

        持续部署同样也是一种软件工程方法,通过自动化部署的方式将软件功能频繁的进行交付。

        持续部署的目标和持续交付是一致的,但实现方式上与持续交付的不同,最后部署到生产环境的过程是通过自动的方式实现的,所以说持续部署是持续交付的最高阶段。

        在持续部署下,开发同学只需提交代码,如果代码通过测试,可以全自动的部署到生产环境,所以持续部署的实现在很大程度上都得依赖精心设计的测试自动化。

http://www.lryc.cn/news/34086.html

相关文章:

  • OpenStack手动分布式部署Nova【Queens版】
  • centos7 oracle19c安装 ORA-01012: not logged on
  • 山东小巨人申报条件
  • 手写中实现并学习ahooks——useRequest
  • [手写OS]动手实现一个OS 之 准备工作以及引导扇区
  • JVM实战OutOfMemoryError异常
  • C++虚函数操作指南
  • Mybatis-Plus分页插件
  • Selenium Webdriver options的实用参数设置
  • 代码随想录算法训练营第七天|454.四数相加II 、 383. 赎金信 、 15. 三数之和 、18. 四数之和
  • 详解抓包原理以及抓包工具whistle的用法
  • 【C++】反向迭代器
  • (蓝桥真题)扫描游戏(计算几何+线段树二分)
  • 面试官:什么是双亲委派模型?如何打破它?
  • 自建服务器系列- DDNS配置
  • vue中使用axios简单封装用法,axios报错the request was rejected because no multipart boundar
  • Leetcode.1220 统计元音字母序列的数目
  • 深入元空间
  • 前端技术和框架
  • 02从零开始学Java之Java到底是个啥?
  • KEIL5中头文件路劲包含问题
  • 机智云目前我用过最便捷的物联网快速开发方案
  • MySQL基础篇1
  • AQS 源码解读
  • 使用 DataLoader 加载数据报错‘expected sequence of length 4 at dim 1 (got 0)’
  • 第十四届蓝桥杯第三期模拟赛B组C/C++原题与详解
  • 致敬三八女神节,致敬IT女生
  • 【Go语言学习笔记】数据
  • puzzle(0919)六宫数局
  • 脑机接口科普0016——独立BCI与非独立BCI