Git與DevOps實戰:從版本控制到自動化部署

一、版本控制

1.什么是版本控制?

版本控制用于高效追蹤和管理項目開發中的代碼、配置及文檔變更歷史,確保團隊成員始終使用正確版本,并支持版本回溯、差異比較和文件恢復。它能帶來以下優勢:通過歷史記錄保障數據安全與完整性;多分支開發機制提升團隊協作效率;結合CI/CD工具實現自動化流程,簡化復雜項目管理能力。

2.什么是版本控制系統?

版本控制工具用于管理代碼變更,通過版本號或語義化標簽標記不同開發階段。它能完整記錄文件修改歷史,支持回退到任意歷史版本。該工具允許多開發者協同工作,通過分支機制隔離不同功能開發,最終將所有變更合并至主分支。版本庫是版本控制系統的核心。

3.什么是版本庫?

版本庫是版本控制系統的核心數據庫,完整保存了項目文件及其變更歷史,包括文件所有版本、元數據以及版本間的依賴關系。其核心特性包括:完整歷史記錄、分支與合并功能、分布式存儲機制。

二、分布式版本控制Git

Git 是一款開源的分布式版本控制系統(DVCS),由 Linux 創始人 Linus Torvalds 在 2005 年開發。該系統能高效管理代碼和文件變更歷史,支持團隊協作與并行開發。其分布式架構特性提供了強大的分支管理功能,可精準追蹤每個版本的變化。

1.Git工作流

工作區(Workspace):存放從倉庫中提取出來的文件的地方,供用戶直接編輯。

暫存區(Index/Stage):文件變更暫存的區域,準備提交的文件信息。

倉庫(Local Repository):存儲所有版本數據和元信息的地方。

遠程倉庫(Remote Repository):托管在遠程服務器上的共享倉庫,供他人瀏覽、下載代碼。

工作流程

2.Git版本庫操作
# --local:倉庫級(倉庫目錄下.git/config)
# --global:全局級(~/.gitconfig)
# --system:系統級(/etc/gitconfig)
git config --global user.name 用戶名         #設置全局級用戶名
git config --global init.defaultBranch 分支名     #設置全局默認分支名稱
git config --list               #查看已有的Git配置

初始化版本庫

git init 項目目錄

查看Git本地倉庫狀態

git status

將文件信息添加到暫存區

git add 文件名

將暫存區文件提交到本地倉庫并附加提交信息

git commit -m "提交信息"

查看本地Git版本庫信息

git log                  #詳細信息
git log --pretty=oneline         #簡略信息
git log --oneline        #極簡信息
3.Git指針操作

還原到指定版本

git reset --hard 版本id

獲取指針移動軌跡

git reflog
4.Git分支操作

查看分支信息

git branch -v

創建分支

git branch 分支名

切換分支

git checkout 分支名

刪除分支

git branch -d 分支名

合并分支到master中

git merge 分支名
5.Git標簽管理

查看已有標簽

git tag

創建標簽

git tag 標簽名

刪除標簽

git tag -d 標簽名

三、Git服務器

Git 服務器是用于集中存儲和管理 Git 倉庫的核心節點,主要負責維護代碼版本歷史、支持團隊協作開發。它通過標準協議與本地倉庫進行數據交互,通常部署在獨立服務器上,開發者可通過網絡遠程訪問服務器中的代碼倉庫。常用的Git服務器有GitHub、Gitee碼云、GitLab。

1.GitLab

DevOps一體化平臺,集成代碼托管、CI/CD、項目管理、安全掃描等生命周期工具,支持端到端軟件交付,提供多層安全防護、操作審計日志及符合國內法規的數據存儲方案。

2.代碼托管
git remote add origin GitLub倉庫項目地址         #關聯遠程項目
git push -u origin --all        #推送本地倉庫所有分支
git push -u origin --tags       #推送本地倉庫所有標簽

http方式免密推送

git config --global credential.helper store       #持久保存密碼設置

四、CI/CD

在DevOps理念推動下,持續集成(CI)、持續交付(CD)和持續部署(CD)等創新方法應運而生,顯著提升了軟件發布效率。CI的核心在于開發人員頻繁提交代碼至共享倉庫,借助自動化構建和測試確保代碼質量,有效規避集成問題。CD則更進一步,能夠將驗證通過的代碼自動發布到存儲庫,實現生產環境的一鍵部署。而最高級別的持續部署則是全自動化流程,所有測試通過的代碼將自動部署上線,完全無需人工參與。

1.DevOps流程

計劃:項目初期,研討業務需求,指定研發計劃。

編碼:開發團隊基于項目需求編寫業務代碼,使用Git等工具進行版本控制。

構建:通過Maven,Docker等工具打包代碼為可上線的產品。

測試:對產品進行自動化測試(如Jmeter)驗證其功能和性能。

發布:生成通過測試后的穩定版本,準備進行部署。

部署:使用Ansible、Kubernetes等工具將產品自動發布到生產環境。

運營:運維團隊監控產品在生產環境下的工作中狀態,處理異常。

監控:使用Prometheus進行日志與指標的收集,反饋信息到計劃階段優化迭代。

2.Jenkins

Jenkins 是一款開源的 ?持續集成/持續交付(CI/CD)? 自動化工具,基于 Java 開發,廣泛應用于軟件構建、測試和部署流程。支持Maven、Gradle等構建工具,能實現自定化編譯與測試,監控Git的變更,觸發預設的構建流程,快速測試代碼質量,通過流水線(Pipeline)將構建好的產品部署到測試或生產環境。

五、Elasticsearch

Elasticsearch 是一個基于 ?Lucene? 構建的開源分布式搜索引擎,專為?全文檢索、日志分析、復雜查詢?等高性能場景設計?。具備分布式存儲與計算的功能,實現數據自動分片并支持副本,提升可靠性與查詢并行度,通過粉刺、標準化的詞項映射,實現高效率全文檢索,數據寫入之后秒級可查,適用于日志監控等實時性要求較高的場景。

1.Elasticsearch服務配置
# vim /etc/elasticsearch/elasticsearch.yml 
node.name: Services                 #23行,ES節點名稱
path.data: /var/lib/elasticsearch   #33行,ES數據存儲路徑
path.logs: /var/log/elasticsearch   #37行,ES日志存儲路徑
network.host: 0.0.0.0               #55行,監聽地址
http.port: 9200                     #59行,HTTP端口
http.cors.enabled: true             #60行,開啟HTTP跨域訪問支持
http.cors.allow-origin: "*"         #61行,允許跨域的訪問范圍
啟動Elasticsearch服務,設置服務開機自啟動
systemctl enable elasticsearch --now
2.測試Ik分詞器
curl -H "Content-Type: application/json" -XPOST http://localhost:9200/_analyze?pretty -d '
{"analyzer": "standard","text": "需要分析的文本內容"
}'
3.HEAD插件

導入ES-HEAD插件

podman load -i Elasticsearch/elasticsearch-head.tar

啟動HEAD容器

podman run -d --name es-head --hostname es-head -p 9100:9100 localhost/elasticsearch-head:latest            

配置ES-HEAD跨域

#sed -n '59,61p' /etc/elasticsearch/elasticsearch.yml
http.port: 9200
http.cors.enabled: true            #開啟http跨域支持
http.cors.allow-origin: "*"        #允許跨域的訪問范圍

六、消息隊列

消息隊列是一種進程之間通信機制,用于在不同進程或服務之間以異步、解藕的方式傳遞數據。其核心思想是將消息暫存與隊列當中,由生產者和消費者按需處理,廣泛應用于分布式系統和高并發場景?。

1.消息隊列特點

異步處理:生產者發送消息后無需等待消費者處理,提升系統響應速度?。

應用解藕:生產者和消費者通過隊列交互,降低模塊間直接依賴?。

流量削峰:緩存突發請求,避免系統因瞬間高并發崩潰。

2.RabbitMQ

RabbitMQ 是一款基于 AMQP(高級消息隊列協議)的開源消息中間件,專為分布式系統設計,可實現高效可靠的消息傳遞。它支持多語言客戶端接入,提供直觀的可視化管理界面,并具備靈活的消息分發機制,同時支持集群部署和持久化存儲。

3.工作模式

簡單模式(Simple):生產者直接發送消息到對列,消費者從隊列中消費,一對一通信。

工作隊列模式(Work Queues):多個消費者共享一個隊列,消息通過輪詢或者權重分配。

發布/訂閱模式(Fanout):交換機將消息廣播到所有綁定的隊列,無路由鍵匹配。

路由模式(Direct):交換機根據Routing Key精確匹配隊列的Binding Key,實現點對點通信。

主題模式(Topic):通過通配符實現模糊匹配。

4.RabbitMQ部署

安裝Erlang

dnf -y install erlang-25.2-1.el8.x86_64.rpm

安裝RabbitMQ

dnf -y install rabbitmq-server-3.11.5-1.el8.noarch.rpm

啟動網頁管理插件

rabbitmq-plugins enable rabbitmq_management

創建用戶

rabbitmqctl add_user 用戶名

列出已有用戶

rabbitmqctl list_users

為用戶添加標簽

abbitmqctl set_user_tags 用戶名 標簽
#超級管理員(administrator) 監控者(monitoring) 策略制定者(policymaker) 普通管理者(management) 其他(guest)

列出已有虛擬主機

rabbitmqctl list_vhosts 

創建虛擬機

 rabbitmqctl add_vhost /虛擬機名

設置用戶對虛擬主機的所有權限

 rabbitmqctl set_permissions -p /主機名 用戶名

查看用戶權限

rabbitmqctl list_user_permissions 用戶名

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920777.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大模型——利用RAG構建智能問答平臺實戰

利用RAG構建智能問答平臺實戰 目前公司的智能問答平臺利用RAG技術構建,現給大家分享下通RAG技術構建智能問平臺的具體流程和原理。 一、什么是RAG RAG是檢索增強生成技術(Retrieval-Augmented Generation),目前是構建智能問答的重要技術。RAG相比傳統的檢索可以可以減少…

flume事務機制詳解:保障數據可靠性的核心邏輯

flume事務機制詳解:保障數據可靠性的核心邏輯 在數據采集過程中,“不丟數據、不重數據” 是核心需求。Flume 之所以能在分布式環境下保證數據可靠性,關鍵在于其內置的事務機制。Flume 通過在 “Source → Channel” 和 “Channel → Sink” …

第四十九天(springboot模版注入ThymeleafFreemarkerVelocity)

開發框架-SpringBoot 參考:Spring Boot 中文文檔 新建一個spring Boot 項目,修改服務器url為 aliyun.com 不然沒有與jdk8版本對應的java 選擇一個spring web 庫,點擊創建即可 來到這個頁面點擊運行 啟動的是8080端口,用127.0.0.1…

Spring MVC 九大組件源碼深度剖析(六):HandlerExceptionResolver - 異常處理的藝術

文章目錄一、異常處理的核心價值二、核心接口設計三、四大內置實現類源碼解析1. ExceptionHandlerExceptionResolver(現代異常處理核心)2. ResponseStatusExceptionResolver(HTTP狀態碼處理)3. DefaultHandlerExceptionResolver&a…

MCP(Model Context Protocol,模型上下文協議)介紹

1. 背景 隨著大語言模型(LLM, Large Language Model)的應用越來越廣泛,一個核心問題逐漸凸顯: 模型在對話或推理時,往往只能依賴有限上下文窗口。外部工具、知識庫、應用接口如何統一接入模型,缺乏標準協議…

synchronized的鎖對象 和 wait,notify的調用者之間的關系

誰調用了wait和notify方法,會決定這兩個方法的控制范圍嗎?你的問題非常深入,涉及到 wait() 和 notify() 方法的控制范圍和作用域。讓我們詳細分析一下:? 核心概念:控制范圍由“鎖對象”決定wait() 和 notify() 的控制…

【技術教程】如何將文檔編輯器集成到用 .Net 編寫的網絡應用程序中

在現代網絡應用中,?富文本編輯能力已成為內容管理系統的核心需求。對于 .NET 開發者而言,選擇適合的編輯器并高效集成,是構建企業級應用的關鍵一步,可讓項目管理、 CRM 或定制化系統具備原生辦公能力,消除頻繁切換應用…

【大模型記憶-Mem0詳解-1】概述

目的和能力 Mem0 通過提供以下功能將無狀態 AI 應用程序轉換為有狀態、支持內存的系統: 持久記憶 :跨會話長期保留用戶偏好、對話歷史記錄和上下文信息多級內存 :支持具有自適應個性化的用戶級、會話級和代理級內存智能提取 :基于…

2024年山東省信息學小學組(CSP-X)第一輪題解

2024年山東省信息學小學組(CSP-X)第一輪題解 原題下載 單項選擇題 閱讀程序 閱讀程序 #1 判斷題 閱讀程序 #2 判斷題 單選題 閱讀程序 #3 判斷題 單選題 完善程序 消滅怪獸 位運算操作 原題下載 CSP-X2024小學組(山東)第一輪試題以及答案 單項選擇題 共 15 題,每題 2 分…

SW - 用裝配圖的方式組合多個子零件然后轉換成為零件,可維護性好

文章目錄SW - 用裝配圖的方式組合多個子零件然后轉換成為零件,可維護性好概述筆記例子將裝配圖另存為零件將零件圖中的多個實體組合為一個實體的特征備注ENDSW - 用裝配圖的方式組合多個子零件然后轉換成為零件,可維護性好 概述 以前畫機械零件&#x…

PhotoshopImageGenerator:基于Photoshop的自動化圖像數據集生成工具

整體邏輯與設計思路 PhotoshopImageGenerator是一個基于Python和Win32COM的自動化工具,通過控制Adobe Photoshop CC 2019創建多樣化的圖像數據集。其核心設計思路是通過程序化調用Photoshop的圖像編輯能力,為基礎圖像添加隨機元素(圖片、文本、形狀)和效果,快速生成大量變…

macos自動安裝emsdk4.0.13腳本

1.替換文件 emsdk #!/bin/sh # Copyright 2019 The Emscripten Authors. All rights reserved. # Emscripten is available under two separate licenses, the MIT license and the # University of Illinois/NCSA Open Source License. Both these licenses can be # foun…

c++ Effective c++ 條款5

class MyClass { public:MyClass(int& ref, const int c_val) : myRef(ref), myConstVal(c_val) {}// 明確刪除拷貝操作MyClass(const MyClass&) delete;MyClass& operator(const MyClass&) delete;private:int& myRef; // 引用成員const int myCo…

如何使用 Xshell 8 連接到一臺 CentOS 7 電腦(服務器)

什么是 Xshell? Xshell 是一款功能強大的、適用于 Windows 平臺的終端模擬器。它支持 SSH (Secure Shell)、SFTP、TELNET、RLOGIN 和 SERIAL 等多種網絡協議,讓用戶能夠安全地連接和管理遠程服務器。 對于開發者、系統管理員和網絡工程師來說&#xff…

CSS scale函數詳解

目錄 基本語法 核心特性 常用場景示例 1. 等比例縮放(X 軸和 Y 軸相同) 2. 非等比例縮放(X 軸和 Y 軸不同) 3. 翻轉并縮放 4. 配合過渡動畫實現交互效果 5. 圖片懸停縮放效果 6. 縮放原點調整 與其他變換組合使用 注意…

【MATLAB代碼】基于EKF的二維組合導航仿真代碼,狀態量為位置、速度、航向角與IMU偏置,觀測量為XY軸的位置和速度,附完整代碼

8維狀態量(2維位置、2維速度、航向角、航向角偏置、2維加速度計偏置)+4維觀測量(2維位置、2維速度)。 訂閱專欄后,可直接查看源代碼,粘貼到MATLAB空腳本中即可直接運行、得到結果 文章目錄 運行結果 MATLAB源代碼 程序詳解 ?? 程序概述 狀態預測(狀態轉移函數) 狀態雅…

OpenCV 圖像輪廓檢測

目錄 一、輪廓檢測基礎概念 二、核心 API 詳解:cv2.findContours () 參數說明: 返回值說明: 三、輪廓檢測實戰步驟 1. 圖像預處理(灰度化與二值化) 2. 查找輪廓 3. 繪制輪廓 四、輪廓的常用屬性與操作 1. 輪…

【圖論】 Graph.jl 概覽

文章目錄安裝基礎使用基本操作全局圖的指標頂點性質邊性質讀寫圖按照 .lgz 格式存儲圖數據(壓縮格式)按照 .lg 格式存儲圖數據(非壓縮格式)圖的繪制TikzGraphs.jl Latex 論文風格GraphPlot.jl 通常與 Compose.jl 一起使用SGtSNEpi…

[java] 控制三個線程按順序交替輸出數字123123…

控制三個線程按順序交替輸出數字123123… synchronized(配合專用鎖對象) 通過共享鎖和 volatile 變量控制執行順序,每個線程按指定順序打印指定內容,確保輸出序列如 “123123…”。使用 synchronized 和 wait/notifyAll 實現線程間…

[C#]winform基于yolov8-seg實現的指甲分割實現源碼

【測試環境】 vs2019 net framework4.7.2 onnxruntime1.16.3 opencvsharp 注意源碼運行在CPU上不支持GPU運行,由于net framework限制GPU會很慢因此沒有GPU版本提供。 【運行步驟】 打開sln項目 選擇x64 debug運行即可 如需要再x64 release運行可以將x64 debu…