Ubuntu安裝Jenkins完整教程(2025最新版)
前言
本文詳細(xì)介紹在 Ubuntu 22.04.4 系統(tǒng)上安裝 Jenkins 和 Java 17,并配置自動部署 jar 包的完整流程。包含詳細(xì)的安裝步驟、問題排查和實(shí)用配置。
一、環(huán)境準(zhǔn)備
1.1 系統(tǒng)要求
- 操作系統(tǒng):Ubuntu 22.04.4 LTS
- Java 版本:Java 17 或更高(Jenkins 2.528.1 要求)
- 內(nèi)存:至少 256MB,推薦 512MB 以上
- 磁盤空間:至少 1GB 可用空間
1.2 檢查系統(tǒng)版本
# 查看系統(tǒng)版本 lsb_release -a # 輸出示例: # No LSB modules are available. # Distributor ID: Ubuntu # Description: Ubuntu 22.04.4 LTS # Release: 22.04 # Codename: jammy
1.3 更新系統(tǒng)包
# 更新軟件包列表 sudo apt-get update # 升級系統(tǒng)包(可選) sudo apt-get upgrade -y
二、安裝 Java 17
2.1 方法一:使用 OpenJDK(推薦)
# 安裝 OpenJDK 17 sudo apt-get install openjdk-17-jdk -y # 驗(yàn)證安裝 java -version # 輸出示例: # openjdk version "17.0.x" 2024-xx-xx # OpenJDK Runtime Environment (build 17.0.x+xx-Ubuntu-xx) # OpenJDK 64-Bit Server VM (build 17.0.x+xx-Ubuntu-xx, mixed mode, sharing)
2.2 方法二:使用 Oracle JDK 17
如果您已經(jīng)下載了 Oracle JDK 17,可以按以下方式配置:
# 假設(shè) JDK 安裝在 /www/server/java/jdk-17.0.8 # 驗(yàn)證 Java /www/server/java/jdk-17.0.8/bin/java -version # 輸出示例: # java version "17.0.8" 2023-07-18 LTS # Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211) # Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)
2.3 設(shè)置 JAVA_HOME(可選)
# 編輯環(huán)境變量文件 sudo nano /etc/environment # 添加以下內(nèi)容(根據(jù)實(shí)際路徑修改) JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64" # 或者使用 Oracle JDK # JAVA_HOME="/www/server/java/jdk-17.0.8" # 使環(huán)境變量生效 source /etc/environment # 驗(yàn)證 echo $JAVA_HOME
三、安裝 Jenkins
3.1 添加 Jenkins 倉庫密鑰
# 添加 Jenkins 官方倉庫密鑰 curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \ /usr/share/keyrings/jenkins-keyring.asc > /dev/null
3.2 添加 Jenkins 倉庫
# 添加 Jenkins 倉庫到系統(tǒng)源列表 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
3.3 更新軟件包列表
# 更新軟件包列表 sudo apt-get update
注意:如果遇到 PHP PPA 的警告,可以忽略或執(zhí)行:
sudo apt-get update --allow-releaseinfo-change
3.4 安裝 Jenkins
# 安裝 Jenkins sudo apt-get install jenkins -y
安裝完成后,Jenkins 會自動:
- 創(chuàng)建
jenkins用戶 - 創(chuàng)建必要的目錄結(jié)構(gòu)
- 配置 systemd 服務(wù)
四、配置 Jenkins 使用 Java 17
4.1 方法一:修改配置文件(推薦)
# 備份配置文件 sudo cp /etc/default/jenkins /etc/default/jenkins.bak # 編輯配置文件 sudo nano /etc/default/jenkins
在文件開頭添加或修改 JAVA_HOME:
# 如果使用 OpenJDK 17 JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 # 如果使用 Oracle JDK 17(根據(jù)實(shí)際路徑修改) JAVA_HOME=/www/server/java/jdk-17.0.8
或者使用命令行直接修改:
# 刪除舊的 JAVA_HOME 配置 sudo sed -i '/^JAVA_HOME=/d' /etc/default/jenkins # 在文件開頭添加新的 JAVA_HOME sudo sed -i "1i JAVA_HOME=/www/server/java/jdk-17.0.8" /etc/default/jenkins # 驗(yàn)證配置 grep "^JAVA_HOME" /etc/default/jenkins
4.2 方法二:修改 systemd 服務(wù)文件(如果方法一不生效)
# 備份服務(wù)文件 sudo cp /lib/systemd/system/jenkins.service /lib/systemd/system/jenkins.service.bak # 編輯服務(wù)文件 sudo nano /lib/systemd/system/jenkins.service
在 [Service] 部分添加環(huán)境變量:
[Service] Environment="JAVA_HOME=/www/server/java/jdk-17.0.8" Environment="PATH=/www/server/java/jdk-17.0.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Type=notify # ... 其他配置
或者使用命令行:
# 在 [Service] 部分添加環(huán)境變量 sudo sed -i '/\[Service\]/a Environment="JAVA_HOME=/www/server/java/jdk-17.0.8"' /lib/systemd/system/jenkins.service sudo sed -i '/\[Service\]/a Environment="PATH=/www/server/java/jdk-17.0.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"' /lib/systemd/system/jenkins.service # 驗(yàn)證修改 sudo grep -A 5 "\[Service\]" /lib/systemd/system/jenkins.service
五、啟動和驗(yàn)證 Jenkins
5.1 創(chuàng)建部署目錄
# 創(chuàng)建應(yīng)用部署目錄 sudo mkdir -p /opt/apps /opt/apps/backup # 設(shè)置權(quán)限(讓 Jenkins 用戶可以操作) sudo chown -R jenkins:jenkins /opt/apps
5.2 啟動 Jenkins 服務(wù)
# 重新加載 systemd 配置 sudo systemctl daemon-reload # 啟動 Jenkins sudo systemctl start jenkins # 設(shè)置開機(jī)自啟 sudo systemctl enable jenkins # 檢查服務(wù)狀態(tài) sudo systemctl status jenkins
5.3 查看初始管理員密碼
# 查看初始管理員密碼 sudo cat /var/lib/jenkins/secrets/initialAdminPassword # 輸出示例: # 8b605dd1a1354ca3450c291f3e6e0b23
重要:請保存這個密碼,后續(xù)初始化需要使用!
5.4 驗(yàn)證 Jenkins 運(yùn)行
# 檢查 Jenkins 進(jìn)程
ps aux | grep jenkins
# 檢查端口占用(默認(rèn) 8080)
sudo ss -tlnp | grep 8080
# 輸出示例:
# LISTEN 0 50 *:8080 *:* users:(("java",pid=507324,fd=66))
5.5 訪問 Jenkins Web 界面
在瀏覽器中打開:
http://您的服務(wù)器IP:8080
如果服務(wù)器在本地,訪問:
http://localhost:8080
注意:如果無法訪問,請檢查防火墻設(shè)置:
# Ubuntu 使用 ufw 防火墻 sudo ufw allow 8080/tcp sudo ufw reload # 或者使用 iptables sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
六、Jenkins 初始化配置
6.1 解鎖 Jenkins
- 首次訪問 Jenkins,會看到"解鎖 Jenkins"頁面
- 在輸入框中粘貼之前獲取的初始管理員密碼
- 點(diǎn)擊"繼續(xù)"
6.2 安裝插件
Jenkins 會提示選擇插件安裝方式:
選項一:安裝推薦的插件(推薦)
- 適合大多數(shù)用戶
- 自動安裝常用插件
選項二:選擇插件來安裝
- 手動選擇需要的插件
- 適合有特定需求的用戶
建議選擇"安裝推薦的插件",等待安裝完成。
6.3 創(chuàng)建管理員用戶
插件安裝完成后,會提示創(chuàng)建第一個管理員用戶:
- 用戶名:設(shè)置管理員用戶名
- 密碼:設(shè)置管理員密碼
- 全名:設(shè)置顯示名稱(可選)
- 電子郵件地址:設(shè)置郵箱(可選)
填寫完成后,點(diǎn)擊"保存并完成"。
6.4 配置 Jenkins URL
確認(rèn) Jenkins 的訪問地址,一般保持默認(rèn)即可:
http://您的服務(wù)器IP:8080/
點(diǎn)擊"保存并完成"。
6.5 Jenkins 已就緒
看到"Jenkins 已就緒!"頁面,點(diǎn)擊"開始使用 Jenkins"即可進(jìn)入 Jenkins 主界面。
七、配置自動部署 Jar 包
7.1 創(chuàng)建 Jenkins 項目
- 點(diǎn)擊"新建任務(wù)"(New Item)
- 輸入項目名稱,例如:
deploy-jar-app - 選擇項目類型:選擇"自由風(fēng)格的軟件項目"(Freestyle project)
- 點(diǎn)擊"確定"
7.2 配置項目
7.2.1 基本配置
- 描述:填寫項目描述,例如"自動部署 Jar 包應(yīng)用"
7.2.2 構(gòu)建步驟
- 點(diǎn)擊"增加構(gòu)建步驟"
- 選擇"執(zhí)行 shell"
- 在命令框中輸入以下腳本:
#!/bin/bash
# ============================================
# Jenkins 自動部署 Jar 包腳本
# ============================================
# ========== 配置區(qū)域(根據(jù)實(shí)際情況修改)==========
APP_NAME="your-app" # 應(yīng)用名稱(修改為您的應(yīng)用名)
APP_DIR="/opt/apps" # 應(yīng)用部署目錄
JAR_FILE="${APP_NAME}.jar" # Jar 文件名
FULL_JAR_PATH="${APP_DIR}/${JAR_FILE}" # 完整路徑
BACKUP_DIR="${APP_DIR}/backup" # 備份目錄
JAVA_HOME="/www/server/java/jdk-17.0.8" # Java 路徑(根據(jù)實(shí)際情況修改)
JAVA_CMD="${JAVA_HOME}/bin/java"
LOG_FILE="${APP_DIR}/app.log" # 日志文件
# ============================================
# 創(chuàng)建必要的目錄
mkdir -p ${BACKUP_DIR}
mkdir -p ${APP_DIR}
# 查找并停止舊進(jìn)程
echo "=========================================="
echo "停止舊服務(wù)..."
echo "=========================================="
OLD_PID=$(ps aux | grep "[j]ava.*${JAR_FILE}" | awk '{print $2}')
if [ ! -z "$OLD_PID" ]; then
echo "找到運(yùn)行中的進(jìn)程 PID: $OLD_PID"
kill $OLD_PID
sleep 3
# 如果還在運(yùn)行,強(qiáng)制殺死
if ps -p $OLD_PID > /dev/null 2>&1; then
echo "強(qiáng)制停止進(jìn)程..."
kill -9 $OLD_PID
sleep 2
fi
echo "舊服務(wù)已停止"
else
echo "沒有運(yùn)行中的服務(wù)"
fi
# 備份舊版本
if [ -f "${FULL_JAR_PATH}" ]; then
echo ""
echo "=========================================="
echo "備份舊版本..."
echo "=========================================="
BACKUP_FILE="${BACKUP_DIR}/${JAR_FILE}.$(date +%Y%m%d_%H%M%S)"
cp ${FULL_JAR_PATH} ${BACKUP_FILE}
echo "已備份到: ${BACKUP_FILE}"
# 只保留最近 10 個備份
echo "清理舊備份(只保留最近10個)..."
cd ${BACKUP_DIR}
ls -t ${JAR_FILE}.* 2>/dev/null | tail -n +11 | xargs rm -f 2>/dev/null
fi
# 查找并復(fù)制新 jar 包
echo ""
echo "=========================================="
echo "查找上傳的 jar 包..."
echo "=========================================="
# 從 Jenkins workspace 中查找 jar 文件
UPLOADED_JAR=$(find ${WORKSPACE} -name "*.jar" -type f | head -1)
if [ -z "$UPLOADED_JAR" ] || [ ! -f "$UPLOADED_JAR" ]; then
echo "? 錯誤:未找到上傳的 jar 文件!"
echo "請確保在構(gòu)建前上傳 jar 文件到 workspace"
echo "Workspace 路徑: ${WORKSPACE}"
exit 1
fi
echo "找到上傳的 jar: ${UPLOADED_JAR}"
echo "文件大小: $(du -h ${UPLOADED_JAR} | cut -f1)"
# 復(fù)制到部署目錄
echo ""
echo "=========================================="
echo "復(fù)制到部署目錄..."
echo "=========================================="
cp ${UPLOADED_JAR} ${FULL_JAR_PATH}
echo "? Jar 包已復(fù)制到: ${FULL_JAR_PATH}"
# 啟動新服務(wù)
echo ""
echo "=========================================="
echo "啟動新服務(wù)..."
echo "=========================================="
cd ${APP_DIR}
# 啟動命令(根據(jù)實(shí)際需求修改 JVM 參數(shù))
nohup ${JAVA_CMD} \
-Xms512m \
-Xmx1024m \
-jar ${FULL_JAR_PATH} \
> ${LOG_FILE} 2>&1 &
# 等待啟動
sleep 5
# 檢查是否啟動成功
NEW_PID=$(ps aux | grep "[j]ava.*${JAR_FILE}" | awk '{print $2}')
if [ ! -z "$NEW_PID" ]; then
echo ""
echo "=========================================="
echo "? 服務(wù)啟動成功!"
echo "=========================================="
echo "進(jìn)程 PID: $NEW_PID"
echo "日志文件: ${LOG_FILE}"
echo "部署目錄: ${APP_DIR}"
echo ""
echo "查看日志: tail -f ${LOG_FILE}"
echo "=========================================="
exit 0
else
echo ""
echo "=========================================="
echo "? 錯誤:服務(wù)啟動失敗!"
echo "=========================================="
echo "查看日志:"
tail -50 ${LOG_FILE}
echo ""
echo "嘗試回滾到舊版本..."
if [ -f "${BACKUP_FILE}" ]; then
cp ${BACKUP_FILE} ${FULL_JAR_PATH}
nohup ${JAVA_CMD} -jar ${FULL_JAR_PATH} > ${LOG_FILE} 2>&1 &
echo "已回滾到舊版本"
fi
exit 1
fi
重要提示:
- 修改腳本中的
APP_NAME為您的實(shí)際應(yīng)用名稱 - 根據(jù)實(shí)際情況修改
JAVA_HOME路徑 - 根據(jù)應(yīng)用需求調(diào)整 JVM 參數(shù)(
-Xms和-Xmx)
7.2.3 保存配置
點(diǎn)擊"保存"完成項目配置。
7.3 使用方式
方式一:通過 SSH 上傳后構(gòu)建
# 在本地執(zhí)行(上傳 jar 包到 Jenkins workspace) scp your-app.jar root@服務(wù)器IP:/var/lib/jenkins/workspace/deploy-jar-app/ # 然后在 Jenkins Web 界面點(diǎn)擊"立即構(gòu)建"
方式二:使用文件參數(shù)插件(推薦)
安裝插件
- 管理 Jenkins → 插件管理
- 搜索 “File Parameter Plugin”
- 安裝并重啟 Jenkins
配置項目參數(shù)
- 項目配置 → 勾選"This project is parameterized"
- 添加參數(shù) → 選擇"File parameter"
- 參數(shù)名:
JAR_FILE - 文件位置:
${WORKSPACE}/uploaded.jar
修改構(gòu)建腳本
- 將腳本中的
UPLOADED_JAR查找部分改為:
UPLOADED_JAR="${WORKSPACE}/uploaded.jar"- 將腳本中的
使用方式
- 點(diǎn)擊"Build with Parameters"
- 選擇要上傳的 jar 文件
- 點(diǎn)擊"構(gòu)建"
方式三:本地腳本自動上傳并觸發(fā)(推薦)
創(chuàng)建本地部署腳本 deploy.sh:
#!/bin/bash
# 配置
SERVER_IP="your-server-ip"
SERVER_USER="root"
JAR_FILE="target/your-app.jar"
JENKINS_JOB_NAME="deploy-jar-app"
JENKINS_WORKSPACE="/var/lib/jenkins/workspace/${JENKINS_JOB_NAME}"
echo "=========================================="
echo "開始部署..."
echo "=========================================="
# 1. 上傳 jar 包到服務(wù)器
echo "1. 上傳 jar 包..."
scp ${JAR_FILE} ${SERVER_USER}@${SERVER_IP}:${JENKINS_WORKSPACE}/
if [ $? -ne 0 ]; then
echo "? 上傳失敗"
exit 1
fi
echo "? 上傳成功"
# 2. 觸發(fā) Jenkins 構(gòu)建
echo ""
echo "2. 觸發(fā) Jenkins 構(gòu)建..."
ssh ${SERVER_USER}@${SERVER_IP} "curl -X POST http://localhost:8080/job/${JENKINS_JOB_NAME}/build"
if [ $? -eq 0 ]; then
echo "? 構(gòu)建已觸發(fā)"
echo ""
echo "查看構(gòu)建狀態(tài): http://${SERVER_IP}:8080/job/${JENKINS_JOB_NAME}/"
else
echo "? 觸發(fā)構(gòu)建失敗"
exit 1
fi
使用方式:
chmod +x deploy.sh ./deploy.sh
八、常見問題排查
8.1 Jenkins 啟動失敗
問題:Java 版本不兼容
錯誤信息:
Running with Java 11 from /www/server/java/jdk-11.0.19, which is older than the minimum required version (Java 17). Supported Java versions are: [17, 21]
解決方法:
- 安裝 Java 17 或更高版本
- 配置 Jenkins 使用正確的 Java 路徑
問題:端口被占用
錯誤信息:
java.net.BindException: Address already in use Failed to bind to 0.0.0.0/0.0.0.0:8080
解決方法:
# 查找占用 8080 端口的進(jìn)程 sudo lsof -i :8080 # 或 sudo ss -tlnp | grep 8080 # 停止相關(guān)進(jìn)程 sudo pkill -f jenkins # 或者修改 Jenkins 端口 sudo nano /etc/default/jenkins # 修改 HTTP_PORT=8080 為其他端口,如 8081
問題:權(quán)限不足
解決方法:
# 確保 Jenkins 用戶有權(quán)限訪問相關(guān)目錄 sudo chown -R jenkins:jenkins /var/lib/jenkins sudo chown -R jenkins:jenkins /var/log/jenkins sudo chown -R jenkins:jenkins /opt/apps
8.2 構(gòu)建失敗
問題:找不到 jar 文件
錯誤信息:
? 錯誤:未找到上傳的 jar 文件!
解決方法:
- 確保 jar 文件已上傳到 Jenkins workspace
- 檢查文件路徑是否正確
- 如果使用文件參數(shù),確保插件已安裝
問題:服務(wù)啟動失敗
解決方法:
# 查看應(yīng)用日志 tail -50 /opt/apps/app.log # 檢查 Java 版本是否兼容 /www/server/java/jdk-17.0.8/bin/java -version # 檢查端口是否被占用 sudo netstat -tlnp | grep 應(yīng)用端口 # 檢查 JVM 參數(shù)是否合理 # 根據(jù)服務(wù)器內(nèi)存調(diào)整 -Xms 和 -Xmx
8.3 其他問題
問題:無法訪問 Jenkins Web 界面
解決方法:
# 檢查防火墻 sudo ufw status sudo ufw allow 8080/tcp # 檢查 Jenkins 服務(wù)狀態(tài) sudo systemctl status jenkins # 查看 Jenkins 日志 sudo journalctl -u jenkins -n 50
問題:忘記初始管理員密碼
解決方法:
# 查看初始密碼 sudo cat /var/lib/jenkins/secrets/initialAdminPassword # 如果已創(chuàng)建管理員用戶,可以重置密碼 # 編輯配置文件 sudo nano /var/lib/jenkins/config.xml # 找到 <useSecurity>true</useSecurity> 改為 false # 重啟 Jenkins sudo systemctl restart jenkins # 訪問 Web 界面,重新配置安全設(shè)置
九、常用命令
9.1 Jenkins 服務(wù)管理
# 啟動 Jenkins sudo systemctl start jenkins # 停止 Jenkins sudo systemctl stop jenkins # 重啟 Jenkins sudo systemctl restart jenkins # 查看狀態(tài) sudo systemctl status jenkins # 查看日志 sudo journalctl -u jenkins -f
9.2 應(yīng)用管理
# 查看應(yīng)用日志 tail -f /opt/apps/app.log # 查看應(yīng)用進(jìn)程 ps aux | grep java | grep your-app.jar # 停止應(yīng)用 pkill -f "your-app.jar" # 查看備份 ls -lh /opt/apps/backup/
9.3 查看 Jenkins 信息
# 查看 Jenkins 版本 jenkins --version # 查看 Jenkins 配置 cat /etc/default/jenkins # 查看 Jenkins 工作目錄 ls -la /var/lib/jenkins/
十、總結(jié)
本文詳細(xì)介紹了在 Ubuntu 22.04.4 上安裝 Jenkins 和 Java 17 的完整流程,包括:
? 安裝步驟
- Java 17 安裝(OpenJDK 和 Oracle JDK)
- Jenkins 安裝和配置
- 服務(wù)啟動和驗(yàn)證
? 配置說明
- Jenkins 使用 Java 17 的配置方法
- 自動部署 jar 包的完整腳本
- 多種使用方式
? 問題排查
- 常見錯誤及解決方法
- 服務(wù)管理命令
- 日志查看方法
關(guān)鍵要點(diǎn)
- Java 版本要求:Jenkins 2.528.1 需要 Java 17 或更高版本
- 配置方法:可以通過
/etc/default/jenkins或 systemd 服務(wù)文件配置 Java - 部署腳本:提供了完整的自動部署腳本,支持備份和回滾
- 使用方式:支持多種部署方式,可根據(jù)需求選擇
后續(xù)優(yōu)化建議
- 配置 HTTPS:提高安全性
- 配置反向代理:使用 Nginx 作為反向代理
- 配置備份策略:定期備份 Jenkins 配置和數(shù)據(jù)
- 監(jiān)控告警:配置 Jenkins 監(jiān)控和告警
- 權(quán)限管理:配置用戶權(quán)限和角色
參考資料
總結(jié)
到此這篇關(guān)于Ubuntu安裝Jenkins完整教程的文章就介紹到這了,更多相關(guān)Ubuntu安裝Jenkins內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
maven導(dǎo)入本地倉庫jar包,報:Could?not?find?artifact的解決
這篇文章主要介紹了maven導(dǎo)入本地倉庫jar包,報:Could?not?find?artifact的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
SpringBoot實(shí)現(xiàn)圖片防盜鏈的五種方式詳解
出于安全考慮,我們需要后端返回的圖片只允許在某個網(wǎng)站內(nèi)展示,不想被爬蟲拿到圖片地址后被下載,或者,不想瀏覽器直接訪問圖片鏈接,出于性能考慮,不想要別人的網(wǎng)站,拿著我們的圖片鏈接去展示,所以本文給大家介紹了SpringBoot實(shí)現(xiàn)圖片防盜鏈的五種方式2025-08-08
Java RSA加密工具類的設(shè)計與實(shí)現(xiàn)詳解
RSA算法是一種常用的非對稱加密算法,這篇文章主要為大家詳細(xì)介紹了如何通過Java編寫一個RSA加密工具類,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
Java 輕松實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)
在某些應(yīng)用場景中需要大量的二維數(shù)組來進(jìn)行數(shù)據(jù)存儲,但是二維數(shù)組中卻有著大量的無用的位置占據(jù)著內(nèi)存空間,稀疏數(shù)組就是為了優(yōu)化二維數(shù)組,節(jié)省內(nèi)存空間2022-04-04

