iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0
IT Operation

迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰系列 第 14

Day 14 Jenkins 分散式架構與執行節點 (Agent) 配置

  • 分享至 

  • xImage
  •  

前言

在規模化專案的交付流程中,單一 Jenkins Master 的架構往往會成為效能與安全性的瓶頸。Master 節點應專注於任務調度、流程控管與 UI 展示,而高強度的運算任務——如程式碼編譯、單元測試、容器構建與安全掃描——則應交由專門的執行節點(Agent)處理。

本篇將深入探討 Jenkins 分散式架構的設計思維,並引導你完成一個具備多重編譯環境(.NET, NodeJS, Java)的 Linux Agent 配置,實現運算資源的彈性擴展與環境隔離。

為什麼需要分散式 Jenkins 體系?

  1. 資源隔離與穩定性:避免因單一龐大建置任務(如編譯大型 C++ 專案)耗盡 Master 資源,導致整個 CI/CD 平台回應遲緩。
  2. 安全性(Security Silo):Master 節點通常儲存了全域的金鑰與配置,透過 Agent 執行任務能降低生產環境憑證暴露的風險,落實「權限最小化」。
  3. 環境多元化:不同的專案可能需要不同的作業系統(Ubuntu, Windows, macOS)或特定版本的 SDK。透過 Agent 標籤(Labels),我們能精確地將任務導向具備對應環境的機器。

執行節點 (Agent) 的環境初始化

在 Agent 主機(<AGENT_IP>)上,我們需要根據專案需求安裝必要的 Runtime。

1. 核心通訊組件:Java 17

Jenkins Master 與 Agent 之間的通訊(JNLPS / SSH)依賴於 Java 執行環境。

sudo apt-get update
sudo apt-get install openjdk-17-jdk -y

2. 編譯環境鎖定:.NET 8 & NodeJS

為了確保「構建一致性」,Agent 上的 SDK 版本必須與開發團隊採用的標準一致。

# 安裝 .NET 8 SDK
sudo apt-get install -y dotnet-sdk-8.0

# 透過官方 Source 安裝穩定版 NodeJS 18
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

3. 建立標準化工作空間

# 定義 Jenkins 專屬的工作目錄路徑
sudo mkdir -p /home/J
sudo chmod 777 -R /home/J

於 Jenkins Master 註冊與納管節點

  1. 導向 Manage Jenkins -> Nodes -> New Node

  2. 節點定義

    • Node name: Linux-Build-Agent-01
    • Remote root directory: /home/J (Agent 端的代碼檢出位置)
    • Labels: dotnet ubuntu linux (Pipeline 中用來路由任務的關鍵標籤)
    • Usage: Only build jobs with label expressions matching this node (確保資源專款專用)
  3. 通訊配置 (Launch Method)
    我們採用 Launch agents via SSH,這是 Linux 環境下最穩健且安全的連線方式。

    • Host: <AGENT_IP>
    • Credentials: 建議使用 SSH Private Key。將 Agent 的公鑰放進 ~/.ssh/authorized_keys,私鑰存於 Jenkins Master。
    • Host Key Verification Strategy: 在受信任的內部網路中可選用 Non verifying Verification Strategy,但在跨網路環境建議嚴格校驗。

節點效能微調:執行緒 (Executors) 數量

  • Number of executors: 10
  • 技術原理:這決定了該節點能同時併行執行多少個單獨的任務步驟。在高強度的企業開發環境中,設定為 10 能確保多個 workflow 同時運行時不至於排隊過久。

驗證與連線測試

啟動節點後,查看 Jenkins Console Log。若看到 Agent successfully connected and online,表示該 Agent 已正式納入算力資源池。

結語

透過 Master/Agent 架構的建立,我們成功將「調度」與「執行」解耦。這提升了交付流程的效能,同時也為後續支援不同技術棧的專案提供了擴展可能。

算力已到位,明天的文章我們將探討如何透過「全域工具配置(Global Tool Configuration)」來管理跨節點的工具路徑,實現真正的環境抽象化。


上一篇
Day 13 Jenkins 核心系統安裝與 Docker 部署實務
下一篇
Day 15 Jenkins 全域工具配置 (Global Tool Configuration) — 構建跨環境的抽象層
系列文
迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言