CI/CD相关概念学习
文章目录
- CI/CD相关概念学习
- 前言
- CI/CD相关概念介绍
- 集成地狱
- 持续集成
- 持续交付
- 持续部署
- Devops
- CI/CD相关应用介绍
- Jenkins
- Tekton Pipelines
- Spinnaker
- Travis CI
- GoCD
CI/CD相关概念学习
前言
本文主要是介绍一些 CI/CD 相关的概念,通过阅读本文你将快速了解 CI/CD 是什么、CI/CD的作用、以及DevOps与 CI/CD 的关系。与此同时,你也将了解与 CI/CD 相关的一些应用,当然本文着重是概念介绍,关于 CI/CD 应用的使用介绍到时候会写在另外一篇文章中,敬请期待(●’◡’●)
PS:由于我也是第一次接触 CI/CD 这些概念,个人理解上可能存在一定的不恰当,如果您发现了,还请即时告知博主,万分感谢
CI/CD相关概念介绍
-
CI/CD是什么意思?
CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一种面向开发和运维团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)。
个人理解:CI/CD 就是一种软件开发方式,目标是频繁利用自动化脚本提高集成、部署效率
集成地狱
-
什么是集成地狱?
集成地狱(Inherit Hell)是一个专业性的术语,用于描述在软件开发中,由于集成过程的复杂性和困难而导致的问题。
集成炼狱通常发生在大型项目中,涉及多个团队和多个代码库的情况下。在这种情况下,各个团队独立开发和测试不同的功能模块,然后需要将它们集成到一个统一的整体中。这个集成过程可能会面临各种挑战,例如:
- 版本冲突:不同的团队可能使用不同的技术栈和依赖库,导致版本冲突和兼容性问题。
- API 不稳定:在开发过程中,API 可能会频繁变动,导致其他团队的代码无法正常工作。
- 缺乏一致性:由于开发团队的独立性,代码风格、命名规范和工程结构可能不一致,导致集成时出现问题。
- 集成测试问题:由于集成过程的复杂性,很难进行全面和完整的集成测试,导致潜在的问题无法被及时发现和解决。
- 缺乏自动化:如果集成过程需要手动操作和人工干预,将会增加出错的可能性,延长交付时间。
……
以上这些集成过程中遇到的种种问题,都可以统一称之为集成地狱,集成地狱常常会导致开发周期延长、软件质量下降、项目进度滞后以及团队之间的协作问题。为了避免集成炼狱,团队可以采取一些措施,例如:
- 频繁集成:团队应该频繁地进行集成,以尽早发现和解决集成问题。
- 自动化集成:使用自动化构建、测试和部署工具,减少人为错误和提高效率。
- 规范和标准化:制定统一的编码规范、API设计规范和工程结构,以确保团队之间的一致性。
- 协作和沟通:加强团队之间的沟通和协作,及时解决集成问题和冲突。
……
其中 CI/CD 就是一种解决集成地狱的有效措施
持续集成
-
什么是持续集成?
持续集成(Continuous Integration,简称 CI)是一种软件开发实践,旨在通过频繁地将代码变更集成到共享存储库中,然后自动构建和测试这些变更,以确保团队能够快速、高效地交付高质量的软件。
个人理解:持续集成是一种软件开发方式,它要求一边开发一边频繁通过自动化脚本将变更集成到主分支中
-
为什么需要持续集成?
持续集成可以提高软件的质量、快速定位发现问题、减少集成冲突和风险、提高软件开发效率。
现代应用开发的目标是让多位开发人员同时处理同一应用的不同功能。但是,如果企业安排在一天内将所有分支源代码合并在一起(称为“合并日”),最终可能造成工作繁琐、耗时,而且需要手动完成。这是因为当一位独立工作的开发人员对应用进行更改时,有可能会与其他开发人员同时进行的更改发生冲突。如果每个开发人员都自定义自己的本地集成开发环境(IDE),而不是让团队就一个基于云的 IDE 达成一致,那么就会让问题更加雪上加霜。
持续集成(CI)要求开发人员频繁地(有时甚至每天)将代码更改合并到共享分支或“主干”中。一旦开发人员对应用所做的更改被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对应用造成破坏。这意味着测试内容涵盖了从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码和现有代码之间存在冲突,可以更加轻松地快速修复这些错误。
持续交付
-
什么是持续交付?
持续交付(Continuous Delivery,简称 CD)是一种软件开发实践,旨在通过自动化的构建、测试和部署流程,确保软件可以随时以可靠的方式交付给用户,但与持续部署不同,持续交付并不要求每次成功的构建都自动部署到生产环境中。
个人理解:持续交付和持续集成一样,都是一种软件开发的方式,也可以理解为一种思想,他要求我们要有一个随时可以部署到生产环境的代码库
-
为什么需要持续交付?
确保拥有一个可随时部署到生产环境的代码库,提高交付的效率。
-
什么是持续部署?
持续部署(Continuous Deployment,简称 CD)是持续交付的一部分,指的是一种自动化的软件发布流程,其中每次成功的构建都会自动部署到生产环境中,从而使新功能或修复很快地被用户使用。
个人理解:持续部署是持续交付的最后的一个步骤,他要求通过自动化脚本将已测试过的功能或修复发布到生产环境中,使得项目可以及时发现出隐藏的问题,从而得到快速的修复
持续部署
-
什么需要持续部署?
提高部署效率、快速发现定位问题、降低应用的部署风险。
持续部署,可以确保新功能能够很快上线被用户使用,用于越早使用,就能越快发现问题,从而越早改进,这样也能够帮助程序员快速定位问题,这一点的重要性我平常开发中深有体会,比如我开发一个比较大的功能,如果我是全部开发完后再来测试,可能看起来省时间,但是最终可能一旦出现问题,你需要定位很久,如果没开发一个小功能都测试一下,这样看着浪费时间,但是能够快速定位问题,反而能够更加节省时间,这也是一条开发的最佳实践。
Devops
-
什么是DevOps?
DevOps(DevelopmentOperations,开发运维),是一种抽象的思想(类似与三层架构),它关注的是开发和运维之间的合作、沟通和整合。
个人理解:从这个名字也可以看出来,他就是让开发与运维相结合,开发人员了解并参与运维,运维人员了解并参与开发,使得两者的沟通更加容易,开发人员可以开发出更好运维的应用,运维人员可以根据开发的应用制定更好的运维方案。现在市面上也有相应的 DevOps 开发工程师,薪资一般比单一的开发要高,毕竟会的多一点,学习成本更高
-
CI/CD 和 DevOps的联系
DevOps 旨在打破开发和运维之间的壁垒,促进团队之间的协作和整合。它关注整个应用生命周期,包括需求分析、设计、开发、测试、部署和运维。DevOps 鼓励团队成员之间的沟通、协作和反馈,以便更好地满足客户需求,提高软件质量和交付速度。
而 CI/CD 是一种实现 DevOps 理念的具体方法。通过持续集成、持续交付和持续部署,CI/CD 将开发、测试和部署过程自动化,以便更快速、更可靠地向客户交付软件。CI/CD 关注的是如何频繁地构建、测试和部署软件,以便及时发现和修复问题,同时提高软件质量和交付速度。
因此,可以说 CI/CD 是 DevOps 的一种具体实践,它通过自动化方法来践行 DevOps 的核心理念,即开发和运维之间的紧密合作和协作。
CI/CD相关应用介绍
Jenkins
Jenkins是一个Java开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。它前身是Hudson,2009年,甲骨文收购Sun并继承了Hudson代码库,2011年年初,甲骨文和开源社区关系破裂,该项目分为两个独立的项目:Hudson:由甲骨文继续管理; Jenkins:由大部分原始人员组成管理。
PS:是目前市场上最主流的 CI/CD 工具
Tekton Pipelines
Tekton Pipelines 基于Kubernetes并支持声明式构建。它使用自定义资源(Custom Resource)来定义构建任务,并使用Kubernetes API进行交互。
在Tekton Pipelines中,任务(Task)是核心概念,它表示一个可执行的工作单元。任务可以包含多个步骤(Step),每个步骤可以执行不同的操作,例如下载代码、运行测试、构建镜像等。任务还可以依赖其他任务,并可以通过输出(Output)和输入(Input)与其他任务进行交互。
除了任务之外,Tekton Pipelines还支持工作区(Workspace)的概念。工作区为任务提供了一个隔离的环境,可以用于存储任务所需的文件和资源。每个任务都可以使用不同类型的工作区,例如源代码工作区、构建工作区和测试工作区等。
Spinnaker
Spinnaker是一个开源的多云持续交付平台,旨在将产品快速且持续地部署到多种云平台上。它定位于将发布和各个云平台解耦,以将部署流程流水线化,从而降低平台迁移或多云平台部署应用的复杂度。
Spinnaker支持Google、AWS EC2、Microsoft Azure、Kubernetes和OpenStack等云平台,并且可以无缝集成其他持续集成(CI)流程,如git、Jenkins、Travis CI、Docker registry、cron调度器等。它具有以下主要功能:
- 集群管理:可以管理多云环境下的k8s集群。
- 部署管理:即常说的持续交付。
Spinnaker通过内置的部署策略(例如红色/黑色和金丝雀部署)利用云中的不变基础架构,创建和部署不可变映像以实现更快的部署、更容易的回滚以及消除难以调试的配置漂移问题。此外,Spinnaker还可以通过托管交付在上述功能的基础上提供更高级别的体验。
Travis CI
Travis CI是一个持续集成服务,它与Github紧密集成,可以在代码提交时自动运行测试和构建,并且可以将新代码集成到主干。它支持多种语言和框架,并且提供丰富的文档和社区支持。Travis CI还提供免费的公开仓库,可以用于托管开源项目。
GoCD
GoCD是一个开源的持续集成和持续部署工具,由ThoughtWorks开发并维护。它基于模型构建,采用了一种分阶段的模型来描述工作流。GoCD支持各种任务,如构建、测试和部署等,这些任务可以在不同的阶段中执行,并且可以并行或串行执行。
GoCD的核心概念包括:
- Pipeline:工作流是由一系列阶段(Stage)组成的Pipeline,每个阶段可以包含多个任务(Task)。
- Stage:阶段是一组任务的集合,这些任务按照顺序执行,通常用于表示一个完整的业务流程或功能。
- Task:任务是Pipeline中的基本执行单元,可以是一个命令行任务、shell脚本、Maven命令、NAnt脚本等。
- Agent:代理是用于执行任务的实际机器,GoCD可以与多个代理通信,并将任务分配给它们执行。
- Material:材料是用于触发Pipeline执行的文件或代码变更,通常与版本控制系统(如Git)集成。
GoCD还提供了可视化界面,可以方便地查看Pipeline的执行情况和日志,以及进行任务管理和配置。此外,GoCD还支持插件机制,可以扩展其功能和集成其他工具。
总之,GoCD是一个功能强大的持续集成和持续部署工具,适用于各种规模的项目和团队。它通过模型构建和可视化界面提供了灵活的工作流管理和任务执行能力。
参考资料:
- 一文带你看懂 CI/CD 是什么? (redhat.com)
- Jenkins 构建CI/CD(一看就会)咸蛋黄派的博客-CSDN博客
- DevOps到底是什么意思? - 知乎 (zhihu.com)
相关文章:

CI/CD相关概念学习
文章目录 CI/CD相关概念学习前言CI/CD相关概念介绍集成地狱持续集成持续交付持续部署Devops CI/CD相关应用介绍JenkinsTekton PipelinesSpinnakerTravis CIGoCD CI/CD相关概念学习 前言 本文主要是介绍一些 CI/CD 相关的概念,通过阅读本文你将快速了解 CI/CD 是什么…...

一、认识STM32
目录 一、初识STM32 1.1 STM32的命名规则介绍 1.2 STM32F103ZET6资源配置介绍 二、如何识别芯片管脚 2.1 如何寻找 IO 的功能说明 三、构成最小系统的要素 一、初识STM32 1.1 STM32的命名规则介绍 以 STM32F103ZET6 来讲解下 STM32 的命名方法: &…...
vue-router的编程式导航有哪些方法?
Vue Router 提供了几种编程式导航的方法,主要包括以下几种: router.push(location, onComplete?, onAbort?):跳转到新的 URL,类似于 <router-link> 的 to 属性。可以指定路径或者命名的路由。 router.replace(location, …...
连接服务器上mysql数据库
1. 首先在服务器的安全组上设置开放3306端口(默认是这个,有自定义可以酌情更改) 2. 更改服务器上的数据库配置文件vi /etc/mysql/my.cnf 增加下面bind- address配置 [mysqld] bind-address0.0.0.0 3. 授予本地IP地址的主机连接权限 - 创建…...

IDEA 中设置 File Header 以及自定义类、方法注释模板的方法
目录 1 设置 File Header2 自定义类、方法注释生成类注解模板生成方法注解模板 1 设置 File Header File -> Settings -> File and Code Templates -> Includes -> File Header -> 编辑 2 自定义类、方法注释 File -> Settings -> Live Templates -&g…...

【数据结构】图的存储结构及实现(邻接表和十字链表)
一.邻接矩阵的空间复杂度 假设图G有n个顶点e条边,则存储该图需要O(n^2) 不适用稀疏图的存储 二.邻接表 1.邻接表的存储思想: 对于图的每个顶点vi,将所有邻接于vi的顶点链成一个单链表,称为顶点vi的边表(…...

ROS Turtlebot3多机器人编队导航仿真
文章目录 前言一、Gzazebo中加载多台Turtlebot3机器人二、RVIZ中加载多个Turtlebot3机器人三.多机器人编队导航总结 前言 前面已经实现了在gazebo仿真环境中机器人一字型编队、三角形编队、N字型编队等仿真,接下来考虑多机器人编队在编队行进过程中的避障问题&…...
端口配置错误,导致RabbitMq启动报错
SpringBoot启动,报错如下: 2023-11-19 01:33:43.030 UID[] [] [AMQP Connection 116.xxx.xx.xxx:15672] ERROR com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connection driver error occured java.net.SocketException: Sock…...

<MySQL> 什么是JDBC?如何使用JDBC进行编程?
目录 一、JDBC是什么? 二、JDBC常用接口和类 2.1 DataSource 2.2 Connection 2.3 Statement 2.4 ResultSet 三、JDBC的使用 3.1 获得数据库驱动包 3.2 添加到项目依赖 3.3 描述数据库服务器 3.4 建立数据库连接 3.6 执行SQL语句和接收返回数据 3.7 释放…...

基于安卓android微信小程序的装修家装小程序
项目介绍 巧匠家装小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,还有系…...

基于SSM的小区物业管理系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

c语言免杀火绒
文章目录 前记c加载器补充知识 前记 pyinstaller pyinstaller目前已经被杀疯了,简单打包一个hello a"hello" print(a)#pyinstaller -F -w b.py -n HipsMain.exe考虑Nuitka pip uninstall nuitka pip install nuitka pip install nuitka1.8.5 这里最新…...

MyBatis #{} 和 ${} 的区别
前言: #{} 和 ${} 的区别是 MyBatis 中一个常见的面试题,#{} 和 ${} 是MyBatis 中获取参数的两种方式,但我们在项目中大多数使用的都是 #{} 来获取参数,那么它们两个有什么区别呢? 区别 一. #{} 采用预编译 SQL&…...

计算机科学速成课
建议看看计算机科学速成课,一门很全面的计算机原理入门课程,短短10分钟可以把大学老师十几节课讲的东西讲清楚!整个系列一共41个视频,B站上有中文字幕版。 每个视频都是一个特定的主题,例如软件工程、人工智能、操作系…...

基于单片机的汽车安全气囊系统故障仿真设计
**单片机设计介绍, 基于单片机微波炉加热箱系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的汽车安全气囊系统的故障检测系统是一种用于检测安全气囊系统故障的智能化设备,通过单片机控…...

JPA整合Sqlite解决Dialect报错问题, 最新版Hibernate6
前言 我个人项目中,不想使用太重的数据库,而内嵌数据库中SQLite又是最受欢迎的, 因此决定采用这个数据库。 可是JPA并不支持Sqlite,这篇文章就是记录如何解决这个问题的。 原因 JPA屏蔽了底层的各个数据库差异, 但是…...

算法通关村第十关-青铜挑战快速排序
大家好我是苏麟,今天带来快速排序 . 快速排序 单边快速排序(lomuto 洛穆托分区方案) 单边循环 (lomuto分区) 要点 : 选择最右侧元素作为基准点j 找比基准点小的,i 找比基准点大的,一旦找到,二者进行交换。 交换时机: 找到小的,…...
whisper large-v3 模型文件下载链接
#源码里找到的_MODELS {"tiny.en": "https://openaipublic.azureedge.net/main/whisper/models/d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03/tiny.en.pt","tiny": "https://openaipublic.azureedge.net/main/whisp…...

Ajax 之XMLHttpRequest讲解
一直以来都听别人说Ajax,今天终于接触到了。。。。。。。。。。 一.什么是Ajax? 答: AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 AJAX 异步 JavaScript和XML&#x…...
小程序里面循环使用ref的话获取不到
文章目录 概要问题案例解决方法 概要 在小程序里面一般循环使用ref的话会获取不到 问题案例 //这个时自己封装的组件,然后循环使用 <jilianXuanzhe huoqu"huoqu" :ref"jilianXuanzhe i"></jilianXuanzhe>//如果这样使用的话获取…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
虚幻基础:角色旋转
能帮到你的话,就给个赞吧 😘 文章目录 移动组件使用控制器所需旋转:组件 使用 控制器旋转将旋转朝向运动:组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转:必须移动才能旋转,不移动不旋转控制器…...

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...

aurora与pcie的数据高速传输
设备:zynq7100; 开发环境:window; vivado版本:2021.1; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程,pc通过pcie传输给fpga,fpga再通过aur…...

PLC入门【4】基本指令2(SET RST)
04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...

篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...