Ubuntu 22.04.4 安装 Jenkins 和 Java 17 完整教程(2025最新版)
本文详细介绍在 Ubuntu 22.04.4 系统上安装 Jenkins 和 Java 17,并配置自动部署 jar 包的完整流程。包含详细的安装步骤、问题排查和实用配置。
📋 目录
- 一、环境准备
- [二、安装 Java 17](#二、安装 Java 17)
- [三、安装 Jenkins](#三、安装 Jenkins)
- [四、配置 Jenkins 使用 Java 17](#四、配置 Jenkins 使用 Java 17)
- [五、启动和验证 Jenkins](#五、启动和验证 Jenkins)
- [六、Jenkins 初始化配置](#六、Jenkins 初始化配置)
- [七、配置自动部署 Jar 包](#七、配置自动部署 Jar 包)
- 八、常见问题排查
- 九、总结
一、环境准备
1.1 系统要求
- 操作系统:Ubuntu 22.04.4 LTS
- Java 版本:Java 17 或更高(Jenkins 2.528.1 要求)
- 内存:至少 256MB,推荐 512MB 以上
- 磁盘空间:至少 1GB 可用空间
1.2 检查系统版本
bash
# 查看系统版本
lsb_release -a
# 输出示例:
# No LSB modules are available.
# Distributor ID: Ubuntu
# Description: Ubuntu 22.04.4 LTS
# Release: 22.04
# Codename: jammy
1.3 更新系统包
bash
# 更新软件包列表
sudo apt-get update
# 升级系统包(可选)
sudo apt-get upgrade -y
二、安装 Java 17
2.1 方法一:使用 OpenJDK(推荐)
bash
# 安装 OpenJDK 17
sudo apt-get install openjdk-17-jdk -y
# 验证安装
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
如果您已经下载了 Oracle JDK 17,可以按以下方式配置:
bash
# 假设 JDK 安装在 /www/server/java/jdk-17.0.8
# 验证 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 设置 JAVA_HOME(可选)
bash
# 编辑环境变量文件
sudo nano /etc/environment
# 添加以下内容(根据实际路径修改)
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
# 或者使用 Oracle JDK
# JAVA_HOME="/www/server/java/jdk-17.0.8"
# 使环境变量生效
source /etc/environment
# 验证
echo $JAVA_HOME
三、安装 Jenkins
3.1 添加 Jenkins 仓库密钥
bash
# 添加 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 仓库
bash
# 添加 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
3.3 更新软件包列表
bash
# 更新软件包列表
sudo apt-get update
注意:如果遇到 PHP PPA 的警告,可以忽略或执行:
bash
sudo apt-get update --allow-releaseinfo-change
3.4 安装 Jenkins
bash
# 安装 Jenkins
sudo apt-get install jenkins -y
安装完成后,Jenkins 会自动:
- 创建
jenkins用户 - 创建必要的目录结构
- 配置 systemd 服务
四、配置 Jenkins 使用 Java 17
4.1 方法一:修改配置文件(推荐)
bash
# 备份配置文件
sudo cp /etc/default/jenkins /etc/default/jenkins.bak
# 编辑配置文件
sudo nano /etc/default/jenkins
在文件开头添加或修改 JAVA_HOME:
bash
# 如果使用 OpenJDK 17
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
# 如果使用 Oracle JDK 17(根据实际路径修改)
JAVA_HOME=/www/server/java/jdk-17.0.8
或者使用命令行直接修改:
bash
# 删除旧的 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
# 验证配置
grep "^JAVA_HOME" /etc/default/jenkins
4.2 方法二:修改 systemd 服务文件(如果方法一不生效)
bash
# 备份服务文件
sudo cp /lib/systemd/system/jenkins.service /lib/systemd/system/jenkins.service.bak
# 编辑服务文件
sudo nano /lib/systemd/system/jenkins.service
在 [Service] 部分添加环境变量:
ini
[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
# ... 其他配置
或者使用命令行:
bash
# 在 [Service] 部分添加环境变量
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
# 验证修改
sudo grep -A 5 "\[Service\]" /lib/systemd/system/jenkins.service
五、启动和验证 Jenkins
5.1 创建部署目录
bash
# 创建应用部署目录
sudo mkdir -p /opt/apps /opt/apps/backup
# 设置权限(让 Jenkins 用户可以操作)
sudo chown -R jenkins:jenkins /opt/apps
5.2 启动 Jenkins 服务
bash
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启动 Jenkins
sudo systemctl start jenkins
# 设置开机自启
sudo systemctl enable jenkins
# 检查服务状态
sudo systemctl status jenkins
5.3 查看初始管理员密码
bash
# 查看初始管理员密码
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
# 输出示例:
# 8b605dd1a1354ca3450c291f3e6e0b23
重要:请保存这个密码,后续初始化需要使用!
5.4 验证 Jenkins 运行
bash
# 检查 Jenkins 进程
ps aux | grep jenkins
# 检查端口占用(默认 8080)
sudo ss -tlnp | grep 8080
# 输出示例:
# LISTEN 0 50 *:8080 *:* users:(("java",pid=507324,fd=66))
5.5 访问 Jenkins Web 界面
在浏览器中打开:
http://您的服务器IP:8080
如果服务器在本地,访问:
http://localhost:8080
注意:如果无法访问,请检查防火墙设置:
bash
# 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"页面
- 在输入框中粘贴之前获取的初始管理员密码
- 点击"继续"
6.2 安装插件
Jenkins 会提示选择插件安装方式:
选项一:安装推荐的插件(推荐)
- 适合大多数用户
- 自动安装常用插件
选项二:选择插件来安装
- 手动选择需要的插件
- 适合有特定需求的用户
建议选择"安装推荐的插件",等待安装完成。
6.3 创建管理员用户
插件安装完成后,会提示创建第一个管理员用户:
- 用户名:设置管理员用户名
- 密码:设置管理员密码
- 全名:设置显示名称(可选)
- 电子邮件地址:设置邮箱(可选)
填写完成后,点击"保存并完成"。
6.4 配置 Jenkins URL
确认 Jenkins 的访问地址,一般保持默认即可:
http://您的服务器IP:8080/
点击"保存并完成"。
6.5 Jenkins 已就绪
看到"Jenkins 已就绪!"页面,点击"开始使用 Jenkins"即可进入 Jenkins 主界面。
七、配置自动部署 Jar 包
7.1 创建 Jenkins 项目
- 点击"新建任务"(New Item)
- 输入项目名称 ,例如:
deploy-jar-app - 选择项目类型:选择"自由风格的软件项目"(Freestyle project)
- 点击"确定"
7.2 配置项目
7.2.1 基本配置
- 描述:填写项目描述,例如"自动部署 Jar 包应用"
7.2.2 构建步骤
- 点击"增加构建步骤"
- 选择"执行 shell"
- 在命令框中输入以下脚本:
bash
#!/bin/bash
# ============================================
# Jenkins 自动部署 Jar 包脚本
# ============================================
# ========== 配置区域(根据实际情况修改)==========
APP_NAME="your-app" # 应用名称(修改为您的应用名)
APP_DIR="/opt/apps" # 应用部署目录
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 路径(根据实际情况修改)
JAVA_CMD="${JAVA_HOME}/bin/java"
LOG_FILE="${APP_DIR}/app.log" # 日志文件
# ============================================
# 创建必要的目录
mkdir -p ${BACKUP_DIR}
mkdir -p ${APP_DIR}
# 查找并停止旧进程
echo "=========================================="
echo "停止旧服务..."
echo "=========================================="
OLD_PID=$(ps aux | grep "[j]ava.*${JAR_FILE}" | awk '{print $2}')
if [ ! -z "$OLD_PID" ]; then
echo "找到运行中的进程 PID: $OLD_PID"
kill $OLD_PID
sleep 3
# 如果还在运行,强制杀死
if ps -p $OLD_PID > /dev/null 2>&1; then
echo "强制停止进程..."
kill -9 $OLD_PID
sleep 2
fi
echo "旧服务已停止"
else
echo "没有运行中的服务"
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
# 查找并复制新 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 "请确保在构建前上传 jar 文件到 workspace"
echo "Workspace 路径: ${WORKSPACE}"
exit 1
fi
echo "找到上传的 jar: ${UPLOADED_JAR}"
echo "文件大小: $(du -h ${UPLOADED_JAR} | cut -f1)"
# 复制到部署目录
echo ""
echo "=========================================="
echo "复制到部署目录..."
echo "=========================================="
cp ${UPLOADED_JAR} ${FULL_JAR_PATH}
echo "✅ Jar 包已复制到: ${FULL_JAR_PATH}"
# 启动新服务
echo ""
echo "=========================================="
echo "启动新服务..."
echo "=========================================="
cd ${APP_DIR}
# 启动命令(根据实际需求修改 JVM 参数)
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 "✅ 服务启动成功!"
echo "=========================================="
echo "进程 PID: $NEW_PID"
echo "日志文件: ${LOG_FILE}"
echo "部署目录: ${APP_DIR}"
echo ""
echo "查看日志: tail -f ${LOG_FILE}"
echo "=========================================="
exit 0
else
echo ""
echo "=========================================="
echo "❌ 错误:服务启动失败!"
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为您的实际应用名称 - 根据实际情况修改
JAVA_HOME路径 - 根据应用需求调整 JVM 参数(
-Xms和-Xmx)
7.2.3 保存配置
点击"保存"完成项目配置。
7.3 使用方式
方式一:通过 SSH 上传后构建
bash
# 在本地执行(上传 jar 包到 Jenkins workspace)
scp your-app.jar root@服务器IP:/var/lib/jenkins/workspace/deploy-jar-app/
# 然后在 Jenkins Web 界面点击"立即构建"
方式二:使用文件参数插件(推荐)
-
安装插件
- 管理 Jenkins → 插件管理
- 搜索 "File Parameter Plugin"
- 安装并重启 Jenkins
-
配置项目参数
- 项目配置 → 勾选"This project is parameterized"
- 添加参数 → 选择"File parameter"
- 参数名:
JAR_FILE - 文件位置:
${WORKSPACE}/uploaded.jar
-
修改构建脚本
- 将脚本中的
UPLOADED_JAR查找部分改为:
bashUPLOADED_JAR="${WORKSPACE}/uploaded.jar" - 将脚本中的
-
使用方式
- 点击"Build with Parameters"
- 选择要上传的 jar 文件
- 点击"构建"
方式三:本地脚本自动上传并触发(推荐)
创建本地部署脚本 deploy.sh:
bash
#!/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 包到服务器
echo "1. 上传 jar 包..."
scp ${JAR_FILE} ${SERVER_USER}@${SERVER_IP}:${JENKINS_WORKSPACE}/
if [ $? -ne 0 ]; then
echo "❌ 上传失败"
exit 1
fi
echo "✅ 上传成功"
# 2. 触发 Jenkins 构建
echo ""
echo "2. 触发 Jenkins 构建..."
ssh ${SERVER_USER}@${SERVER_IP} "curl -X POST http://localhost:8080/job/${JENKINS_JOB_NAME}/build"
if [ $? -eq 0 ]; then
echo "✅ 构建已触发"
echo ""
echo "查看构建状态: http://${SERVER_IP}:8080/job/${JENKINS_JOB_NAME}/"
else
echo "❌ 触发构建失败"
exit 1
fi
使用方式:
bash
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
解决方法:
bash
# 查找占用 8080 端口的进程
sudo lsof -i :8080
# 或
sudo ss -tlnp | grep 8080
# 停止相关进程
sudo pkill -f jenkins
# 或者修改 Jenkins 端口
sudo nano /etc/default/jenkins
# 修改 HTTP_PORT=8080 为其他端口,如 8081
问题:权限不足
解决方法:
bash
# 确保 Jenkins 用户有权限访问相关目录
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 构建失败
问题:找不到 jar 文件
错误信息:
❌ 错误:未找到上传的 jar 文件!
解决方法:
- 确保 jar 文件已上传到 Jenkins workspace
- 检查文件路径是否正确
- 如果使用文件参数,确保插件已安装
问题:服务启动失败
解决方法:
bash
# 查看应用日志
tail -50 /opt/apps/app.log
# 检查 Java 版本是否兼容
/www/server/java/jdk-17.0.8/bin/java -version
# 检查端口是否被占用
sudo netstat -tlnp | grep 应用端口
# 检查 JVM 参数是否合理
# 根据服务器内存调整 -Xms 和 -Xmx
8.3 其他问题
问题:无法访问 Jenkins Web 界面
解决方法:
bash
# 检查防火墙
sudo ufw status
sudo ufw allow 8080/tcp
# 检查 Jenkins 服务状态
sudo systemctl status jenkins
# 查看 Jenkins 日志
sudo journalctl -u jenkins -n 50
问题:忘记初始管理员密码
解决方法:
bash
# 查看初始密码
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
# 如果已创建管理员用户,可以重置密码
# 编辑配置文件
sudo nano /var/lib/jenkins/config.xml
# 找到 <useSecurity>true</useSecurity> 改为 false
# 重启 Jenkins
sudo systemctl restart jenkins
# 访问 Web 界面,重新配置安全设置
九、常用命令
9.1 Jenkins 服务管理
bash
# 启动 Jenkins
sudo systemctl start jenkins
# 停止 Jenkins
sudo systemctl stop jenkins
# 重启 Jenkins
sudo systemctl restart jenkins
# 查看状态
sudo systemctl status jenkins
# 查看日志
sudo journalctl -u jenkins -f
9.2 应用管理
bash
# 查看应用日志
tail -f /opt/apps/app.log
# 查看应用进程
ps aux | grep java | grep your-app.jar
# 停止应用
pkill -f "your-app.jar"
# 查看备份
ls -lh /opt/apps/backup/
9.3 查看 Jenkins 信息
bash
# 查看 Jenkins 版本
jenkins --version
# 查看 Jenkins 配置
cat /etc/default/jenkins
# 查看 Jenkins 工作目录
ls -la /var/lib/jenkins/
十、总结
本文详细介绍了在 Ubuntu 22.04.4 上安装 Jenkins 和 Java 17 的完整流程,包括:
✅ 安装步骤
- Java 17 安装(OpenJDK 和 Oracle JDK)
- Jenkins 安装和配置
- 服务启动和验证
✅ 配置说明
- Jenkins 使用 Java 17 的配置方法
- 自动部署 jar 包的完整脚本
- 多种使用方式
✅ 问题排查
- 常见错误及解决方法
- 服务管理命令
- 日志查看方法
关键要点
- Java 版本要求:Jenkins 2.528.1 需要 Java 17 或更高版本
- 配置方法 :可以通过
/etc/default/jenkins或 systemd 服务文件配置 Java - 部署脚本:提供了完整的自动部署脚本,支持备份和回滚
- 使用方式:支持多种部署方式,可根据需求选择
后续优化建议
- 配置 HTTPS:提高安全性
- 配置反向代理:使用 Nginx 作为反向代理
- 配置备份策略:定期备份 Jenkins 配置和数据
- 监控告警:配置 Jenkins 监控和告警
- 权限管理:配置用户权限和角色
📚 参考资料
💬 写在最后
如果本文对您有帮助,欢迎点赞、收藏和分享!
如有问题,欢迎在评论区留言讨论。
标签 :Jenkins Java 17 Ubuntu 自动化部署 DevOps CI/CD Jar包部署