前言
本文详细介绍在 ubuntu 22.04.4 系统上安装 jenkins 和 java 17,并配置自动部署 jar 包的完整流程。包含详细的安装步骤、问题排查和实用配置。
一、环境准备
1.1 系统要求
- 操作系统:ubuntu 22.04.4 lts
- java 版本:java 17 或更高(jenkins 2.528.1 要求)
- 内存:至少 256mb,推荐 512mb 以上
- 磁盘空间:至少 1gb 可用空间
1.2 检查系统版本
# 查看系统版本 lsb_release -a # 输出示例: # no lsb modules are available. # distributor id: ubuntu # description: ubuntu 22.04.4 lts # release: 22.04 # codename: jammy
1.3 更新系统包
# 更新软件包列表 sudo apt-get update # 升级系统包(可选) sudo apt-get upgrade -y
二、安装 java 17
2.1 方法一:使用 openjdk(推荐)
# 安装 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,可以按以下方式配置:
# 假设 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(可选)
# 编辑环境变量文件 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 仓库密钥
# 添加 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 仓库到系统源列表 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 的警告,可以忽略或执行:
sudo apt-get update --allow-releaseinfo-change
3.4 安装 jenkins
# 安装 jenkins sudo apt-get install jenkins -y
安装完成后,jenkins 会自动:
- 创建
jenkins用户 - 创建必要的目录结构
- 配置 systemd 服务
四、配置 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(根据实际路径修改) 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 # 验证配置 grep "^java_home" /etc/default/jenkins
4.2 方法二:修改 systemd 服务文件(如果方法一不生效)
# 备份服务文件 sudo cp /lib/systemd/system/jenkins.service /lib/systemd/system/jenkins.service.bak # 编辑服务文件 sudo nano /lib/systemd/system/jenkins.service
在 [service] 部分添加环境变量:
[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] 部分添加环境变量 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 创建部署目录
# 创建应用部署目录 sudo mkdir -p /opt/apps /opt/apps/backup # 设置权限(让 jenkins 用户可以操作) sudo chown -r jenkins:jenkins /opt/apps
5.2 启动 jenkins 服务
# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动 jenkins sudo systemctl start jenkins # 设置开机自启 sudo systemctl enable jenkins # 检查服务状态 sudo systemctl status jenkins
5.3 查看初始管理员密码
# 查看初始管理员密码 sudo cat /var/lib/jenkins/secrets/initialadminpassword # 输出示例: # 8b605dd1a1354ca3450c291f3e6e0b23
重要:请保存这个密码,后续初始化需要使用!
5.4 验证 jenkins 运行
# 检查 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
注意:如果无法访问,请检查防火墙设置:
# 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"
- 在命令框中输入以下脚本:
#!/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 上传后构建
# 在本地执行(上传 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查找部分改为:
uploaded_jar="${workspace}/uploaded.jar"- 将脚本中的
使用方式
- 点击"build with parameters"
- 选择要上传的 jar 文件
- 点击"构建"
方式三:本地脚本自动上传并触发(推荐)
创建本地部署脚本 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 包到服务器
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
使用方式:
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 端口的进程 sudo lsof -i :8080 # 或 sudo ss -tlnp | grep 8080 # 停止相关进程 sudo pkill -f jenkins # 或者修改 jenkins 端口 sudo nano /etc/default/jenkins # 修改 http_port=8080 为其他端口,如 8081
问题:权限不足
解决方法:
# 确保 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
- 检查文件路径是否正确
- 如果使用文件参数,确保插件已安装
问题:服务启动失败
解决方法:
# 查看应用日志 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 界面
解决方法:
# 检查防火墙 sudo ufw status sudo ufw allow 8080/tcp # 检查 jenkins 服务状态 sudo systemctl status jenkins # 查看 jenkins 日志 sudo journalctl -u jenkins -n 50
问题:忘记初始管理员密码
解决方法:
# 查看初始密码 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 服务管理
# 启动 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 应用管理
# 查看应用日志 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 信息
# 查看 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 监控和告警
- 权限管理:配置用户权限和角色
参考资料
总结
到此这篇关于ubuntu安装jenkins完整教程的文章就介绍到这了,更多相关ubuntu安装jenkins内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论