1 前言:什么是 CICD 為什么要學 CICD

什么是 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;逐對比較相鄰元素的大小…