日常--記一次gitlab Runner配置與CI/CD環境搭建流程

文章目錄

  • 一、前言
  • 二、相關知識
    • 1.相關定義
      • 1.什么是 CI?
      • 2.什么是 CD?
    • 2.CI/CD 構建塊與工具鏈
    • 3.為什么要使用 CI/CD?
  • 三、準備
  • 四、實現
    • 1.Runner安裝與配置
      • 1.更新源
      • 2.安裝Runner
      • 3.注冊Runner
      • 4.啟動Runner
      • 5.查看Runner信息
    • 2.CI/CD流程測試
      • 1.CI/CD構建環境搭建
    • 2.ssh權限問題解決
  • 五、總結


一、前言

本次詳細使用圖文的形式實現gitlab Runner配置與CI/CD環境搭建,網上搜了一些教程都是docker的,我們的架構比較簡單,開發語言多是vue,所以本次使用shell實現CI流程。

二、相關知識

1.相關定義

持續集成(CI)與持續交付/部署(CD)合稱為 CI/CD,是現代軟件開發中 DevOps 實踐的重要組成,旨在通過 構建—測試—部署 的自動化流水線,實現高效、穩定地發布代碼。以下是系統性的介紹:
在這里插入圖片描述

1.什么是 CI?

Continuous Integration(持續集成):開發者將代碼頻繁(理想情況每天多次)合并到共享主干,自動觸發構建和測試流程,以便盡早發現集成問題,避免“集成地獄”

2.什么是 CD?

CD 有兩種定義方式,依實施程度不同:

Continuous Delivery(持續交付):

構建完成且通過測試后,代碼自動部署到預發布環境,但進入生產環境前還需人為審批

Continuous Deployment(持續部署):

每次構建并測試通過后,自動部署到生產環境,無需人工干預
CD 的典型流程包括從構建、打包到自動部署、監控反饋與回滾機制等,目標是實現代碼隨時可發布,并且發布快速穩定

2.CI/CD 構建塊與工具鏈

版本控制系統:Git、SVN 等
CI 工具:Jenkins、Travis CI、CircleCI、GitLab CI、GitHub Actions
構建與測試工具:Maven、Gradle、pytest、JUnit、Selenium 等
部署工具與平臺:Docker、Kubernetes、Ansible、Terraform、Argo CD等
監控與反饋:Prometheus、Grafana、日志分析、性能監控等

3.為什么要使用 CI/CD?

  1. 加快開發與發布速度:頻繁小步提交,縮短迭代周期
  2. 提高軟件質量:自動化測試確保每次提交的代碼都是健壯的
  3. 減少發布風險 & 人為失誤:自動部署與故障回滾機制降低人工操作風險
  4. 加強團隊協作:透明流程與快速反饋提升開發—測試—運維間的協作效率

三、準備

  1. 服務器環境:Ubuntu20.04.3 X2臺(一臺用于配置Runner,另一臺用于部署正式代碼)
  2. gitlab:一個gitlab代碼倉庫

四、實現

1.Runner安裝與配置

1.更新源

添加 GitLab Runner 的 APT 軟件源,并導入其 GPG 密鑰,為后續安裝 GitLab Runner 做準備。

 curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

在這里插入圖片描述

2.安裝Runner

執行下面命令,在遇到紅框中的詢問對話時,輸入y后按下回車

sudo apt-get install gitlab-runner

在這里插入圖片描述

3.注冊Runner

在終端輸入下面的命令進入GitLab Runner注冊交互對話

sudo gitlab-runner register

在這里插入圖片描述
去gitlab的Runners settings頁面查找相關配置:

url:http:/xxx.xxx/
注冊token:xxxxxx

在這里插入圖片描述
下面是具體的交互命令釋義

Please enter the GitLab instance URL:
https://gitlab.com   ← 填寫你項目所在的 GitLab 實例 URLPlease enter the registration token:
glrt-xxxxxxx         ← 填寫注冊 token(項目頁面提供)Please enter a description for the runner:
[hostname]           ← 輸入一個描述,如 ubuntu-runnerPlease enter tags for the runner (comma-separated):
docker,ubuntu        ← (可選)指定 tags,用于匹配 CI/CD jobWhether to run untagged builds [true/false]:
true                 ← 是否允許跑無 tag 的 JobWhether to lock the Runner to current project [true/false]:
false                ← 是否鎖定 Runner 到當前項目Please enter the executor:
shell                ← 推薦用 docker 或 shell

值得一提的是,這里我們選擇了shell作為環境,但是博主推薦docker,因為能實現環境的隔離。
在這里插入圖片描述

Executor推薦程度說明
docker?????最推薦。如果你的系統支持 Docker,Runner 會用容器執行每個 Job,干凈、安全、易管理。
shell???最簡單的方式,Runner 直接在宿主機的 shell 里執行。適合沒有 Docker 的環境,但缺乏隔離性。
ssh??通過 SSH 在遠程服務器上執行 Job。用于部署時可能有用,但設置復雜。
docker+machine???動態創建 VM + Docker,用于大規模 CI/CD。配置復雜,適合企業級。
其他? 或無kubernetes, parallels, virtualbox 等,特定場景下用,配置成本較高。

4.啟動Runner

輸入下面命令,啟動Runner

sudo gitlab-runner start 

下面命令可以查看運行狀態

sudo gitlab-runner status

在這里插入圖片描述

查看當前已注冊的 runners

sudo gitlab-runner list 

在這里插入圖片描述

5.查看Runner信息

這時,我們已經可以在gitlab后臺的Runner設置頁面里看到已經啟用的Runner了

在這里插入圖片描述
下圖為Runner的詳細信息
在這里插入圖片描述

2.CI/CD流程測試

1.CI/CD構建環境搭建

我們的測試項目是基于vue3.0、node.js18環境開發的,需要在Runner服務器上安裝構建環境

安裝 Node.js

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

安裝 npm

sudo apt install -y nodejs

在git項目中創建.gitlab-ci.yml

這段 GitLab CI/CD 配置定義了一個簡單的兩階段流水線:build 和 deploy。在 build 階段中,使用 Node.js 命令安裝依賴并構建項目,構建產物(dist/ 目錄)作為 artifact 保存 1 小時;在 deploy 階段,依賴 build 階段的輸出,通過 SSH 將構建結果部署到遠程服務器(包括建立 SSH 連接、復制文件、重啟 Nginx),并在所有分支上觸發部署流程。整個流程實現了從構建到自動部署的連續交付。

stages:- build- deploybuild:stage: buildscript:- npm install- npm run buildartifacts:paths:- dist/expire_in: 1 hourdeploy:stage: deploydependencies:- buildbefore_script:- which ssh || (echo "SSH not installed!" && exit 1)script:- echo "$SSH_PRIVATE_KEY" | tee /tmp/id_rsa > /dev/null- chmod 600 /tmp/id_rsa- ssh -o StrictHostKeyChecking=no -i /tmp/id_rsa $SSH_USER@$SSH_HOST "echo 'SSH connected successfully'"- scp -o StrictHostKeyChecking=no -i /tmp/id_rsa -r dist/ $SSH_USER@$SSH_HOST:/www/movie_tmp/- ssh -o StrictHostKeyChecking=no -i /tmp/id_rsa $SSH_USER@$SSH_HOST "sudo service nginx restart"- rm -f /tmp/id_rsaonly:- branches  # 任何分支都會觸發部署

上面的配置需要我們在本地創建構建目錄,并給予適當的權限,我們手動在服務器上執行下面👇🏻命令即可

sudo mkdir -p /var/lib/gitlab-runner
sudo chown gitlab-runner:gitlab-runner /var/lib/gitlab-runner

然后設置好變量
在這里插入圖片描述

在git上觸發一次代碼提交操作
在這里插入圖片描述
流水線job開始工作,自動實現構建、部署操作
在這里插入圖片描述
建議自己親自拉代碼試一下

2.ssh權限問題解決

由于我們使用ssh連接到目標服務器,所以我們要保證Runner服務器與目標服務器之間通順:
如果我們執行下面的命令,控制臺打印了“OK”則無需下面額外的操作了

ssh -i /tmp/id_rsa root@xx.xx.xx.190 "echo OK"

在這里插入圖片描述

否則 需要在runner服務器中查看對應的公鑰內容

ssh-keygen -y -f /tmp/id_rsa

會打印下面的內容
在這里插入圖片描述
然后去目標服務器 將上面的公鑰配置到~root/.ssh/authorized_keys文件中,最后查看

cat ~root/.ssh/authorized_keys

在這里插入圖片描述

五、總結

本次和大家分享了gitlab Runner配置與CI/CD環境搭建流程。

CI/CD 是自動化構建—測試—部署流程的集大成,在 DevOps 文化中扮演核心角色,不僅提升軟件交付效率,而且顯著增強質量與協作。具體實踐中,通過工具鏈構建流水線,輔以策略與監控,最終實現穩定、可控、頻繁的發布能力。

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

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

相關文章

東方仙盟AI數據中間件使用教程:開啟數據交互與自動化應用新時代——仙盟創夢IDE

一、啟動未來之窗AI 二、初始化數據接口三、便捷接口數據進入東方仙盟獲取接口標準四、同步參數仙界界牌,冥界界牌,仙盟界牌 五、開始同步六、東方仙盟青云劍魂架構在當今數字化浪潮下,數據的采集、處理與傳輸成為眾多應用場景的核心需求。而…

Rust 仿射類型(Affine Types)

在 Rust 中,仿射類型(Affine Types) 是所有權系統的理論基礎,它規定了每個值有且僅有一次使用機會。這與線性類型(必須恰好使用一次)有所不同,允許值未被使用就被丟棄。Rust 中的仿射類型核心特…

python庫 arrow 庫的各種案例的使用詳解(更人性化的日期時間處理)

文章目錄 一、arrow概述1.1 arrow介紹1.2 安裝 arrow1.3 注意事項二、基本使用2.1 創建 Arrow 對象2.2 格式化輸出2.3 時間運算三、高級功能3.1 時區處理3.2 時間范圍3.3 時間間隔四、實際應用案例4.1 日志時間處理4.2 會議時間提醒4.3 國際化時間顯示5. Arrow 與 datetime 互操…

window 服務器上部署前端靜態資源以及nginx 配置

最近搞了一臺境外服務器 這種境外服務器是不可以配置域名的 但是可以使用ip訪問 但是如果需要 配置 需要下載nginx nginx: download 我這個是windows 的 服務器 所以下載windows 的nginx 下載完成以后 這個里面的html 文件 就是前端項目 里面必須要有index.html文件 部署…

行業實踐案例:醫療行業數據治理的挑戰與突破

“醫療數據不僅是資源,更關乎生命。” ——醫療行業的數據治理,是合規、安全、質量與智能化的多重挑戰。 ?? 本文目錄 為什么醫療行業亟需數據治理? 醫療行業數據治理的獨特挑戰 醫療數據治理體系設計原則 關鍵能力模塊與實踐案例 工具選型與落地建議 總結與下一步 1?? …

單細胞轉錄組學和空間轉錄組學數據的整合方法

文章目錄問題1:現有技術是否可以拿取固定數目的細胞進行組合形成spot問題2:是否有關于這方面的研究問題3:相關論文推薦一、細胞反卷積的核心目標與挑戰二、單細胞與空間轉錄組數據的整合方法分類1. 概率型方法(Probabilistic-base…

【Java EE】SpringBoot 配置文件、日志和單元測試

1. 什么是配置文件在我們的計算機上諸如 C:/Users,C:/Windows,.config,.xml 都是配置文件,配置文件主要為了解決硬編碼帶來的問題。硬編碼是將數據直接寫在程序的源代碼中,代碼寫死后再想改變就很麻煩。因此&#xff0…

CMake實踐:常見的調試技巧

目錄 1.簡介 2.用 message() 輸出關鍵信息 2.1.message簡介 2.2.常用模式及作用 2.3.核心用法示例 2.4.常見問題及解決 3.查看緩存變量:cmake -L 與緩存文件 3.1.列出所有緩存變量(cmake -L) 3.2.直接查看 / 刪除 CMakeCache.txt 4…

爬蟲-第一個爬蟲程序

瀏覽器里面都是html數據,拿到的都是頁面源代碼,可以用自己的方式打開測試。打開瀏覽器decode找charset

從SEO到GEO:優化策略如何應對傳統搜索與AI搜索的巨變

AI 搜索與傳統搜索結果優化之間有什么重疊之處? 為了幫助確定主要的差異,以及那些重疊程度最高的區域,我創建了一個比較(我會保持更新),通過搜索行為、優化領域、結果展示和交付,以及要跟蹤的 K…

mysql5.7系列-InnoDB的MVCC實現原理

談到數據庫事務都要提一下ACID 特性: 原子性(Atomicity):事務中的操作要么全部執行,要么全部不執行。 一致性(Consistency):事務執行前后,數據庫的狀態必須是一致的。 …

力扣-287.尋找重復數

題目鏈接 287.尋找重復數 class Solution {public int findDuplicate(int[] nums) {int low nums[0];int fast nums[nums[0]];//1.快慢指針找相遇點while (low ! fast) {low nums[low];fast nums[nums[fast]];}//2.雙指針找入環點int pre 0;while (pre ! low) {pre num…

Java 大視界 -- Java 大數據在智能教育個性化學習計劃制定與動態調整中的應用(338)

Java 大視界 -- Java 大數據在智能教育個性化學習計劃制定與動態調整中的應用(338) 引言:正文:一、Java 構建的學習行為數據采集與分析體系1.1 全場景數據接入引擎1.2 家校協同數據交互模塊1.3 學習特征提取與建模 二、Java 驅動的…

uniapp返回webview返回小程序并且跳轉回webview

webview頁面提示:wx一定要導入sdk// 返回小程序,并攜帶當前 WebView 的 URL 和狀態wx.miniProgram.postMessage({type: requestPayment,data: {webviewUrl: window.location.href,orderNum: this.orderNum,type: requestPayment}})setTimeout(() > {w…

[java: Cleaner]-一文述之

Cleaner Cleaner 是 Java 9 引入的資源清理機制,用于在對象被垃圾回收后自動或手動執行清理操作,替代 finalize(),安全、異步且高效。 public final class Cleaner {final CleanerImpl impl;static {CleanerImpl.setCleanerImplAccess(new Fu…

知識庫中如何確實嵌入文本塊大小?語義完整性與檢索顆粒度的平衡機制

一、文本塊大小確定的理論基礎與歷史演進 1.1 概念起源與發展脈絡 文本塊(Text Chunk) 這一概念最初源于信息檢索領域的實踐需求。早期的全文檢索系統面臨著一個根本性矛盾:如何在保持文檔語義完整性的同時,實現高效的信息定位。這…

C/C++ 實現在快速排序Quick Sort中的三種分區方式

1. 簡介神說, 要有光. 于是就有了光. 神說要有快排, 于是就有了快排. 快速排序Quick Sort的發明者 托尼 霍爾 是1980年的圖靈獎得主. 快速排序就是他發明的. 當時發明的背景是: 由于霍爾要高效地對俄語詞匯進行排序以優化翻譯程序, 而當時的排序算法(如冒泡, 插入排序)效率較低…

Flink TiDB CDC 環境配置與驗證

一、TiDB 數據庫核心配置 1. 啟用 TiCDC 服務 確保 TiDB 集群已部署 TiCDC 組件(版本需兼容 Flink CDC 3.0.1),并啟動同步服務: # 示例:啟動 TiCDC 捕獲 changefeed cdc cli changefeed create \--pd"localhos…

2025年數據挖掘與計算機科學國際會議 (DMCS 2025)

2025 International Conference on Data Mining and Computer Science【一】、大會信息 會議簡稱:DMCS 2025 大會地點:中國廣州 收錄檢索:提交Ei Compendex,CPCI,CNKI,Google Scholar等【二】會議簡介2025年數…

騰訊輕量云和云服務器的區別

從問題本身來看,用戶應該對云計算有基本了解,但可能不太清楚騰訊云產品線的細分定位。這類問題通常出現在項目初期技術選型階段,用戶需要權衡成本和性能。 讓我先梳理兩者的核心差異點。輕量云本質是面向輕量級應用的打包解決方案&#xff0c…