GitLab Runner 作為 GitLab CI/CD 的核心元件,負責執行 .gitlab-ci.yml 定義的作業,實作自動化流程。本文詳細說明如何在 Windows、macOS 和 Linux 等不同平台安裝和組態 GitLab Runner,並探討 Runner 的型別、執行器選擇、安全性設定及高用性組態。讀者將瞭解如何註冊 Runner、組態執行器、設定環境變數,以及如何針對不同專案或群組設定 Runner 的許可權。此外,文章也提供常見問題的解決方案,例如 Runner 無法註冊或 Pipeline 無法觸發等,並探討未來 GitLab Runner 的發展趨勢,例如更深入的雲端整合、更高效能的運算需求以及安全性提升等議題,協助讀者全面掌握 GitLab Runner 的使用技巧。

安裝與組態 GitLab Runner

要充分利用這章節內容,建議讀者在 GitLab 例項上擁有一個帳號(無論是軟體即服務(SaaS)或自行管理)。此外,安裝 GitLab Runner 代理程式需要一台電腦(Windows、Mac 或 Linux),以便安裝 Runner 二進位制檔案。個人筆記型電腦完全足夠,因為 Runner 的資源需求非常輕量。如果使用 GitLab.com,CI/CD 管道也可以使用 GitLab 的 SaaS Runner 執行,但需要注意可能的使用費用。

定義 GitLab Runner 與其與 CI/CD 的關係

GitLab CI/CD 是針對專案中的程式碼執行的一系列任務,通常包括建置、測試和佈署作業的組合。重要的是,CI/CD 管道並不在 GitLab 應用程式內執行,因為每個作業通常需要特定的平台和工具集才能成功執行。

註: GitLab Runner 是程式,它接收來自 GitLab 的 CI/CD 作業、在適當的執行環境中執行作業的任務,然後將結果報告回 GitLab。

GitLab Runner 的開源特性

GitLab Runner 是一個開源應用程式,使用 Go 語言編寫。它的官方存函式庫位於 GitLab.com 上的一個名為 gitlab-runner 的專案中。截至撰寫本文時,讀者可以前往 https://gitlab.com/gitlab-org/gitlab-runner 檢視該專案的開發和原始碼。與主 GitLab 應用程式一樣,GitLab Runner 採用每月發行週期。最新版本的 GitLab Runner 通常與 GitLab 的主要和次要版本號相同,但這並不保證永遠如此。像大多數的 GitLab 一樣,GitLab Runner 是開源且根據 MIT 授權條款分配。

此圖示展示了 GitLab Runner 的通訊和作業執行流程:

  flowchart TD
    A[GitLab] --> B[Runner]
    B --> C[Execution Environment]
    C --> B
    B --> A

此圖示解說:

  • 顯示了從 GitLab 發出指令到 CI/CD 作業在執行環境中完成後傳回結果的完整流程。
  • CI/CD 作業由 Runner 接收並依據 .gitlab-ci.yml 中的指令進行執行。

根據 .gitlab-ci.yml 的 CI/CD 作業

如同之前章節所述,GitLab CI/CD 管道由 .gitlab-ci.yml 中定義的階段和作業組成。每個作業包含一組指令,通常是順序執行的 shell 風格命令。預設情況下,每次新提交到包含 .gitlab-ci.yml 檔案的分支都會啟動新的管道執行。這意味著 .gitlab-ci.yml 中的作業將根據組態中的順序和邏輯進行排程。

當 CI/CD 管道執行時,當作業到達其「輪到」時刻時,作業將被分配給可用的 GitLab Runner,該 Runner 能夠執行作業的指令。一個作業會被分配給一個 Runner。當 Runner 接收到來自 GitLab 的作業後,它會首先取得啟動管道的提交,以便擁有相關的程式碼快照。然後,Runner 可能會執行一些步驟,例如編譯構建、執行單元測試、執行安全掃描或將應用程式佈署到某種環境中。請記住,Runner 只會按照 .gitlab-ci.yml 中作業的指令進行操作。當 Runner 完成作業中指定的任務後,它會將結果報告回 GitLab。這幾乎總是包括傳回透過或失敗狀態,以及在作業執行期間生成或修改的任何工件。

如同第四章中所討論(檢視管道列表部分),管道狀態和作業執行可以透過 GitLab UI 實時監控。Runner 不斷與 GitLab 通訊,並在 UI 中可以檢視可用的 Runner、修改 Runner 設定、干預管道和作業執行、檢視上傳的工件等。可以把 GitLab 的 CI/CD 元件之間的關係類別比為神經系統:Runner 是肌肉(負責執行 CI/CD 作業),.gitlab-ci.yml 是大腦(提供指令),GitLab 則是神經系統(協調大腦和肌肉之間的通訊)。

安裝與組態 GitLab Runners

安裝步驟

首先我們需要安裝 GitLab Runner 應用程式:

Windows 安裝方式
  1. 下載最新版本的 Windows 安裝包
  2. 執行安裝包並遵循安裝指示
  3. 安裝完成後開啟命令提示字元
  4. 執行以下命令來啟動服務:
gitlab-runner.exe start
macOS 安裝方式
  1. 下載最新版本 Homebrew 包
  2. 執行以下命令來安裝:
brew install gitlab-runner
Linux 安裝方式
  1. 新增官方儲存函式庫:
sudo apt-get install curl -y
curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
  1. 啟動服務:
sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner
sudo gitlab-runner start

組態步驟

安裝完成後我們需要組態 runner:

  1. 在 Terminal 中輸入以下命令來註冊 runner:
sudo gitlab-runner register
  1. 按照指示輸入您在註冊 runner 時所需資訊:
  • GitLabs URL:例如 https://gitlab.com
  • Token:您可以在您要註冊 runner 的專案或群組中的 Settings -> CI/CD -> Runners -> Set up a specific runner manualy 複製 token。
  • Description:描述您 runner 的名稱。
  • Tags:選擇標籤來標識此 runner。
  • Executor:選擇 executor 方式:shell, ssh, docker, kubernetes等。
  • Default Docker image:選擇預設 Docker image。

安全性設定

為了確保安全性,您應該限制哪些專案或群組可以使用您的 runner:

  1. 在您要限制運算者許可權的專案或群組中:
    • 前往 Settings -> CI/CD -> Runners。
    • 勾選 “Only allow specific runners to run pipelines in this project”。
    • 在 “Specific runners allowed to run pipelines” 中輸入 runner 名稱或標籤。

測試設定

建立測試專案來檢查 runner 是否正常運作:

  1. 建立一個新專案或使用現有專案。
  2. 在專案根目錄中建立 .gitlab-ci.yml 檔案並新增以下內容:
stages:
  - build

build_job:
  stage: build
  script:
    - echo "Hello, World!"
  1. 提交此檔案並檢視是否能夠觸發 pipeline。

高用性設定

為了確保高用性我們可以多設定幾個 runner:

  1. 在不同機器上重複以上安裝及組態步驟。
  2. 輸入相同 token 註冊至同一個 project 或 group。

編輯組態檔案

如果需要調整更多細節你可以編輯組態檔案 /etc/gitlab-runner/config.toml:

[[runners]]
  name = "my_runner"
  url = "https://gitlab.com/"
  token = "YOUR_TOKEN"
  executor = "shell"

潛在問題及解決方案

無法註冊 runner

如果無法註冊 runner ,請檢查以下幾點:

  1. Token 是否正確:確認您使用的是正確且未過期 token 。
  2. URL 是否正確:請確保 URL 和 token 對應正確。
  3. 網路連線:檢查機器網路連線是否正常。

pipeline 無法觸發

如果 pipeline 無法觸發:

  1. 檢查 .gitlab-ci.yml:確認檔案格式正確且沒有語法錯誤。
  2. 檢查許可權:確認 runner 有許可權執行此專案。

未來趨勢及改進方向

隨著技術發展及需求變化可能會有以下趨勢:

  1. 更多雲端整合:未來可能會有更多雲端運算平台整合方案以支援大規模運算需求。
  2. 更高效能需求:隨著專案規模增大可能會有更高效能需求使得跨區域跨機器結合資源分享運算成為趨勢。
  3. 安全性提升:未來可能會有更高安全需求以支援敏感資料處理需求。

總結來說,GitLab Runners 提供了一種靈活且高效地執行 CI/CD 管道方法並支援多種平台及環境需求。透過合理組態及監控我們可以充分利用其優勢來提升開發效率及穩定性。


注意事項:這篇文章僅供技術參考且不保證任何商業使用應用情況下之效果表現

GitLab Runner 支援的架構與平台

GitLab Runner 支援多種架構和作業系統平台,以下是截至 GitLab Runner 15.3 的支援情況:

支援的電腦架構 支援的作業系統
x86 Debian
AMD64 Ubuntu
ARM CentOS
ARM64 Red Hat Enterprise Linux
s390x Fedora
ppx64le Linux Mint
Microsoft Windows
macOS
FreeBSD

這些支援的架構和作業系統是 GitLab 官方檔案中明確列出的。對於列出的 Linux 發行版,GitLab 提供了可以使用發行版原生包管理器管理的官方 GitLab Runner 包。即使您選擇的 Linux 發行版未在表中列出,只要電腦架構相容,通常也可以手動安裝 GitLab Runner 二進位制檔案。

GitLab Runner 也可以宿主在容器或容器協調系統中,例如 Docker 和 Kubernetes。這裡指的是 GitLab Runner 代理本身的宿主環境,而不是它用來執行工作的執行器或執行環境。稍後我們將詳細討論執行器時會發現,無論 GitLab Runner 代理安裝在哪裡,只要有相關容器工具的存取許可權,都可以指示執行器使用 Docker 或 Kubernetes。

執行器的型別

在 GitLab 中,工作是組織成專案和群組。專案和群組通常代表團隊或產品線等組織邊界。專案通常(但不總是)包含一個 Git 存函式庫,其中包含原始碼。群組是容器,它們包含專案和其他群組,類別似於檔案系統中資料夾組織檔案和其他資料夾。

GitLab Runners 可以被組織並分配到專案、群組或例項級別,使其可供 CI/CD Pipeline執行工作。

特定執行器

特定執行器是為單一專案啟用的執行器。專案所有者和維護者可以選擇僅為他們的專案註冊執行器。特定執行器僅會選取並執行來自其指派專案中的 CI/CD Pipeline工作。

使用特定執行器有幾個優點:

  1. 獨立設定:專案所有者和開發者可以根據專案需求設定所需的執行器基礎設施,而無需修改專案之外的內容。例如,開發者可以在本地筆記型電腦上安裝 GitLab Runner,並將特定執行器註冊到他們是主要貢獻者的專案中。

  2. 專案級資源管理:特定執行器更容易進行專案級別的資源使用記帳。此外,安全性和合規性政策可能需要某些專案使用與組織其他部分分離的專用基礎設施。

  3. 自訂工具:特定執行器允許為單個專案提供專屬或自訂工具。

特定執行器可在專案設定下管理:

  flowchart TD
    A[GitLab 專案] --> B[CI/CD 設定]
    B --> C[註冊特定執行器]
    C --> D[僅處理該專案的工作]

群組執行器

群組級別註冊的執行器可供該群組及其子群組中的所有專案使用。群組所有者可以建立和管理群組級別的執行器,這些執行器會以先進先出(FIFO)方式接受並執行 CI/CD 工作。

群組執行器對於希望分享資源或執行多專案的 CI/CD Pipeline但仍需管理自己的執行器以進行記帳或合規性原因的團隊非常有用。

  flowchart TD
    A[GitLab 群組] --> B[CI/CD 設定]
    B --> C[註冊群組級別運算]
    C --> D[接受並執行該群組及子群組中所有專案的工作]

分享運算

GitLab 例項管理員可以註冊可從例項中任何群組中的任何專案接收 CI/CD 工作的分享運算。這使平台擁有者能夠將運算管理從開發者或專案經理抽象出來。例項管理員還可以在全域性級別組態 CI/CD 配額以限制單個專案可使用多少分享運算。

  flowchart TD
    A[GitLab例項] --> B[CI/CD 配額]
    B --> C[組態全域性級別限制]
    C --> D[所有分享運算處理任意專案工作]

安裝與組態 GitLab Runners

安裝 GitLab Runner

安裝 GitLab Runner 的步驟因作業系統而異,但基本流程如下:

  1. 下載二進位制檔:從 GitLab 的官方網站下載適合您作業系統和架構的二進位制檔。
  2. 解壓縮並移動:解壓縮下載的檔案並將其移動到您希望安裝的位置。
  3. 註冊 Runner:使用 gitlab-runner register 命令註冊 Runner,並按照提示輸入必要資訊。

組態 GitLab Runner

組態 GitLab Runner 涉及編輯 config.toml 檔案。以下是一些常見組態選項:

  • concurrent = <number>:設定同時處理多少工作。
  • check_interval = <seconds>:設定 Runner 詢問新工作的頻率。
  • environment = ["VAR=value"]:設定環境變數。

例如:

[[runners]]
  name = "my-runner"
  url = "https://gitlab.example.com/"
  token = "YOUR_TOKEN"
  executor = "docker"
  [runners.custom_build_dir]

說明

這些組態選項控制了 Runner 的行為。例如:

  • concurrent 決定了 Runner 能同時處理多少個工作。
  • check_interval 決定了 Runner 每隔多少秒詢問新工作。
  • environment 用於設定環境變數,這些變數將在每個工作中可用。

######## 指令程式碼範例

# 下載適合您作業系統與架構之二進位檔
curl -L --output gitlab-runner-linux-amd64.zip https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64.zip

# 解壓縮二進位檔
unzip gitlab-runner-linux-amd64.zip

# 移動二進位檔到 /usr/local/bin/ 專案
sudo mv gitlab-runner /usr/local/bin/

# 驗證安裝
gitlab-runner --version

######內容解密:

這段程式碼展示瞭如何在 Linux 機器上下載、解壓縮並安裝 GitLab Runner 的過程:

  1. 下載二進位檔:使用 curl 命令從 GitLab 的官方網站下載適合 Linux AMD64 架構的二進位檔。
  2. 解壓縮二進位檔:使用 unzip 命令解壓縮下載的 ZIP 檔。
  3. 移動二進位檔:將解壓縮後的 gitlab-runner 二進位檔移動到 /usr/local/bin/ 專案以便全域使用。
  4. 驗證安裝:執行 gitlab-runner --version 命令來驗證安裝是否成功並檢視已安裝版本。

這些步驟確保了您能夠成功地將 GitLab Runner 安裝到您的 Linux 機器上並準備好進行組態和使用。