從零開始建立 CI/CD 的 Linux 環境
在現代軟體開發流程中,持續整合與持續部署(CI/CD)已不再是大型企業的專利。對於個人開發者、小型團隊或是剛起步的專案來說,擁有一套自動化且穩定的 CI/CD 環境,不僅能大幅減少重複性的人工操作,更能確保程式碼品質與部署的一致性。
許多開發者常誤以為 CI/CD 需要複雜的雲端服務或昂貴的授權軟體,其實不然。在 Linux 環境中,我們完全可以利用開源工具,在幾分鐘內搭建起屬於自己的自動化流水線。本文将以 Ubuntu 22.04 或 Debian 12 為基礎,介紹如何從零開始,利用 Jenkins 這個經典的 CI/CD 工具,建立一套基礎的自動化環境。
第一步:環境準備與 Jenkins 安裝
Jenkins 是一個基於 Java 開發的開源自動化伺服器,雖然設定檔略顯繁瑣,但其豐富的 Plugin 生態系使其成為業界標準。首先,請確保你的 Linux 系統已更新到最新版本,並安裝必要的基礎依賴。
# 更新套件索引並安裝基礎依賴
sudo apt update
sudo apt install -y curl gnupg2 apt-transport-https ca-certificates
接下來,我们需要导入 Jenkins 官方的 GPG key 並新增套件庫。由於 Jenkins 依賴 Java 運行,我們也會同時安裝 OpenJDK 17,這是目前 Jenkins 推薦的 Java 版本。
# 導入 Jenkins GPG key
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
# 新增 Jenkins 套件庫
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
# 更新索引並安裝 Jenkins
sudo apt update
sudo apt install -y jenkins
安裝完成後,啟動 Jenkins 服務並設定為開機自動運行:
sudo systemctl enable --now jenkins
此時,Jenkins 應該已經在後台運行。你可以透過瀏覽器訪問 http://<你的伺服器IP>:8080 來確認服務是否正常。
第二步:初始設定與安全性配置
首次訪問 Jenkins Web 介面時,系統會要求你輸入初始管理員密碼。這個密碼位於伺服器的特定路徑中,請執行以下指令取得:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
複製該密碼並在瀏覽器中貼上,接著選擇「安裝建議的插件」。這將自動下載並安裝 Git、Maven、Docker 等常用插件。設定好管理員帳號密碼後,Jenkins 便準備就緒。
為了讓 Jenkins 能與外界溝通,我們需要配置 SSH 金鑰以進行程式碼檢出(Checkout)。請在伺服器上生成 SSH 金鑰:
ssh-keygen -t ed25519 -C "jenkins@your-server"
將生成的公鑰(cat ~/.ssh/id_ed25519.pub)加入你的 Git 平台(如 GitHub 或 GitLab)的 Deploy Keys 中,這樣 Jenkins 就能無密碼拉取程式碼。
第三步:建立第一個 Pipeline
Jenkins 的核心優勢在於其支援的 Pipeline as Code 功能。我們可以在專案根目錄下建立一個 Jenkinsfile,定義自動化流程。以下是一個簡單的範例,模擬從檢出程式碼到編譯的過程:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
echo '正在檢出程式碼...'
// 這裡可以加入 git checkout 指令
}
}
stage('Build') {
steps {
echo '正在執行編譯...'
sh 'echo "Build Success"'
}
}
stage('Test') {
steps {
echo '正在執行測試...'
sh 'echo "Tests Passed"'
}
}
}
post {
always {
echo 'Pipeline 完成,清理工作區...'
}
}
}
在 Jenkins Web 介面中,點擊「新建 Item」,選擇「Pipeline」,將上述內容貼入定義欄位,即可立即觸發第一次建置。
常見問題與解決方法
1. Jenkins 網頁無法連線或顯示 503 錯誤
這通常是因為 Java 記憶體不足或防火牆阻擋所致。首先檢查 ufw 或 iptables 是否開放了 8080 端口。其次,若伺服器記憶體較小,可編輯 /etc/default/jenkins,調整 JAVA_ARGS 參數,例如 -Xmx512m,以減少記憶體佔用。
2. Pipeline 執行時出現權限錯誤
Jenkins 預設以 jenkins 使用者運行。若指令需要 root 權限(如安裝系統套件),請避免直接使用 sudo,而是透過 su 切換或配置 sudoers 檔案,允許 jenkins 使用者執行特定指令而不需密碼,以確保安全性與穩定性。
小結
建立 CI/CD 環境並非一蹴可幾,但透過 Jenkins 這樣的工具,我們能將複雜的部署流程標準化。本文介紹了從安裝、初始設定到建立基礎 Pipeline 的過程。對於初學者而言,建議先從簡單的腳本開始,逐步加入測試、打包與部署環節。隨著專案規模擴大,你還可以引入 Docker 進行容器化建置,或使用 Kubernetes 進行擴展。無論如何,自動化是提升開發效率的關鍵,現在就從你的第一個 Jenkins Pipeline 開始吧!