Jenkins
自動化部署與持續整合的管家
軟體分類 程式開發 / DevOps
軟體標籤
樂器編曲
開發廠商 Jenkins Project (CD Foundation)
產品說明
Jenkins 是世界上最受歡迎的開源自動化伺服器,被廣泛視為 CI/CD (持續整合/持續部署) 的代名詞。如果說 Kubernetes 是管理容器的船長,那麼 Jenkins 就是負責打包貨物、搬運上船並通知船員的全能管家。
基於 Java 開發,Jenkins 擁有極高的可攜性。它最強大的地方在於其插件 (Plugins) 生態系——擁有超過 1,800 個社群貢獻的插件,幾乎可以與任何開發工具(如 Git, Maven, Docker, Kubernetes, Slack)無縫整合。透過 Jenkins Pipeline (Jenkinsfile),開發者可以使用程式碼(Pipeline as Code)來定義整條部署流水線,將建置、測試、部署的邏輯納入版本控制,實現高度自動化。
核心特色:
- 龐大的插件生態:無論你想串接什麼工具(AWS, Azure, Jira, SonarQube),幾乎都能找到現成的插件。
- Pipeline as Code:支援宣告式 (Declarative) 與腳本式 (Scripted) 語法,將部署流程寫成
Jenkinsfile隨專案版控。 - 分散式架構:支援 Controller-Agent (Master-Slave) 架構,可將負載分派到數百台不同的機器(Windows, Linux, macOS)上平行執行建置任務。
- 容易安裝:提供 WAR 檔、Docker 映像檔以及各作業系統的原生安裝包,啟動即用。
常用指令
雖然 Jenkins 主要透過 Web UI 進行管理,但它提供了 CLI 工具與 API 來支援自動化維運。此外,Docker 是目前最主流的執行方式。
啟動與基礎操作
# 使用 Docker 啟動 Jenkins LTS 版本 (建議方式)
docker run -d -p 8080:8080 -p 50000:50000
-v jenkins_home:/var/jenkins_home
--name jenkins
jenkins/jenkins:lts
# 直接透過 Java 啟動 (需下載 jenkins.war)
java -jar jenkins.war --httpPort=8080
Jenkins CLI 操作
Jenkins 內建了一個 CLI 工具 (jenkins-cli.jar),允許管理者透過終端機觸發任務或安裝插件。
# 下載 CLI 工具 (假設 Jenkins 跑在 localhost:8080)
wget http://localhost:8080/jnlpJars/jenkins-cli.jar
# 觸發指定 Job 建置
java -jar jenkins-cli.jar -s http://localhost:8080/ -auth user:token build my-job
# 安裝插件
java -jar jenkins-cli.jar -s http://localhost:8080/ -auth user:token install-plugin git
# 列出所有安裝的插件
java -jar jenkins-cli.jar -s http://localhost:8080/ -auth user:token list-plugins
Groovy Script Console
Jenkins 允許執行 Groovy 腳本來深入控制系統核心(System Groovy),這是高階管理員的必殺技。
// 範例:透過 Groovy Console 快速建立一個管理員帳號
import jenkins.model.*
import hudson.security.*
def instance = Jenkins.getInstance()
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("admin", "password123")
instance.setSecurityRealm(hudsonRealm)
instance.save()
進階技巧
- Jenkinsfile 範例:現代化使用的核心。
pipeline { agent any stages { stage('Build') { steps { sh 'echo "Building..."' } } stage('Test') { steps { sh 'echo "Testing..."' } } stage('Deploy') { steps { sh 'echo "Deploying..."' } } } } - Blue Ocean 介面:如果覺得原生介面太老舊,可以安裝 Blue Ocean 插件,它提供了極具現代感且視覺化的 Pipeline 編輯與監控介面。
- JCasC (Configuration as Code):配合
configuration-as-code插件,你可以用一個 YAML 檔設定好整個 Jenkins 系統(包含使用者、權限、節點),實現 Jenkins 伺服器本身的「不可變基礎設施 (Immutable Infrastructure)」。
操作介面
