CI/CD相关概念学习

文章目录

  • CI/CD相关概念学习
    • 前言
    • CI/CD相关概念介绍
      • 集成地狱
      • 持续集成
      • 持续交付
      • 持续部署
      • Devops
    • CI/CD相关应用介绍
      • Jenkins
      • Tekton Pipelines
      • Spinnaker
      • Travis CI
      • GoCD

CI/CD相关概念学习

image-20231117174806575

前言

本文主要是介绍一些 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)是一个专业性的术语,用于描述在软件开发中,由于集成过程的复杂性和困难而导致的问题。

    集成炼狱通常发生在大型项目中,涉及多个团队和多个代码库的情况下。在这种情况下,各个团队独立开发和测试不同的功能模块,然后需要将它们集成到一个统一的整体中。这个集成过程可能会面临各种挑战,例如:

    1. 版本冲突:不同的团队可能使用不同的技术栈和依赖库,导致版本冲突和兼容性问题。
    2. API 不稳定:在开发过程中,API 可能会频繁变动,导致其他团队的代码无法正常工作。
    3. 缺乏一致性:由于开发团队的独立性,代码风格、命名规范和工程结构可能不一致,导致集成时出现问题。
    4. 集成测试问题:由于集成过程的复杂性,很难进行全面和完整的集成测试,导致潜在的问题无法被及时发现和解决。
    5. 缺乏自动化:如果集成过程需要手动操作和人工干预,将会增加出错的可能性,延长交付时间。

    ……

    以上这些集成过程中遇到的种种问题,都可以统一称之为集成地狱,集成地狱常常会导致开发周期延长、软件质量下降、项目进度滞后以及团队之间的协作问题。为了避免集成炼狱,团队可以采取一些措施,例如:

    1. 频繁集成:团队应该频繁地进行集成,以尽早发现和解决集成问题。
    2. 自动化集成:使用自动化构建、测试和部署工具,减少人为错误和提高效率。
    3. 规范和标准化:制定统一的编码规范、API设计规范和工程结构,以确保团队之间的一致性。
    4. 协作和沟通:加强团队之间的沟通和协作,及时解决集成问题和冲突。

    ……
    其中 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调度器等。它具有以下主要功能:

  1. 集群管理:可以管理多云环境下的k8s集群。
  2. 部署管理:即常说的持续交付。

Spinnaker通过内置的部署策略(例如红色/黑色和金丝雀部署)利用云中的不变基础架构,创建和部署不可变映像以实现更快的部署、更容易的回滚以及消除难以调试的配置漂移问题。此外,Spinnaker还可以通过托管交付在上述功能的基础上提供更高级别的体验。

Travis CI

Travis CI是一个持续集成服务,它与Github紧密集成,可以在代码提交时自动运行测试和构建,并且可以将新代码集成到主干。它支持多种语言和框架,并且提供丰富的文档和社区支持。Travis CI还提供免费的公开仓库,可以用于托管开源项目。

GoCD

GoCD是一个开源的持续集成和持续部署工具,由ThoughtWorks开发并维护。它基于模型构建,采用了一种分阶段的模型来描述工作流。GoCD支持各种任务,如构建、测试和部署等,这些任务可以在不同的阶段中执行,并且可以并行或串行执行。

GoCD的核心概念包括:

  1. Pipeline:工作流是由一系列阶段(Stage)组成的Pipeline,每个阶段可以包含多个任务(Task)。
  2. Stage:阶段是一组任务的集合,这些任务按照顺序执行,通常用于表示一个完整的业务流程或功能。
  3. Task:任务是Pipeline中的基本执行单元,可以是一个命令行任务、shell脚本、Maven命令、NAnt脚本等。
  4. Agent:代理是用于执行任务的实际机器,GoCD可以与多个代理通信,并将任务分配给它们执行。
  5. Material:材料是用于触发Pipeline执行的文件或代码变更,通常与版本控制系统(如Git)集成。

GoCD还提供了可视化界面,可以方便地查看Pipeline的执行情况和日志,以及进行任务管理和配置。此外,GoCD还支持插件机制,可以扩展其功能和集成其他工具。

总之,GoCD是一个功能强大的持续集成和持续部署工具,适用于各种规模的项目和团队。它通过模型构建和可视化界面提供了灵活的工作流管理和任务执行能力。


参考资料

  • 一文带你看懂 CI/CD 是什么? (redhat.com)
  • Jenkins 构建CI/CD(一看就会)咸蛋黄派的博客-CSDN博客
  • DevOps到底是什么意思? - 知乎 (zhihu.com)

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

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

相关文章

Flutter NestedScrollView 、SliverAppBar全解析,悬浮菜单的应用

在我们开发过程中经常会使用到悬浮菜单的使用,当我们滑动到指定位置后,菜单会自动悬浮。 实现效果如下(左为滑动前、右为滑动后): 上述便是通过NestedScrollView 、SliverAppBar实现的效果,通过两个控件我…

1.rk3588的yolov5运行:pt_onnx_rknn转换及rknn在rk3588系统python运行

自己有点笨,查资料查了一周才完美的实现了yolov5在rk3588环境下的运行,在这里写具体步骤希望大家少走弯路。具体步骤如下: 一、yolov5的原代码下载及pt文件转换为onnx文件 1.yolov5的原代码下载及环境搭建 在这里一定要下载正确版本的源代码…

替换SlowFast中Detectron2为Yolov8

一 需求 FaceBookReserch中SlowFast源码中检测框是用Detectron2进行目标检测,本文想实现用yolov8替换detectron2二 实施方案 首先,yolov8 支持有自定义库ultralytics(仅支持yolov8),安装对应库 pip install ultraly…

模拟实现一个Linux中的简单版shell

exec系列接口中的环境变量 在之前我们学习了exec系类函数的功能就是将一个程序替换成另外一个程序。 然后就会出现下面的问题: 首先父进程对应的环境变量的信息是从bash中来的,因为我们自己写的父进程在运行的时候首先就要成为bash的子进程。这里我们将…

9 STM32标准库函数 之 独立看门狗(IWDG)所有函数的介绍及使用

9 STM32标准库函数 之 独立看门狗(IWDG)所有函数的介绍及使用 1. 图片有格式该文档修改记录:总结 函数描述格式: 函数名外设函数的名称函数原形原形声明功能描述简要解释函数是如何执行的输入参数{x}输入参数描述输出参数{x}输出…

单片机语音芯片在工业控制中的应用优势

单片机语音芯片,这一智能化的代表产品,不仅在家庭和消费电子领域发挥着重要的作用,更为工业控制领域注入了新的活力。将单片机语音芯片与语音交互技术相结合,为工业设备的控制和监测提供了前所未有的解决方案。 首先,…

便利工具分享:一个proto文件的便利使用工具

最近在研究序列化,每次的proto文件手敲生成代码指令都很麻烦,干脆自己写一个泛用脚本,这样以后使用时候就方便了。 废话不多说,首先上代码: #!/bin/bash # 检查是否提供了文件名参数 if [ -z "$1" ]; then…

人充当LLM Agent的工具(Human-In-The-Loop ),提升复杂问题解决成功率

原文:人充当LLM Agent的工具(Human-In-The-Loop ),提升复杂问题解决成功率 在Agent开发过程中,LLM充当Agent的大脑,对问题进行规划、分解、推理,在执行过程中合理选择利用工具(Tool&…

Uniapp连接iBeacon设备——实现无线定位与互动体验(实现篇)

export default { data() { return { iBeaconDevices: [], // 存储搜索到的iBeacon设备 deviceId: [], data: [], url: getApp().globalData.url, innerAudioContext: n…

如何使用Flask request对象处理请求

在 Flask 中,request 对象是处理 HTTP 请求的重要工具之一。它提供了许多属性和方法,可以帮助我们获取请求的相关信息和数据。本文将向你介绍 request 对象的常用方法以及如何在 Flask 应用程序中使用它。 1. 获取请求方法 首先,让我们看一…

计算机网络的体系结构

目录 一. 计算机体系结构的形成二. 协议与层次划分2.1 数据传输过程2.2 什么是网络协议2.3 网络协议的三要素2.4 协议有两种形式2.4 各层协议2.5 什么是复用和分用 \quad 一. 计算机体系结构的形成 \quad 计算机网络是一个非常复杂的系统, 相互通信的两个计算机系统必须高度协调…

SSH协议简介与使用

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH&#xf…

本地jar导入maven

一、通过dependency引入 1.1. jar包放置&#xff0c;建造lib目录 1.2. pom.xml文件 <dependency><groupId>zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version><!--system&#xff0c;类似provided&#x…

网络原理-IP/数据链路层协议

一. IP IP协议有两个版本,IPv4和IPv6.我们通常所用的IP协议,若没有特殊说明,默认都是IPv4. IPv4数量2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址.对于全世界的计算机来说,这个数量是不够的,所以后来推出了IPv6(长度128位,是IPv4的4倍).但因为目前IPv4还广…

leetcode栈和队列三剑客

用队列实现栈 队列是先进先出的&#xff0c;而栈是只能在栈顶进行出栈和入栈&#xff0c;那我们这道题要用队列来实现栈的话&#xff0c;这里给的思路是两个队列&#xff0c;因为两个队列的话就可以相互导数据&#xff0c;比如我们来实现这个题目的push函数&#xff0c;我们的栈…

CronExpression

CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年]序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1-12 or JA…

springboot321基于java的校园服务平台设计与开发

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

Python---函数练习:编写一个打招呼程序

函数的定义-------相关链接&#xff1a;Python---函数的作用&#xff0c;定义&#xff0c;使用步骤&#xff08;调用步骤&#xff09;-CSDN博客基本语法&#xff1a; def 函数名称([参数1, 参数2, ...]):函数体...[return 返回值] 函数的调用 Python中&#xff0c;函数和变量一…

storage和正则表达式

一、Storage 1.认识Storage WebStorage主要提供了一种机制&#xff0c;可以让浏览器提供一种比cookie更直观的key、value存储方式&#xff1a; localStorage&#xff1a;本地存储&#xff0c;提供的是一种永久性的存储方法&#xff0c;在关闭掉网页重新打开时&#xff0c;存…

侧面多级菜单(一个大类、一个小类、小类下多个物体)

效果&#xff1a; 说明&#xff1a; 左右侧面板使用Animator组件控制滑入滑出。左侧面板中&#xff0c;左的左里面是大类&#xff0c;左的右有绿色的小类&#xff0c;绿色的小类下有多个真正的UI图片按钮。 要点&#xff1a; 结合了一点EasyGridBuilderPro插件的UI元素&…