什么是 CI/CD

我的资源库网站:https://www.byteooo.cn

在开发阶段,许多编译工具会将我们的源码编译可使用的文件。例如 vue-cli 的项目会被 webpack 打包编译为浏览器的文件,Java 项目会被编译为 .class/jar 文件以供服务器使用。

但是,开发人员过多关注构建和部署过程是很浪费时间的。以之前古老的的构建部署流程为例子,需要经历以下步骤:

  1. 开发人员将源代码,经过编译、压缩等一系列流程打包为制品(意思为打包后的成品)
  2. 将制品上传到服务器。
  3. 在服务器将编译后的文件,手动可用的容器服务内(例如 Nginx,Tomcat,Apache 等服务)

显而易见,这种流程不仅繁琐,且容易出错,是非常影响开发效率的。开发人员要花一些时间浪费在这上面。那么有没有高效率,简单便捷一些的方式呢?

这就要提到 CI/CD 了。CI 的意思是 持续构建 。负责拉取代码库中的代码后,执行用户预置定义好的操作脚本,通过一系列编译操作构建出一个 制品 ,并将制品推送至到制品库里面。常用工具有 Gitlab CI,Github CI,Jenkins 等。这个环节不参与部署,只负责构建代码,然后保存构建物。构建物被称为 制品,保存制品的地方被称为 “制品库”

CD 则有2层含义: 持续部署(Continuous Deployment)持续交付(Continuous Delivery)持续交付 的概念是:将制品库的制品拿出后,部署在测试环境 / 交付给客户提前测试。 持续部署 则是将制品部署在生产环境。可以进行持续部署的工具也有很多: Ansible 批量部署, Docker 直接推拉镜像等等。当然也包括我们后面要写到的 Kubernetes 集群部署。

为什么要学 CI/CD

相信大家在了解它们的用途后,会有几点以下疑问:

  • 这不是运维干的活吗?
  • 好像和业务代码不相关,那我了解它有何意义?
  • 全是服务器知识,我不了解相关知识怎么学习?

相信这是许多前后端同学一致的疑问。的确,对于曾经的我,也有过这些疑问。门槛高,和工作内容不相关。那他的意义在哪里?

但是当我通过学习这些知识和在团队中实践这些流程后,我在知识面上得到了很大的扩展。对操作系统,对实际的构建部署,甚至对工程化拥有了全新的认识。甚至可以提出建议,如何更好的优化这些流程。这些都是你可以获得成长和学习的地方。你也可以选择将这部分知识点写入你的简历,作为面试和筛选的加分项。从更高的角度看整个项目的全貌,往往产生思考的维度是和一般的角度不同的。你会成长更快,渐渐地突破思维天花板。

当然,如果你对 Linux 操作系统不是很熟悉,建议先补习下基础的系统安装,操作命令,基础概念等知识(系统推荐 CentOS / Ubuntu ),在小册中将不会对基础Linux命令有过多解释。当然,如果遇到部分不懂的现场搜索也可以,相信你学起来这部分知识可以更加得心应手。

小册整体架构设计

在开始学习之前,我们先来了解下小册的整体内容技术架构设计:
image.png

上面是一张全景架构图,小册内容和章节将围绕该图展开编写内容。其中不包含单元测试和代码扫描环节,只关注构建和部署环节。

换成文字叙述就是这样的:

  1. 你写完了代码,提交到了 Git 代码库
  2. 随后,代码库配置的 WebHook 钩子或人工手动启动了 Jenkins 的构建流程
  3. Jenkins 启动构建流程。按照你之前配置好的构建脚本,将代码编译成功。
  4. 编译成功后,将编译后的文件打包为 docker 镜像,并将镜像上传到私有镜像库。
  5. 随后,使用 kubectl 指定远程的k8s集群,发送镜像版本更新指令
  6. 远程的k8s集群接收到指令后,去镜像库拉取新镜像
  7. 镜像拉取成功,按照升级策略(滚动升级)进行升级,此时不会停机。
  8. 升级完毕。

服务器搭配方案

学习这本小册,动手能力要具备,当然服务器资源也要准备好。这里推荐几种服务器搭配方案用来学习测试使用:

系统选用 CentOS 7:https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso

1. 全本地虚拟机 / 全上云

这里所有主机都必须为云服务器/本地虚拟机。要保持统一

配置技术栈类型标签
2核4GJenkins + Nexus + Docker本地虚拟机 / Cloud构建机
2核4GDocker + Kubernetes本地虚拟机 / CloudKubernetes Master
1核1GDocker + Kubernetes本地虚拟机 / CloudKubernetes Node

2. 半云半本地虚拟机

构建机器放本地,要部署的机器放云上面。否则的话构建机找不到要部署的机器
缺点:无法使用 Git 的 Webhook

配置技术栈类型标签
2核4GJenkins + Nexus + Docker本地虚拟机构建机
2核4GDocker + KubernetesCloudKubernetes Master
1核1GDocker + KubernetesCloudKubernetes Node

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

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

相关文章

GitHub 趋势日报 (2025年07月30日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图3579copyparty752supervision664500-AI-Agents-Projects483awesome403prompt-optim…

“非参数化”大语言模型与RAG的关系?

这个问题触及了一个关键的技术细节,两者关系密切,但层面不同: “非参数化”大语言模型是一个更广泛的概念或类别,而RAG(Retrieval-Augmented Generation)是实现这一概念最主流、最具体的一种技术框架。 您可…

LeetCode Hot 100:15. 三数之和

题目给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1&…

银行回单识别应用场景剖析

银行回单OCR识别技术通过自动化处理纸质或电子回单中的关键信息,显著提升了金融、企业及个人场景下的数据管理效率。以下是其核心应用场景及价值的详细剖析:一、企业财务场景自动化账务处理对账与记账:OCR自动提取交易日期、金额、账号等信息…

React的介绍和特点

1. React是什么? 1.1. React: 用于构建用户界面的JavaScript库1.2. React的官网文档:https://zh-hans.reactjs.org/ 2. React的特点2.1. 声明式编程: 目前整个大前端开发的模式:Vue、React、Flutter、SwiftUI只需要维护…

内核smmu学习

思考 smmu对外提供功能,设备驱动调用smmu 提供的api来配置页表,那其他设备是如何和smmu交互的?iommu 作为将不同smmu硬件的一个抽象封装,其它设备应该只能看到iommu这个封装层,那么iommu这个子系统是如何进行抽象的&a…

Android Slices:让应用功能在系统级交互中触手可及

引言 在当今移动应用生态中,用户每天要面对数十个甚至上百个应用的选择,如何让自己的应用在关键时刻触达用户,成为开发者面临的重要挑战。Google在Android 9 Pie中引入的Slices技术,正是为了解决这一痛点而生。本文将全面介绍And…

python学智能算法(三十))|SVM-KKT条件的数学理解

【1】引言 前序学习进程中,通过类比力的平衡对KKT条件进行了初步的理解。 今天我们更进一步,常使用数学语言进一步解释KKT条件。 【2】带约束的最小优化问题 首先定义一个即将求解的优化问题: 目标函数:最小化f(x)(x∈Rn)f(x)(…

华为云Flexus+DeepSeek征文|Linux命令实现两种部署的性能捕获+(硅基+Maas)模型添加教学

前引:“在数字化浪潮汹涌澎湃的今天,企业对云计算服务的需求已从基础架构支撑,逐步转向更深层次的AI赋能与业务创新驱动。面对复杂多变的市场环境,选择一个强大、可靠且具备前瞻性的云服务伙伴,无疑是企业实现高速增长…

langchain--1--prompt、output格式、LCEL示例

环境:本地使用ollama部署的deepseek-r1:1.5b模型 本文示例包含: [1] 非LCEL的调用方法[2] LCEL的调用方法[3] prompt template的简单使用,除了PromptTemplate模板,还有一些其它模板,可去查看官网[4] 输出:json格式、py…

【算法】指数滑动滤波器

指数滑动滤波器作用原理特点公式代码优化升级作用 首先这个滤波器能够将一些突变的信号对系统的影响降低,能够平滑输入信号,滤除噪声,减少测量数据的瞬间波动和干扰,就是实现输入信号不能不变,数值不会突然变大&#…

STM32F4—电源管理器

Power supply schemesPower supply supervisorInternal reset ON有PDR_ON pin的MCU,PDR_ON pin被拉高的时候电源监视器被使能。没有PDR_ON pin的MCU默认一直使能。内部集成了power-on reset (POR) / power-down reset (PDR)POR(上电复位)&…

MySQL锁的分类 MVCC和S/X锁的互补关系

各位看官,大家早安午安晚安呀~~~如果您觉得这篇文章对您有帮助的话欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦今天我们来学习:MySQL锁的分类 && MVCC和S/X锁的互补关系1.锁分类1.按锁粒度分类:全局锁&#…

第五届智能通信与计算国际学术会议(ICICC 2025)

重要信息 官网:www.ic-icc.org 时间:2025年8月15-16日 地点:中国 南京 第五届智能通信与计算国际学术会议(ICICC 2025)定于2025年8月15-16日在中国 南京举行。随着信息技术的飞速发展,智能通信与计算领域的研究与…

基于C#和NModbus4库实现的Modbus RTU串口通信

基于C#和NModbus4库实现的Modbus RTU串口通信&#xff0c;包含完整的界面设计和功能实现&#xff1a;一、项目依赖配置NuGet包安装&#xff1a; Install-Package NModbus4 Install-Package System.IO.Ports窗体控件布局&#xff1a; <!-- 基础控件配置 --> <ComboBox …

想要批量提取视频背景音乐?FFmpeg 和转换器都安排上

你是否遇到过这样的情况&#xff1f;看到一个超赞的短视频&#xff0c;里面的背景音乐特别好听&#xff0c;想单独保存下来当手机铃声或收藏&#xff0c;却不知道怎么把音乐从视频里“抠”出来&#xff1f;别担心&#xff01;今天就为大家分享两种简单易行的方法&#xff0c;无…

为什么MCP协议是AI集成的未来API

一、企业AI应用的核心挑战与架构演进 当前企业AI落地面临三大核心痛点&#xff1a; ​​系统集成困境​​&#xff1a;需对接企业内部业务系统&#xff08;CRM/ERP等&#xff09;​​异构环境兼容​​&#xff1a;需整合第三方AI服务与传统API​​数据孤岛突破​​&#xff1…

Apache Tomcat样例目录session操纵漏洞解读

【漏洞名称】&#xff1a;Apache Tomcat样例目录session操纵漏洞 &#xff08;Apache Tomcat示例目录漏洞&#xff09;【漏洞等级】&#xff1a;中危&#xff0c;5.9分。【漏洞描述】Apache Tomcat默认安装页面中存在examples样例目录&#xff0c;里面存放着Servlets、JSP、Web…

Go语言实战案例:实现HTTP客户端请求并解析响应

本文是 Go 网络与并发实战系列的第2篇&#xff0c;聚焦于如何使用 Go 实现一个 HTTP 客户端&#xff0c;完成请求发送、响应解析、错误处理、Header与Body提取等完整流程。一、前言&#xff1a;为什么学习HTTP客户端&#xff1f;在日常开发中&#xff0c;无论是调用 RESTful AP…

java的冒泡排序算法

冒泡排序是一种简单的排序算法&#xff0c;通过重复遍历待排序序列&#xff0c;比较相邻元素并在必要时交换位置&#xff0c;最终实现排序。以下是Java实现的详细说明&#xff1a;核心原理‌比较相邻元素‌&#xff1a;从序列第一个元素开始&#xff0c;逐对比较相邻元素的大小…