使用Gitlab CI/CD結合docker容器實現自動化部署

Gitlab CI/CD基本介紹

  1. 核心概念

    持續集成(CI):每次代碼提交后自動觸發構建、測試和代碼檢查,確保代碼質量

    持續交付/部署(CD):在 CI 基礎上自動將代碼部署到測試或生產環境,支持人工審核(交付)或全自動發布(部署)

  2. 核心組件

    Pipeline(流水線):由多個階段(stages)組成,每個階段包含并行執行的作業(jobs

    .gitlab-ci.yml:YAML 格式的配置文件,定義流水線的邏輯,需放置在項目根目錄

    Runner:執行作業的代理,支持 Docker、Shell 等運行環境,分為共享 Runner 和私有 Runner

  3. 工作流程

    代碼提交:觸發流水線執行

    階段執行

    • 構建階段:編譯代碼、安裝依賴
    • 測試階段:運行單元測試、集成測試等
    • 部署階段:自動發布到指定環境

    結果反饋:通過 GitLab 界面查看日志和狀態

  4. 優勢

    • 自動化:減少手動操作,提升效率
    • 可視化:提供流水線狀態和日志的實時監控
    • 靈活性:支持多語言、多環境部署,可集成 Kubernetes 等云原生工具

預先準備

  1. 用于發布程序的機器一臺,負責執行任務、部署程序
  2. 若干臺服務器(生產環境)

發布程序

在發布程序的機器上安裝gitlab-runner
  1. 添加官方倉庫

    curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
    
  2. 使用apt安裝

    sudo apt-get install gitlab-runner
    
  3. 驗證是否安裝成功

    gitlab-runner --version
    
注冊Runner到項目
  1. 注冊runner到項目,在項目目錄下執行

    sudo gitlab-runner register
    

    填寫gitlab的地址,token,其余信息不必要填
    在這里插入圖片描述

    token在gitlab的網頁端可以找到

    在這里插入圖片描述

    按照下圖填寫服務器的必要信息,地址、端口號、ssh用戶名和密碼

    在這里插入圖片描述

  2. 注冊完成后,可以看到runner的配置文件在**/etc/gitlab-runner/config.toml**下

    在這里插入圖片描述

  3. 查看gitlab-runner運行狀態

    在這里插入圖片描述

在安裝runner的機器上生成ssh密鑰
  1. 生成密鑰,需要指定格式

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
    
  2. 查看id_rsa私鑰格式,必須有開頭和結尾,否則密鑰加載會失敗

    -----BEGIN OPENSSH PRIVATE KEY-----
    密鑰內容
    -----END OPENSSH PRIVATE KEY-----
    
  3. 將本地生成的 SSH 公鑰添加到目標服務器(生產環境)上,使用以下命令將公鑰添加到目標服務器的 authorized_keys 文件中

    ssh-copy-id username@remote_host
    

在項目目錄下編寫.gitlab-ci.yml

下面是我的一個示例

stages:- build- deploybuild_image:stage: buildimage: docker:latestservices:- docker:dindscript:- docker rmi ems-simulate 2>/dev/null || true- docker build --no-cache -t ems-simulate .- docker save ems-simulate | gzip > ~/ems_simulate.tar.gzonly:- maindeploy_ems_simulate:stage: deployparallel:matrix: # 使用矩陣同時部署4臺服務器- HOST: ["10.10.112.4", "10.10.112.5", "10.10.112.6", "10.10.110.33"]before_script:# 禁用嚴格主機密鑰檢查(僅限測試環境)- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/configscript:# 傳輸鏡像到遠程主機- scp ~/ems_simulate.tar.gz narada@$HOST:~# 遠程執行部署命令- ssh narada@$HOST "gunzip -c ~/ems_simulate.tar.gz | docker load && docker stop ems_simulate_container 2>/dev/null && docker rm ems_simulate_container 2>/dev/null && docker volume rm ems_simulate_volume 2>/dev/null || true && docker volume create ems_simulate_volume 2>/dev/null || true && docker run -d --name ems_simulate_container --network host -v ems_simulate_volume:/app ems-simulate /bin/bash -c 'cd /app && python3 start_back_end.py'"needs: [build_image]only:- main

結合docker使用分為兩個階段

  1. 構建階段,制作docker鏡像并導出為tar.gz文件
  2. 將鏡像文件分發到每臺生產環境,部署docker容器

當將代碼提交到gitlab時,將會自動執行任務,下面是執行的效果

在這里插入圖片描述

點進某個任務可以看到具體的執行情況

在這里插入圖片描述

執行成功的任務最后會顯示Job succeeded

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

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

相關文章

初學者運行Pycharm程序可能會出現的問題,及解決辦法

文章目錄 前言一、ModuleNotFoundError: No module named sklearn二、ImportError: cannot import name show_config from numpy (unknown location)三、Pycharm報錯:“Original error was: DLL load failed: 找不到指定的模塊“ 的解決辦法四、ImportError: cannot…

Android開發中的Java與Kotlin:全面對比與深度解析

Android開發中的Java與Kotlin:全面對比與深度解析 在Android開發領域,Java和Kotlin是兩種主流編程語言。自Google在2017年宣布Kotlin為Android官方支持語言以來,Kotlin憑借其現代語法特性和與Java的無縫兼容性,逐漸成為開發者的新…

為應對激烈競爭環境,IBMS系統如何提升企業管理效率

IBMS智能管理系統:賦能企業高效運營,決勝競爭新時代 在瞬息萬變的商業環境中,效率就是競爭力!企業如何快速響應市場變化、優化內部流程、降低成本并實現精準決策?IBMS智能管理系統以創新科技為引擎,為企業…

2.3 ASPICE的架構與設計

在ASPICE中,架構與設計是汽車軟件開發過程中非常重要的一環,它涉及到定義和設計軟件系統的整體結構、組件以及其相互關系。良好的架構與設計可以幫助團隊更好地理解和管理軟件系統,提高系統的可維護性、可擴展性和性能。以下是ASPICE中架構與…

生益PCB耐高溫PCB板材怎么樣?

在5G基站晝夜不停地吞吐數據時,在新能源汽車電池管理系統經受極寒酷暑考驗時,在航空航天器穿越大氣層承受2000℃熱浪沖擊時,一塊優質PCB板材的“抗熱基因”正在決定著整個系統的生死存亡。生益科技研發的耐高溫PCB板材,正是在這場…

Java Spring ApplicationEvent 概述

一、Spring 事件機制核心概念 1. 事件驅動架構模型 發布-訂閱模式:解耦事件生產者和消費者觀察者模式:監聽器監聽特定事件事件驅動優勢: 組件間松耦合系統擴展性好支持異步處理事件溯源支持 2. 核心組件 組件作用實現方式ApplicationEve…

Spring核心框架完全指南 - 基礎知識全解析

?? 目錄 ?? Spring框架簡介 ??? IoC容器詳解 ?? 依賴注入(DI)深入理解 ?? Bean配置與管理 ?? Bean的作用域 ?? Bean生命周期 ?? 面向切面編程(AOP) ?? Spring注解詳解 ?? 資源管理 ?? 事件機制 ?? SpEL表達式語言 ?? 實戰案例 ?? 總…

Parasoft C++Test軟件集成測試(部件測試)_操作指南

系列文章目錄 Parasoft C++Test軟件靜態分析:操作指南(編碼規范、質量度量)、常見問題及處理 Parasoft C++Test軟件單元測試:操作指南、實例講解、常見問題及處理 Parasoft C++Test軟件集成測試:操作指南、實例講解、常見問題及處理 進階擴展:自動生成靜態分析文檔、自動…

聊一聊 Linux 上對函數進行 hook 的兩種方式

一:背景 1. 講故事 前兩篇我們介紹了 Minhook 在 Windows 平臺上的強大功效,這一篇我們來聊一聊如何在 Linux 上對函數進行hook,這里介紹兩種方式。 輕量級的 LD_PRELOAD 攔截 LD_PRELOAD是一種共享庫攔截,這種方式的優點在于…

【免費分享】GWO-BP-AdaBoost預測!灰狼優化、人工神經網絡與AdaBoost集成學習算法預測研究

一、模型組成原理 1. 灰狼優化算法(GWO) 核心思想:模擬灰狼群體的社會等級和狩獵行為(包圍、跟蹤、攻擊獵物),通過α、β、δ三級領導層引導種群搜索最優解。算法流程包括: 社會分層&#xff…

matlab實現非線性Granger因果檢驗

matlab程序包。用于格蘭杰因果分析,分析數據時,直接帶入數據即可。 hjt2/README , 1804 hjt2/c-code/Makefile , 57 hjt2/c-code/hjt2_tval.c , 10862 hjt2/matlab/spx_rp.dat , 175202 hjt2/matlab/spx_ur.dat , 174522 hjt2/matlab/spx_uv.dat , 1745…

從SQL Server到分布式大數據平臺:重構企業數據架構

在企業數字化加速的背景下,越來越多的組織開始意識到:傳統的數據系統正逐漸成為增長的“瓶頸”而非“助力”。其中,SQL Server 作為許多企業IT架構中曾經的中堅力量,正面臨前所未有的挑戰。它曾以穩定、易用、成本可控等優勢&…

【網關】互聯網公司的接入網關和業務網關怎么設計

網關 網關基礎知識 RGW全稱 Red GateWay :小紅書網關(網關英文:Gateway; 接入網關:Access Gateway) 網關(通用):Gateway 接入網關:API Gateway、Access Gateway 業務網關…

安全虛擬磁盤技術的創新與實踐

文章目錄 前言一、數據安全保護的新挑戰1. 數據安全態勢日益嚴峻,法律法規陸續出臺2. 加強數據安全管控成為銀行數據安全管理核心之一3. 銀行終端數據安全管控存在的難題 二、安全虛擬磁盤的探索與實踐1. 敏感文件的入盤及操作2. 敏感文件的流轉及出盤三、安全虛擬磁…

uni-app項目實戰筆記4--使用組件具名插槽slot定義公共標題模塊

先來看效果: 如圖,“每日推薦”,“專題精選”這些公共標題有相同的地方,也有自己的獨特的地方,像這類有共性又有個性的可考慮使用slot插槽來實現。 實現步驟: 1.在前面文章創建的公共組件common-title定義…

Appium + Java 測試全流程

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】

vue3 雙容器自動擴展布局 根據 內容的多少 動態定義寬度

需求: 左右兩個列表 挨著排列,當左邊內容超出滾動條時,換列顯示,右邊的列表隨之移動 效果圖: 1.左邊數據:10,右邊數據:5 2.左邊數據:30,右邊數據&#xff…

linux-java部署

version: 3 services:nacos_host:image: nacos/nacos-server:v2.2.0restart: alwayscontainer_name: nacos_hostenvironment:- MODEstandalone- PREFER_HOST_MODEhostnamevolumes:- ./sores/nacos/log:/home/nacos/logsports:- 8848:8848- 9848:9848 #2.0新增了兩個端口&#x…

010502管道符_防火墻出入站_不回顯帶外-滲透命令-基礎入門-網絡安全

文章目錄 1 管道符2 防火墻出入站3 不回顯外帶典型場景常見OOB通道實現示例(以DNS為例)1. 利用DNS外帶數據2. 使用工具監聽 防御建議擴展:無回顯OOB自動化工具注意事項演示結語 1 管道符 | (管道符號) ||(…

智慧養老與數字健康:科技賦能老年生活,構建全方位養老體系

在全球人口老齡化進程不斷加速的當下,我國的老齡化程度也日益加深。 截至 2023 年末,我國 60 歲及以上人口達 2.97 億人,占總人口的 21.1%,其中 65 歲及以上人口為 2.17 億人,占總人口的 15.4%。 養老問題已成為全社…