iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0

前言

在建立自動化交付鏈條時,Jenkins 作為核心調度引擎,其穩定性與可擴展性直接決定了 CI/CD 流程的成效。為了確保環境的可重現性並簡化維運難度,我們採用 Docker Compose 進行部署。本篇將詳細解析如何選擇正確的映像檔、配置數據持久化,以及完成初始化的安全性設定。

在我們的網路架構中,Jenkins 扮演著「內部執行者(Internal Worker)」的角色。

整體 workflow 為:開發者在 GitHub (Public) 提交代碼 -> 觸發 GitHub Actions (Orchestrator) -> 透過 GitLab (Proxy) 轉發指令 -> 最終抵達位於內部網路(<JENKINS_IP>)的 Jenkins 執行具體任務。為了對外提供穩定服務,Jenkins 同樣掛載於 <REVERSE_PROXY_IP> 的 IIS Reverse Proxy 之後,網址為 https://ci-cd.example.com/jenkins/

映像檔選擇策略:為什麼是 jenkins/jenkins:lts-jdk17?

在生產環境中,穩定性高於一切。Jenkins 官方提供了多種映像檔標籤,我們的選擇標準如下:

  • LTS (Long-Term Support):相較於每週更新的版本,LTS 版本每 12 週發布一次大更新,並持續修補安全性漏洞,這能大幅降低因外掛程式不相容導致的系統崩潰風險。
  • JDK 版本:現代 Jenkins 核心與主要外掛程式已全面轉向 Java 17,建議直接使用 jenkins/jenkins:lts-jdk17 映像檔。

Docker Compose 部署配置

透過宣告式的 YAML 檔案,我們能將網路配置、磁碟掛載與環境變數版本化,實現一鍵啟動。

1. 建立 docker-compose.yml

services:
  jenkins:
    image: jenkins/jenkins:lts-jdk17
    container_name: jenkins-core
    restart: unless-stopped
    ports:
      - "8080:8080" # Jenkins Web UI
      - "50000:50000" # 用於 Agent 節點連線的通訊埠
    volumes:
      - /home/jenkins_home:/var/jenkins_home
    environment:
      - JAVA_OPTS=-Dhudson.model.DirectoryBrowserSupport.CSP= -Duser.timezone=Asia/Taipei
      - JENKINS_UC_DOWNLOAD=https://get.jenkins.io/war-stable/ # 可視需求調整為日本鏡像
      - JENKINS_OPTS=--prefix=/jenkins

2. 數據持久化與權限管理

Jenkins 的所有配置(工作空間、外掛程式、金鑰)都儲存在 /var/jenkins_home

  • 技術重點:我們將宿主機目錄 /home/jenkins_home 掛載至容器內。Jenkins 容器內部以 uid: 1000 運行。若使用掛載宿主機目錄(Bind Mount),需確保該目錄的擁有者已正確設定,否則將導致啟動失敗。

啟動與初始化嚮導

執行 docker compose up -d 啟動服務。

1. 解鎖 Jenkins

啟動後,需輸入初始管理員密碼。可透過以下指令取得:

docker exec jenkins-core cat /var/jenkins_home/secrets/initialAdminPassword

2. 外掛程式安裝策略

初始化畫面會詢問是否安裝「建議的外掛程式」。

  • 核心建議:接受建議安裝。這會包含 Git、Pipeline、Credentials 等基礎工具,為後續的自動化實作打下基礎。

3. 安全性強化

完成初始化後,務必立即執行以下操作:

  • 建立專用管理員帳號:避免共用 admin 帳號。
  • 限制匿名存取:進入 Manage Jenkins -> Security,確保匿名使用者不具備任何權限。

結語

透過 Docker Compose,我們成功建置了一個標準化且易於遷移的 Jenkins 核心系統。持久化磁碟區的設計確保了數據的安全,而 LTS 版本的選擇則為系統穩定性提供了保障。

核心系統已就位,明天的文章我們將進入實戰階段,探討如何配置專門負責高強度運算的 Jenkins 分散式執行節點 (Agent)


上一篇
Day 12 Docker 部署 SonarQube Server 與 Webhook 整合
下一篇
Day 14 Jenkins 分散式架構與執行節點 (Agent) 配置
系列文
迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言