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. 协作和沟通:加强团队之间的沟通和协作,及时解决集成问题和冲突。

    ……

持续集成

  • 什么是持续集成

    持续集成(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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python时间变化与字符串替换技术及读JSON文件等实践笔记

1. 需求描述 根据预测出结果发出指令的秒级时间,使用时间戳,也就是设定时间(字符串)转为数字时间戳。时间计算转换过程中,出现单个整数(例如8点),按字符串格式补齐两位“08”。字符…

quickapp_快应用_tabBar

tabBar 配置项中配置tabBar(版本兼容)使用tabs组件配置tabBar语法示例问题-切换tab没有反应问题-数据渲染问题解决优化 问题-tab的动态配置 第三方组件tabbar 一般首页都会显示几个tab用于进行页面切换,以下是几种tab配置方式。 配置项中配置tabBar(版本兼容) 在m…

顶部动态菜单栏的使用

效果图 开发环境 vue3 关键逻辑 //导航栏状态选择 const navbarSolid ref(false); //初始化导航栏高度 const navbarHeight ref(0);/*** 根据滚动距离改变样式*/ function checkNavbarOpacity() {navbarSolid.value window.pageYOffset > navbarHeight.value / 2; }/**…

Redis(列表List)

使用LPUSH从头部添加元素,可以一次添加一个或多个。 使用LRANGE 查看列表中的数据,0表示起始位置,-1表示结束位置。 当然也可以使用RPUSH来从尾部添加元素。 可以使用RPOP从尾部删除元素,会返回删除的元素的值。 同理使用LPOP…

树状图怎么画?推荐这个好用的在线树状图软件!

在日常工作和学习中,我们需要用到各种各样的图表,树状图是其中之一。 树状图是什么? 树状图是一种层次式的图形结构,可以用来展示数据之间的关系,并且可以在一定程度上提高工作和学习的效率。 树状图通常用来表示…

Antv/G2 分组柱状图+折线图双轴图表

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,heightdevice-height"><title>分组柱状图折线图双轴图表</title><styl…

复杂数据统计与R语言程序设计实验二

1、创建一个对象&#xff0c;并进行数据类型的转换、判别等操作&#xff0c;步骤如下。 ①使用命令清空工作空间&#xff0c;创建一个对象x&#xff0c;内含元素为序列&#xff1a;1&#xff0c;3&#xff0c;5&#xff0c;6&#xff0c;8。 ②判断对象x是否为数值型数据。 ③…

CFI(Common Flash Interface)简介

CFI定义了符合CFI规则设备的基本Query接口&#xff0c;包括已知或待拟定的flash Read/Write/Program/Erase控制接口。Query接口以结构体形式定义与flash设备相关的关键参数&#xff0c;但是CFI不会对单个flash设备厂家指定详细的指令集、状态轮询模式以及软件算法。 1.操作概要…

电子商务税收问题:跨境电商的挑战与解决

随着电子商务的崛起&#xff0c;跨境电商已经成为全球贸易的主要动力之一。然而&#xff0c;电子商务的快速发展也带来了一系列税收问题&#xff0c;尤其是涉及跨境交易的税收问题。本文将深入探讨跨境电商所面临的税收挑战&#xff0c;以及政府和国际组织正在采取的解决方案。…

开源与闭源:驾驭大模型未来的关键决断

在数字化的时代洪流中&#xff0c;开源与闭源的选择不断成为技术界的重要分水岭。随着特斯拉CEO埃隆马斯克的言论及其决策&#xff0c;公开支持开源&#xff0c;并糅合商业理念与技术革新&#xff0c;使得这场辩论再次成为公众关注的焦点。那么&#xff0c;在这场关乎技术发展脉…

Java和JavaScript是一样的技术吗?

目录 一、Java 是什么 二、JavaScript 是什么 三、Java 和 JavaScript 的区别 一、Java 是什么 Java是一种广泛使用的计算机编程语言&#xff0c;最初由Sun Microsystems&#xff08;后被Oracle收购&#xff09;于1995年发布。Java是一种面向对象的语言&#xff0c;设计初衷…

STM32定时器实现毫秒/秒级任务框架

STM32定时器实现毫秒/秒级任务框架 CubeMX配置代码分享总结 这是一期代码思路分&#xff0c;通过定时器&#xff08;以定时器10为例&#xff09;实现规定时间间隔执行指定任务。。。。。。 CubeMX配置 关于定时器的配置&#xff0c;这里不做介绍&#xff0c;不懂的可以看&#…

【小收获】数组在声明时整体赋值的细节

在C中&#xff0c;在全局区声明的数组会自动初始化 如果没有为全局区的整数类型的数组指定初始值&#xff0c;那么它的元素都会被自动初始化为0。该特性适用于所有整数类型的数组&#xff0c;包括char、short、int、long等。&#xff08;注:char类型数组自动初始化为0&#xff…

漏电继电器 JELR-(120)FG AC220V 零序电流互感器 孔径φ45 上海约瑟

JELR-FG系列漏电继电器 JELR-15FG漏电继电器&#xff1b; JELR-25FG漏电继电器&#xff1b; JELR-32FG漏电继电器&#xff1b; JELR-63FG漏电继电器&#xff1b; JELR-100FG漏电继电器; JELR-120FG漏电继电器&#xff1b; JELR-160FG漏电继电器&#xff1b; JELR-200FG…

在已安装Anaconda环境下配置沐神(李沐老师)动手学深度学习环境

沐神配置环境视频 B站李沐老师动手学深度学习环境配置视频 在windows中配置沐神深度学习环境 前提&#xff1a;安装了Anaconda基本环境&#xff0c;了解Jupyter NoteBook 1.打开 Anaconda Prompt 2.创建虚拟环境 create conda -n d2l-zh python3.8 pip3.激活虚拟环境 con…

canal1.1.7实战

1.环境搭建 canal可以用来监听mysql数据库的变化&#xff0c;用来同步数据 先下载最新的部署版本&#xff0c;release地址:Releases alibaba/canal GitHub 包下载地址: https://github.com/alibaba/canal/releases/download/canal-1.1.7/canal.deployer-1.1.7.tar.gz 下载…

《Effective C++》条款20

宁以pass-by-reference-to-const替换pass-by-value class A { public:A() {cout << "A()" << endl;}A(const A& a){cout << "A(const A& a)" << endl;}~A(){cout << "~A()" << endl;} private:stri…

如何选择数据恢复软件?前 5 名免费数据恢复软件榜单供参考

我们都知道开源数据恢复软件有很多优点。搜索免费解决方案的用户会被其可用性所吸引&#xff0c;而那些拥有足够技术技能的用户可能会被其定制软件以满足其需求的灵活性所吸引。在本文中&#xff0c;我们为您挑选了最好的开源数据恢复软件&#xff0c;并将尝试回答开源软件是否…