GitLab Runner 是什麼#

GitLab CI 的執行引擎稱為 Runner——它是實際跑你 CI/CD Job 的代理程式。
Runner 獨立於 GitLab 伺服器,可以安裝在任何機器上。

Runner 的兩種註冊方式:

  • Shared Runner:全域共用,所有專案都可以使用。
    gitlab.com 提供免費的 Shared Runner
  • Specific Runner:綁定到特定專案或群組,
    適合有特殊硬體需求(如 GPU)或安全隔離要求的場景

Executor:Runner 的執行環境#

Executor 決定了 Job 在什麼環境中執行,這是架設 Runner 時最重要的選擇:

Executor適用場景隔離性效能
Shell快速試用、簡單任務低(直接在主機執行)
Docker多數場景的最佳選擇中(容器隔離)
Docker Machine自動擴縮容量依雲端資源
KubernetesK8s 環境,大規模並行高(Pod 隔離)依叢集資源

Docker Executor 是大多數團隊的最佳起點
它提供足夠的隔離性,且 Job 之間不會互相污染環境。
Shell Executor 雖然簡單,但多個 Job 共用主機環境容易產生難以追蹤的問題。

建立第一個 CI Job#

GitLab CI 的設定全部寫在專案根目錄的 .gitlab-ci.yml

stages:
  - build
  - test
  - deploy

build-job:
  stage: build
  script:
    - echo "Building..."

.gitlab-ci.yml 支援 include 語法,
可以將共用的 Pipeline 定義抽到獨立檔案或其他專案中,實現跨專案的 Pipeline 模板共享。

Git 分支策略與 GitLab Flow#

書中涵蓋了主流的分支策略:

  • Git Flow:feature / develop / release / hotfix / main,適合版本化發布的軟體
  • GitHub Flow:只有 main + feature branch,簡單直覺
  • GitLab Flow:在 GitHub Flow 基礎上加入環境分支(staging、production),兼顧簡潔與部署控制

沒有「最好的」分支策略,只有最適合你團隊的。
如果你的產品是 SaaS 持續部署,GitHub Flow 或 GitLab Flow 就夠了。
如果是需要維護多版本的套件,Git Flow 較合適。

CI 疑難排解#

常見的 CI 問題與排查方向:

  • Pipeline 沒有被觸發:檢查 .gitlab-ci.yml 語法、Runner 是否在線、分支是否匹配 only/exceptrules 條件
  • Runner 連不上:確認 Runner 的 registration token 是否正確、網路是否可達 GitLab 伺服器
  • Service 容器無法連線:確認 services 區塊的 alias 設定與程式碼中的連線位址是否一致

當 CI 出問題時,第一步永遠是查看 Job Log。
GitLab 的 CI Log 通常會清楚指出錯誤原因,不要急著改設定重跑。

GitLab API 與排程觸發#

進階用法:

  • GitLab API:可以程式化地操作專案、觸發 Pipeline、管理 Runner
  • CI Trigger:讓外部系統(如 webhook)觸發特定的 Pipeline
  • Scheduling Pipelines:設定排程定期執行 Pipeline,適合夜間建構、定期安全掃描

排程 Pipeline 是自動化的好幫手。
常見用途包括:每日凌晨跑完整測試套件、每週執行依賴更新檢查、定期建構最新的 Docker Image。

開發者的行動指南#

  1. 先架一個 Docker Executor 的 Runner:這是最實用的起點
  2. 從簡單的 Pipeline 開始:先跑 lint + test,再逐步加入 build + deploy
  3. 善用 CI Lint 工具:GitLab 提供線上的 .gitlab-ci.yml 驗證工具,在提交前先驗證語法
  4. 分支策略早決定:這會直接影響 Pipeline 的設計