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

news2024/9/25 20:37:13

一、概念解释


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.coloradmin.cn/o/1700839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​你见过哪些不过度设计的优秀APP?​

优联前端https://ufrontend.com/ 提供一站式企业前端解决方案 “每日故宫”是一款以故宫博物院丰富的藏品为基础,结合日历形式展示每日精选藏品的移动应用。通过这款应用,用户可以随时随地欣赏到故宫的珍贵藏品,感受中华五千年文化的魅力。…

Solidity 教程01 Remix IDE 初次见面

访问链接地址: https://remix.ethereum.org/ 文件管理器 文件资源管理器用于管理工作区和文件。此插件还包含许多快捷方式和命令。要快速浏览,请右键单击文件以获取弹出菜单,并检查插件右上角的汉堡菜单。 要找到文件资源管理器模块 - 单…

如何用 Redis 统计海量 UV?

引言:在当今数字化时代,对于网站和应用程序的运营者而言,了解其用户的行为和习惯是至关重要的。其中,衡量页面的独立访客数量(UV)是评估网站流量和用户参与度的重要指标之一。然而,当面对海量访…

2024-BurpSuite快速配置Jython插件环境

文章目录 前言一、下载Jython二、配置Python environment 前言 很多插件需要python环境,Burpsuite本身是支持java的,Jython就是java和python的结合。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载Jython https://ww…

基于Spring+Struts2+Hibernate+MySQL的个人网上银行

## 系统概述该系统采用SpringHibernateStruts2框架搭建,实现了登录、退出功能。不同账号之间进行转账功能,查询转账记录功能,修改登录密码功能。## 使用方法* 将项目导入idea,修改hibernate.cfg.xml中的数据库用户名、密码等信息…

Go 语言简介 -- 高效、简洁与现代化编程的完美结合

在现代软件开发领域,选择合适的编程语言对于项目的成功至关重要。Go 语言(又称 Golang )自 2009 年由Google发布以来,以其简洁的语法、高效的并发模型以及强大的性能,迅速成为开发者们的新宠。Go语言不仅融合了传统编译…

水滴式粉碎机:让破碎多样化

水滴式粉碎机以其新的粉碎技术和卓越的性能,引领着粉碎技术的新革命。它采用了高速旋转技术,通过转子对物料进行撞击和摩擦,实现了对物料的精细粉碎,制备出了高品质、高附加值的产品。 水滴式粉碎机在多个行业中都有着广泛的应用…

让大模型变得更聪明:人工智能的未来发展之路

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

搞到了阿里云大佬的docker笔记,实战总结一步到位,建议收藏

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 Docker在今天已经算是明星…

git 检查用户是否是gitlab用户

背景: 公司代码要从老的git库迁到新的git库,老git库上部分提交用户在新git库上没有,解决方法: 让gitlab不再检查提交用户是否是gitlab用户。具体操作: 去掉下面的勾选,保存配置即可。

Simulate Ring Resonator in INTERCONNECT

Simulate Ring Resonator in INTERCONNECT 正文正文 首先,我们采用 Interconnect 模块的工作流程 一文中介绍的方法添加一个直波导器件。接着,我们需要对它的名称进行更改,此时我们看左侧 Property View - Root Element 中的 General 属性,我们发现 name 属性是灰色的,无…

安川MC2000机械手CPU单元维修技巧汇总

在工业自动化领域,安川机器人因其高性能和稳定性而备受青睐。然而,即使是可靠的设备也会出现故障。下面将介绍安川MC2000机器人CPU单元维修方法,以便在遇到故障时能够快速恢复机器人的正常运行。安川机器人CPU单元是机器人的“大脑”&#xf…

如何与“病态”的人建立友谊:一种基于理解与接纳的视角

在我们的生活中,我们经常会遇到一些行为举止让我们感到不适或难以理解的人。这些人可能因为他们的某些行为被标签为“病态”,但真的应该如此简单地对他们进行评判吗?本文将探讨如何与被视为“病态”的人建立友谊,以及为什么这种接…

【stm32/CubeMX、HAL库】嵌入式实验六:定时器(2)|PWM输出

参考: 【【正点原子】手把手教你学STM32CubeIDE开发】 https://www.bilibili.com/video/BV1Wp42127Cx/?p13&share_sourcecopy_web&vd_source9332b8fc5ea8d349a54c3989f6189fd3 《嵌入式系统基础与实践》刘黎明等编著,第九章定时器&#xff0c…

MyCat2之分库分表

原理 一个数据库由很多表的构成,每个表对应的不同的业务,垂直切分是指按照业务将表进行分类,分不到不同的数据库上,这样压力就分担到了不同的库上面。 数据分片 数据分片包括里:垂直分片和水平分片,垂直分…

SSM志愿服务管理小程序-计算机毕业设计源码97923

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,志愿服务管理小程序被用户普遍使用,方便用户能…

基于Vue的神影视频APP

需求说明:使用Vue脚手架进行搭建,页面简洁、精致,和一些常见的电影网站类似,例如支付宝中的“淘票票电影”。在项目中使用页面布局技术(表格,vue.js框架,DIV+CSS或者混合使用)进行页面设计,使网站功能齐全,界面美观大方,有一定的交互性。 功能分析:系统主要分为七…

低代码与人工智能:改变软件开发的未来

引言 在当今快速发展的科技时代,软件开发行业也在不断地创新和演进。其中,低代码开发和人工智能技术是两个备受关注的领域,低代码开发通过简化开发流程和降低编码难度,使得软件开发变得更加高效和便捷,而人工智能技术…

Redis使用Set实现点赞功能

文章目录 set 数据类型介绍不排序实现排序实现 set 数据类型介绍 Redis中的set类型是一组无序的字符串值。 set通过其独特的数据结构和丰富的命令提供了在存储和处理集合元素方面的一些非常有用的功能。下面列出了主要的set类型命令: SADD key member1 [member2]&a…

Python筑基之旅-文件(夹)和流

目录 一、文件操作 1、文件打开与关闭 2、文件读写 3、文件操作模式 4、文件编码 二、文件夹操作 1、创建文件夹 2、删除文件夹 3、改变当前工作目录 4、获取当前工作目录 5、检查文件/文件夹是否存在 6、遍历文件夹 三、文件路径操作 1、获取绝对路径 2、构建完…