文章目錄
- 一、前言
- 二、相關知識
- 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?
- 加快開發與發布速度:頻繁小步提交,縮短迭代周期
- 提高軟件質量:自動化測試確保每次提交的代碼都是健壯的
- 減少發布風險 & 人為失誤:自動部署與故障回滾機制降低人工操作風險
- 加強團隊協作:透明流程與快速反饋提升開發—測試—運維間的協作效率
三、準備
- 服務器環境:Ubuntu20.04.3 X2臺(一臺用于配置Runner,另一臺用于部署正式代碼)
- 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 文化中扮演核心角色,不僅提升軟件交付效率,而且顯著增強質量與協作。具體實踐中,通過工具鏈構建流水線,輔以策略與監控,最終實現穩定、可控、頻繁的發布能力。