GitLab Runner

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.1c1g1bxbm

Linux 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

 

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