领导让我调研CI/CD,我给他看了这个

一、概念解释


CI/CD是指持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写,是现代软件开发中的重要实践。它们旨在通过自动化和持续化的方式改善软件开发、测试和交付过程。

  1. CI(Continuous integration):持续集成,指的是频繁地将代码集成到主干
  2. CD(Continuous delivery):持续交付,指的是频繁地将软件的新版本交付给用户,以供评审
  3. CD(Continuous Deployment):持续部署,是持续交付的下一步,指的是代码通过评审后,自动部署到生产环境
  4. CT(Continuous Test):持续测试,保证上述3个流程质量的过程(通常也在CI中体现)

二、持续集成(CI)的好处


1、快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易

2、防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成

三、持续集成(CI)的目的


让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成

四、为什么我们做不了(持续交付)CD


首先要说明的是,这里的持续交付是针对搭建CI/CD体系而言。

为什么我们做不了持续交付,由于实际工作中,正式环境搭建CI/CD体系的不一定是质量团队甚至不会让质量团队去做,而质量团队搭建的也只是(持续集成)CI部分,以保障自动化测试提效作用。

不能做CD其中的原因一是公司上线流程就没有将这部分交给质量团队做,第二个原因就是嵌入式软件发布方式与互联网软件发布方式不同,所以基于目前的这种纯软件流程的(持续交付)CD方式不能实现我们产品的CD。

五、常见CI/CD工具


Jenkins、Travis CI、Circle CI、TeamCity、GitHub Actions等等

  1. Jenkins

    • 优点:开源、可定制性强、拥有丰富的插件生态系统、支持大规模部署
    • 缺点:需要较多的配置和管理、UI设计相对陈旧
  2. Travis CI

    • 优点:易于使用、针对GitHub仓库提供无缝集成、支持Linux和macOS环境
    • 缺点:免费版功能受限、不适用于私有项目
  3. CircleCI

    • 优点:云端托管、易于配置、支持Docker构建、适用于小型团队
    • 缺点:收费较高、限制较多
  4. GitLab CI/CD

    • 优点:集成于GitLab仓库、开源版本功能完备、支持自动DevOps流程
    • 缺点:企业版收费较高、不适用于非GitLab托管的项目
  5. TeamCity

    • 优点:功能强大、易于集成、支持多种构建工具
    • 缺点:商业软件,需要购买许可证
  6. GitHub Actions

    • 优点:集成于GitHub、免费版功能完备、便于与GitHub仓库集成
    • 缺点:新产品,部分功能可能尚未成熟

选择CI/CD工具时,从几点出发:

  1. 易于安装、使用
  2. 安装位置选择:云、本地、虚拟环境(k8s、docker)
  3. 最重要的一点,是否开源

选择Jenkins是满足了开源、本地部署、易于安装这几点条件的

六、持续集成(CI)的最小流程


 

七、可扩展环节


持续集成本质是流程自动化的体现,所以都是基于现有的手工流程修改完善出来的,完善的流程都是建立在上述最小流程之上的,通常扩展环节出现在三个位置:新建任务、构建前操作、构建后操作。

常见扩展环节有:流程定时任务化、任务串联(多个子任务合并成一个大任务)、增加构建前的代码静态扫描、代码审计、构建后的自动化测试、关联构建后的问题记录、bug上报等等。

实现这些扩展环节,离不开Jenkins提供的大量的插件,如代码静态扫描使用的Sonar、自动化测试报告查看用的Html Publisher、邮件发送用的Email Extension等等上千种。

八、几种搭建方法


1、本机搭建:将安装包下载至Windows电脑,进行启动,流程中所有环节均在本机执行

优点:

  1. 搭建过程相对简单,能够保证最基本使用
  2. 不需要申请服务器资源

缺点:

  1. 需要多端维护CI环境,一旦流程发生变换,使用端都需要进行修改,服务端部署则是一端维护,多端使用
  2. 不利于环境统一:编译环境、运行环境、测试执行环境
  3. 本地搭建,使用者想要接入这套系统需要每人搭建一套环境
  4. 需要保证电脑无休息运行

2、服务端搭建:将Jenkins安装在一个服务器上,作为Master节点,代码管理、编译、运行、测试执行分别按需扩展节点(Jenkins Slave),节点机可以是同Master节点相同的服务器,也可以是网络互通的Windows机器。

优点:

  1. 符合标准持续集成环境搭建方案
  2. 可以一端维护,多端使用
  3. 节点可扩展性高

缺点:

  1. 需要申请服务器资源
  2. 测试端需要和硬件连接的部分,只能使用Windows电脑作为Jenkins执行节点,需要考虑网络互通问题

3、局域网搭建:同搭建方式2,只是所有节点均为Windows电脑,需要保证所有电脑网络互通。

优点:

  1. 结合了搭建方式1和2的所有优点
  2. 网络互通,Jenkins节点可以灵活地使用Windows,对于需要对接硬件测试的可以无缝衔接

3)Jenkins Master在Windows、Windows上的虚拟机、服务器上均能搭建

缺点:

Jenkins Master在Windows搭建时,需保证电脑无休息运行

九、实例展示


1、任务列表展示

2、自动化测试结果概览展示

 

3、任务构建流程-基础配置项展示

 

4、任务构建流程-源码管理配置项展示

 

5、任务构建流程-构建前操作配置项展示

 

6、任务构建流程-构建配置项展示

 

7、任务构建流程-构建后操作配置项展示

 

CI/CD的实施可以带来以下好处:

  • 更快的交付周期:通过自动化流程,加速软件的构建、测试和部署过程,从而更快地交付软件。
  • 更高的质量:通过频繁的集成、自动化测试和部署,降低软件缺陷的风险。
  • 更好的团队协作:减少手动操作,增强团队之间的沟通和合作。
  • 更好的反馈机制:及时发现和解决问题,提高开发人员对代码质量和系统状态的认识。

总之,CI/CD是一种通过自动化、持续化和频繁化的方式来改善软件开发、测试和交付流程的实践,有助于提高软件交付的效率和质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/338920.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松拿捏C语言——【文件操作】

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 🎉创作不易,请多多支持🎉 🌈感谢大家的阅读、点赞、收藏和关注💕 🌹如有问题,欢迎指正 目录 &#x1f…

论文阅读:Correcting Motion Distortion for LIDAR HD-Map Localization

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址:http://arxiv.org/pdf/2308.13694.pdf 代码地址:https://github.com/mcdermatt/VICET 概要 激光雷达的畸变矫正是一个非常重要的工作。由于扫描式激光雷达传感器需要有限的时间来创建…

LeetCode 算法:找到字符串中所有字母异位词c++

原题链接🔗:找到字符串中所有字母异位词 难度:中等⭐️⭐️ 题目 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符…

Nginx实战:防盗链

防盗链的概念 内容不在自己的服务器上,通过技术手段将其他网站的内容(比如 一些音乐、图片、软件的下载地址)放置在自己的网站中,通过这 种方法盗取其他网站的空间和流量 防盗链技术背景 防止第三方引用链接访问我们的图片&#x…

mysql面试之分库分表总结

文章目录 1.为什么要分库分表2.分库分表有哪些中间件,不同的中间件都有什么优点和缺点?3.分库分表的方式(水平分库,垂直分库,水平分表,垂直分表)3.1 水平分库3.2 垂直分库3.3 水平分表3.4 垂直分表 4.分库分表带来的问题4.1 事务一致性问题4.2 跨节点关联…

UE_地编教程_创建地形洞材质

个人学习笔记,不喜勿喷。侵权立删! 使用地形洞材质来遮罩地形上特定位置的可视性和碰撞。如要在山脉侧面创建进入洞穴的入口,此操作将非常有用。可使用地形材质和地形洞材质的相同材质,但注意:对比不使用不透明蒙版的…

【Linux】Linux工具——yum,vim

1.Linux 软件包管理器——yum Linux安装软件: 源代码安装(不建议)rpm安装(类似Linux安装包,版本可能不兼容,不推荐,容易报错)yum安装(解决了安装源,安装版本&…

即时通讯平台及门户系统WorkPlus打造移动应用管理平台

在全球化和数字化时代,企业管理和沟通的方式正发生着巨大的变化。为了实现高效的协作和资源共享,企业越来越倾向于使用即时通讯及门户系统。这两种系统结合起来,可以提供一套完整的沟通和信息发布平台,促进内部协作和信息管理。 …

【Python内功心法】:深挖内置函数,释放语言潜能

文章目录 🚀一、常见内置函数🌈二、高级内置函数⭐1. enumerate函数👊2. eval函数❤️3. exec函数💥4. eval与exec 中 globals与locals如何用☔4-1 globals 参数🎬4-2 locals 参数 ❤️5. filter函数👊6. z…

【Leetcode笔记】40.组合总和II

1. 题目要求 这道题目和39.组合总和不一样的地方在于:数组中含有相同的元素。同样地,结果不能含有重复组合。 拿第一个示例来看, candidates [1, 1, 2, 5, 6, 7, 10]问题在于:第一个path[1(index 0), 2],绝不能出现…

0、机器学习知识点

机器学习知识点 知识点汇总 知识点汇总 https://blog.csdn.net/seagal890/article/details/105352987 https://blog.csdn.net/fengdu78/article/details/115878843

[数据集][目标检测]脑溢血检测数据集VOC+YOLO格式767张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):767 标注数量(xml文件个数):767 标注数量(txt文件个数):767 标注类别…

unity2D跑酷游戏

项目成果 项目网盘 导入资源包 放入Assets文件Assets资源文件 游戏流程分析 摄像机size调小,让图片占满屏幕 人跑本质,相对运动,图片无限向右滚动 图片720,缩小100倍第二个图片x为7.2每unit px100两张图片刚好挨着连贯 空对象Bg…

友善RK3399v2平台利用rkmpp实现硬件编解码加速

测试VPU 编译mpp sudo apt update sudo apt install gcc g cmake make cd ~ git clone https://github.com/rockchip-linux/mpp.git cd mpp/build/linux/aarch64/ sed -i s/aarch64-linux-gnu-gcc/gcc/g ./arm.linux.cross.cmake sed -i s/aarch64-linux-gnu-g/g/g ./arm.lin…

Python 入门教程详细版全集(两周速成)

一、初始Python 打开CMD(命令提示符)程序,输入Python并回车。然后,在里面输入代码回车即可立即执行。 Tip1:找不到“命令提示符”程序在哪里? 使用快捷键:win r;打开运行框,输入cmd后回车即可…

942. 增减字符串匹配 - 力扣

1. 题目 由范围 [0,n] 内所有整数组成的 n 1 个整数的排列序列可以表示为长度为 n 的字符串 s &#xff0c;其中: 如果 perm[i] < perm[i 1] &#xff0c;那么 s[i] I 如果 perm[i] > perm[i 1] &#xff0c;那么 s[i] D 给定一个字符串 s &#xff0c;重构排列 pe…

【LeetCode算法】第111题:二叉树的最小深度

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;二叉树的先序遍历。求出左子树的最小高度&#xff0c;求出右子树的最小高度&#xff0c;最终返回左子树和右子树的最小高度1。关键&#xff1a;若左子树的高度为0&…

springboot发送短信验证码,结合redis 实现限制,验证码有效期2分钟,有效期内禁止再次发送,一天内发送超3次限制

springboot结合redis发送短信验证码,实现限制发送操作 前言(可忽略)实现思路正题效果图示例手机号不符合规则校验图成功发送验证码示例图redis中缓存随机数字验证码&#xff0c;2分钟后失效删除redis缓存图验证码有效期内 返回禁止重复发送图验证码24小时内发送达到3次&#xf…

[深度学习]使用python部署yolov10的onnx模型

测试环境&#xff1a; onnxruntime1.15.1 opencv-python4.8.0.76 部分实现代码&#xff1a; parser argparse.ArgumentParser()parser.add_argument("--model", typestr, default"yolov10n.onnx", help"Input your ONNX model.")parser.add_arg…

ChatGPT AI专题资料合集【65GB】

介绍 ChatGPT & AI专题资料合集【65GB】 &#x1f381;【七七云享】资源仓库&#xff0c;海量资源&#xff0c;无偿分享√