GitLab CI/CD Pipeline並非在 GitLab 應用程式內執行,而是仰賴 GitLab Runners 在特定環境中執行作業。本文將詳細介紹 GitLab Runners 的架構,說明 Runner 與 GitLab Runner 應用程式的區別,並列舉其支援的平台,包含 Linux、Windows、macOS、Docker 和 Kubernetes 等。接著,逐步引導讀者完成 GitLab Runners 的安裝與組態,包含註冊 Runner、設定執行環境等步驟,並提供 Shell、Docker 和 SSH 三種執行環境的組態範例與程式碼解析,幫助讀者理解關鍵組態選項的意義和作用。文章也提供實際應用案例,示範如何利用 Docker 執行環境進行自動化測試,以及如何透過 SSH 佈署程式碼到遠端伺服器,並提供 .gitlab-ci.yml 組態檔案的撰寫範例和詳細解說。最後,文章提出整合與最佳化建議,例如使用多樣化 Runner、強化自動化測試、注重安全性考量,並持續最佳化組態,以提升效能和可靠性,同時也探討 CI/CD 的未來趨勢,例如 Serverless 運算模型的應用,以協助讀者建立更完善的 CI/CD 流程。

使用及組態 GitLab Runners

在開始這個章節之前,我們需要確保你已經擁有一個 GitLab 帳號,無論是使用 GitLab 的軟體即服務(SaaS)還是自行管理的版本。此外,你需要一台電腦(Windows、Mac 或 Linux)來安裝 GitLab Runner 應用程式。一台個人電腦完全足夠,因為 Runner 是輕量級的,且系統需求極低。如果你使用的是 GitLab.com,CI/CD Pipeline也可以使用 GitLab 提供的 SaaS Runners 執行,但要注意可能的使用費用。

GitLab Runners 的定義及其與 CI/CD 的關係

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

注意

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

GitLab Runner 的架構與支援平台

在探討 Runner 元件、安裝及組態之前,我們先澄清一些術語。本章中提到的「GitLab Runner」和「Runner」看似可以互換使用,但實際上有一些細微差異。

  • GitLab Runner:指的是在電腦上安裝的一個應用程式。
  • Runner:指的是透過 GitLab Runner 應用程式註冊並組態的個別執行環境。

例如,考慮一台裸機 Linux 伺服器。管理員可以安裝 GitLab Runner 應用程式,然後註冊以下:

  • 一個 Runner 處理在伺服器作業系統的 shell 會話中執行作業。
  • 第二個 Runner 在 Docker 容器中執行作業。
  • 第三個 Runner 透過 SSH 將作業命令傳輸到另一台伺服器。

這意味著,單個 GitLab Runner 應用程式可以註冊多個 Runner。GitLab Runner 應用程式負責啟動、停止和管理這些個別的 Runner 處理流程,並從 GitLab 接收 CI/CD 作業。

支援的平台與架構

截至撰寫本文時,GitLab Runner 可以安裝在每個主要 Linux 發行版和架構上,以及 FreeBSD、Windows、macOS、Docker 和 Kubernetes。GitLab 還提供符合 FIPS 140-12 標準的 runner 二進位制檔案,適用於需要法律或內部合規性要求的組織。

安裝與組態步驟

安裝步驟

首先,我們來看看如何在不同平台上安裝 GitLab Runner:

Linux

在 Linux 上安裝 GitLab Runner 相當簡單。你只需執行以下命令:

sudo apt-get install gitlab-runner
Windows

在 Windows 上安裝 GitLab Runner,你可以下載 Windows 安裝程式並按照提示進行安裝。

macOS

在 macOS 上安裝 GitLab Runner 的步驟如下:

brew install gitlab-runner

組態步驟

安裝完成後,我們需要進行組態。這包括註冊 runner 並設定它們的執行環境。

註冊 Runner

你可以使用以下命令來註冊 runner:

sudo gitlab-runner register

這個命令會引導你輸入一些必須資訊,包括 GitLab 專案 URL 和一個註冊令牌(註冊令牌可以從你的專案設定中找到)。

組態執行環境

根據你的需求,你可以組態 runner 使用不同的執行環境。例如:

  • Shell:直接在主機作業系統上執行命令。
  • Docker:在 Docker 容器中執行命令。
  • SSH:透過 SSH 連線到其他伺服器並執行命令。
組態範例:Docker 執行環境

以下是組態 Docker 執行環境的一個範例:

[[runners]]
  name = "docker-runner"
  url = "https://gitlab.com/"
  token = "YOUR_REGISTRATION_TOKEN"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

內容解密:

這段程式碼定義了一個名為「docker-runner」的 runner。它使用 Docker 作為其執行環境。以下是一些關鍵組態選項:

  • executor:設定為 docker,表示這個 runner 將使用 Docker 作為其執行環境。
  • image:指定要使用的 Docker 單一映像檔案。這裡使用的是 alpine:latest
  • volumes:定義 Docker 單一映像檔案內部的分享卷。
  • shm_size:設定分享記憶體大小。

組態範例:SSH 執行環境

以下是組態 SSH 執行環境的一個範例:

[[runners]]
  name = "ssh-runner"
  url = "https://gitlab.com/"
  token = "YOUR_REGISTRATION_TOKEN"
  executor = "ssh"
  [runners.ssh]
    host = "remote-server.example.com"
    user = "deploy"
    password = "your-password"
    port = "22"

內容解密:

這段程式碼定義了一個名為「ssh-runner」的 runner。它使用 SSH 作為其執行環境。以下是一些關鍵組態選項:

  • executor:設定為 ssh,表示這個 runner 將使用 SSH 作為其執行環境。
  • host:指定要連線的遠端伺服器地址。
  • user:指定要登入遠端伺服器的使用者名稱。
  • password:指定登入遠端伺服器的密碼。
  • port:指定要連線遠端伺服器所使用的埠號碼(預設為 22)。

組態與管理

一旦 runner 被註冊並組態好後,你就可以透過 GitLab UI 來監控和管理它們。你可以檢視可用 runners、修改 runner 組態、干預Pipeline和作業執行、檢視上傳物件等。

案例研究:實際應用

假設我們有一個專案需要進行自動化測試和佈署。我們可以設定一個 Docker 執行環境來執行測試作業,並在佈署時透過 SSH 上傳程式碼到遠端伺服器。

測試Pipeline範例

stages:
  - test

test_job:
  stage: test
  script:
    - echo "Running tests..."
    - ./run_tests.sh

內容解密:

這段 .gitlab-ci.yml 組態檔案定義了一個名為「test_job」的作業,該作業位於「test」階段。當Pipeline執行時,「test_job」會首先下載最新程式碼快照並按照 .gitlab-ci.yml 中指定的順序和邏輯進行測試作業。

  1. stages:定義Pipeline中的階段。「test」階段表示測試階段。
  2. test_job:定義了一個名為「test_job」的作業。
  3. stage: test:將「test_job」分配到「test」階段。
  4. script:包含要在該作業中執行的一系列命令:
    • echo "Running tests...":輸出訊息指示正在執行測試。
    • ./run_tests.sh:執行測試指令碼檔案。

傳輸Pipeline範例

stages:
  - deploy

deploy_job:
  stage: deploy
  script:
    - echo "Deploying application..."
    - scp -r ./build remote-server:/var/www/app/

內容解密:

這段 .gitlab-ci.yml 組態檔案定義了一個名為「deploy_job」的作業,「deploy_job」會首先下載最新程式碼快照並按照 .gitlab-ci.yml 中指定的順序和邏輯進行佈署作業。

  1. stages:定義Pipeline中的階段。「deploy」階段表示佈署階段。
  2. deploy_job:定義了一個名為「deploy_job」的作業。
  3. stage: deploy:將「deploy_job」分配到「deploy」階段。
  4. script:包含要在該作業中執行的一系列命令:
    • echo "Deploying application...":輸出訊息指示正在進行應用佈署。
    • scp -r ./build remote-server:/var/www/app/:將本地目錄中的內容傳輸到遠端伺服器上的特定目錄中。

整合與最佳化建議

  1. 多樣化 runner:根據不同需求設定多種 runner(如 Shell、Docker 和 SSH),以應對不同情境下的 CI/CD Pipeline需求。
  2. 自動化測試:利用 Docker 執行環境來隔離測試環境,確保測試結果的一致性和可靠性。
  3. 安全性考量:對於敏感操作(如佈署)使用 SSH 或其他安全協定確保資料傳輸過程中的安全性。
  4. 持續最佳化:根據實際營運情況不斷最佳化組態檔案和 runner ,提升效能和可靠性。

未來趨勢與展望

隨著 DevOps 文化的普及和技術發展速度加快,「持續整合/持續交付/持續佈署」(CI/CD) 已成為現代軟體開發流程中的不可或缺的一部分。未來可能會看到更多自動化工具和技術出現,進一步簡化和提升 CI/CD Pipeline管理效率。同時,隨著雲端技術發展,「無伺服器」(Serverless)運算模型也可能被引入 CI/CD Pipeline中,進一步降低維運成本和提高彈性應變能力。

問答與討論區域

如果您有任何問題或想法分享相關經驗請放心留言!玄貓會隨時回覆您!

GitLab Runner 的架構與支援平台

GitLab Runner 是一個開源的工具,用來執行 GitLab CI/CD 管道中的作業。它支援多種不同的架構和作業系統平台,確保了在各種環境中都能高效執行。以下是 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 Runner 支援的架構和作業系統平台。對於上述列出的 Linux 發行版,GitLab 提供了可以透過發布版本的原生套件管理器進行管理的官方 GitLab Runner 捆綁包。即使您選擇的 Linux 發行版未列在表中,也可以手動安裝 GitLab Runner 二進位制檔案,只要該 Linux 發布版本具有相容的電腦架構。

此外,GitLab Runner 也可以宿主在容器或容器協調系統中,例如 Docker 和 Kubernetes。這裡指的是 GitLab Runner 代理程式本身的宿主環境,而不是它用來執行作業的執行環境(executor)。稍後我們會詳細討論 executor,瞭解如何指導 runner 使用 Docker 或 Kubernetes 作為其 executor,無論 GitLab Runner 代理程式安裝在何處,只要能夠存取相關容器工具即可。

Runners 的分類別

在 GitLab 中,Runners 可以分為特定、群組和分享三種型別,這些型別分別針對不同層級的資源進行管理。

特定 Runners(Specific Runners)

特定 Runners 是針對個別專案設定的。專案擁有者和維護者可以選擇為他們的專案註冊特定 Runners,這些 Runners 只會接收並執行該專案中的 CI/CD 工作流程。使用特定 Runners 有幾個優點:

  1. 自主管理:專案擁有者和開發者可以在不更改專案外部設定的情況下設定所需的 runner 基礎設施。
  2. 資源使用計算:特定 Runners 允許更容易地進行專案級別的資源使用計算。
  3. 安全與合規:某些專案可能需要專用基礎設施來符合安全和合規要求。

群組 Runners(Group Runners)

群組 Runners 是針對群組層級設定的。註冊在群組層級上的 Runners 會對群組內所有專案中的 CI/CD 工作流程可見。群組擁有者可以建立和管理群組 Runners,這些 Runners 接受並執行 CI/CD 作業以先進先出(FIFO)方式。

群組 Runners 對於希望分享資源或執行多專案 CI/CD 工作流程但仍需管理自己的 runners 的團隊非常有用。

分享 Runners(Shared Runners)

分享 Runners 是針對整個 GitLab 例項設定的。GitLab 例項管理員可以註冊分享 Runners,這些 Runners 能夠接收來自任何專案中的 CI/CD 作業。這樣做可以讓平台擁有者將 runner 管理從開發者或專案經理中抽象出來。

例項管理員還可以組態全域性級別的 CI/CD 配額,以限制每個專案可使用的分享 runners 的 CI/CD 工作流程分鐘數。

安裝與組態 GitLab Runners

安裝與組態 GitLab Runner 的過程相對簡單。根據不同的作業系統和平台,安裝步驟可能有些許不同。以下是一個通用的安裝步驟示例:

在 Ubuntu 上安裝 GitLab Runner

  1. 新增 GitLab Runner 的官方倉函式庫

    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
    
  2. 啟動並啟用 GitLab Runner 服務

    sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    sudo gitlab-runner start
    
  3. 註冊 runner

    sudo gitlab-runner register
    

在註冊過程中,您需要提供一些必要資訊,例如 GitLab URL、註冊令牌、描述標籤等。