GitLab Runner流程說明!!
被問到GitLab Runner,只知道他負責起Container跑pipeline的Job,但這回答超粗淺,其實一連串流程還蠻多的,紀錄一下所查到的。
比較完整回答:
GitLab Runner 是一個在 VM 上運行的 agent,它會主動向 GitLab Server 拉取 CI/CD job,並透過 executor(如 Docker)在本地建立執行環境(container),完成 build/test/deploy 後再回傳結果與 artifacts。
GitLab Runner運作是: 會定期輪詢 GitLab Job Queue,取得符合 tag / executor 的 job。
Developer Commit
↓
GitLab Server
↓ (pipeline created)
CI/CD Job Queue
↓
GitLab Runner (polling)
↓
Executor (Docker / Shell / K8s)
↓
Job Container / Environment
↓
Result + Artifacts 回傳 GitLab註冊GitLab Runner
在GitLab→Settings→CI/CD→Runners 可以註冊一個新的 Runner,會得到以下資訊。
gitlab-runner register
--url https://gitlab.com
--token glrt-0uy3BFeSZ86swxxxeghttjthdhhdsaxcGcT.01.1c1g1bxbmLinux VM 安裝GitLab Runner
# 新增 GitLab Runner repository
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
# 安裝
sudo apt-get install gitlab-runner -y
# 註冊成Runner
sudo gitlab-runner register
## 中間會有一些註冊問題需填入(Token、Tags、Executor)
# 設定 gitlab-runner「開機自動啟動」
sudo systemctl enable gitlab-runner
# 啟動 Runner
sudo systemctl start gitlab-runner
# 驗證 Runner 是否註冊成功
gitlab-runner list應該會看到剛註冊的 Runner 出現在列表中,並於GitLab中,此Runner也會顯示 Online。
如果註冊時Executor選擇Docker,需安裝Docker Engine(Runner 只是「控制器」,真正跑 CI job container 的是 Docker)。
# 更新套件清單
sudo apt update
# 安裝 Docker Engine
sudo apt install docker.io -y
# 設定 Docker「開機自動啟動」
sudo systemctl enable docker
# 立即啟動 Docker 服務
sudo systemctl start docker讓 gitlab-runner 可以用 docker
# 把 gitlab-runner 使用者加入 docker 群組
sudo usermod -aG docker gitlab-runner
# 重啟 GitLab Runner 服務
sudo systemctl restart gitlab-runner各個運行節點的說明:
GitLab Server
- 接收 commit 與 Merge Request (MR)
- 解析
.gitlab-ci.yml - 產生 CI/CD pipeline
- 將 pipeline 拆分成 multiple jobs
- 將 jobs 存入 database(pending state)
Job Queue / Scheduler (GitLab 內部機制)
- 儲存 pipeline jobs(pending / running / success / failed)
- 決定 job 是否「ready to run」
GitLab Runner Host(VM / Physical / K8s Node)
- 真的承載 Runner Agent 的機器
- 可以是 VM、實體機或 Kubernetes Node
GitLab Runner Agent
- 主動 polling GitLab Server,接收 job definition
- 將 Job 派給對應 Executor(Shell / Docker)
- 收集 job 執行結果,傳回 GitLab Server
Docker Executor
- 在 Runner Host 上啟動 Docker Engine
- 將 CI Job 包裝成 container 執行
- 提供乾淨的隔離環境
CI Job Container
- 真正跑 pipeline 裡指定的程式、建置或測試
- Runner Agent 將 job script 放進 container 執行
- 保證每個 job 環境乾淨、可重現
Run Script (.NET / Build / Test)
- Job container 內執行具體腳本
- 可能是建置、單元測試、部署等任務
- 產生 artifacts 或 log

先記錄到這邊,有錯誤再麻煩糾正,感謝!!