Ubuntu安装Jenkins完整教程

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

  1. 首次访问 Jenkins,会看到"解锁 Jenkins"页面
  2. 在输入框中粘贴之前获取的初始管理员密码
  3. 点击"继续"

6.2 安装插件

Jenkins 会提示选择插件安装方式:

选项一:安装推荐的插件(推荐)

  • 适合大多数用户
  • 自动安装常用插件

选项二:选择插件来安装

  • 手动选择需要的插件
  • 适合有特定需求的用户

建议选择"安装推荐的插件",等待安装完成。

6.3 创建管理员用户

插件安装完成后,会提示创建第一个管理员用户:

  • 用户名:设置管理员用户名
  • 密码:设置管理员密码
  • 全名:设置显示名称(可选)
  • 电子邮件地址:设置邮箱(可选)

填写完成后,点击"保存并完成"。

6.4 配置 Jenkins URL

确认 Jenkins 的访问地址,一般保持默认即可:

复制代码
http://您的服务器IP:8080/

点击"保存并完成"。

6.5 Jenkins 已就绪

看到"Jenkins 已就绪!"页面,点击"开始使用 Jenkins"即可进入 Jenkins 主界面。


七、配置自动部署 Jar 包

7.1 创建 Jenkins 项目

  1. 点击"新建任务"(New Item)
  2. 输入项目名称 ,例如:deploy-jar-app
  3. 选择项目类型:选择"自由风格的软件项目"(Freestyle project)
  4. 点击"确定"

7.2 配置项目

7.2.1 基本配置
  • 描述:填写项目描述,例如"自动部署 Jar 包应用"
7.2.2 构建步骤
  1. 点击"增加构建步骤"
  2. 选择"执行 shell"
  3. 在命令框中输入以下脚本:
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 界面点击"立即构建"
方式二:使用文件参数插件(推荐)
  1. 安装插件

    • 管理 Jenkins → 插件管理
    • 搜索 "File Parameter Plugin"
    • 安装并重启 Jenkins
  2. 配置项目参数

    • 项目配置 → 勾选"This project is parameterized"
    • 添加参数 → 选择"File parameter"
    • 参数名:JAR_FILE
    • 文件位置:${WORKSPACE}/uploaded.jar
  3. 修改构建脚本

    • 将脚本中的 UPLOADED_JAR 查找部分改为:
    bash 复制代码
    UPLOADED_JAR="${WORKSPACE}/uploaded.jar"
  4. 使用方式

    • 点击"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 包的完整脚本
  • 多种使用方式

问题排查

  • 常见错误及解决方法
  • 服务管理命令
  • 日志查看方法

关键要点

  1. Java 版本要求:Jenkins 2.528.1 需要 Java 17 或更高版本
  2. 配置方法 :可以通过 /etc/default/jenkins 或 systemd 服务文件配置 Java
  3. 部署脚本:提供了完整的自动部署脚本,支持备份和回滚
  4. 使用方式:支持多种部署方式,可根据需求选择

后续优化建议

  1. 配置 HTTPS:提高安全性
  2. 配置反向代理:使用 Nginx 作为反向代理
  3. 配置备份策略:定期备份 Jenkins 配置和数据
  4. 监控告警:配置 Jenkins 监控和告警
  5. 权限管理:配置用户权限和角色

📚 参考资料


💬 写在最后

如果本文对您有帮助,欢迎点赞、收藏和分享!

如有问题,欢迎在评论区留言讨论。


标签Jenkins Java 17 Ubuntu 自动化部署 DevOps CI/CD Jar包部署

相关推荐
城南花开时2 小时前
CICD工具,Jenkins or Tekton or Arbess一文全面对比评测
jenkins·tekton
非典型代码2 小时前
Jenkins发不出邮件
运维·servlet·jenkins
实心儿儿3 小时前
Linux系统 —— 基础命令1
linux·运维·服务器
大龄Python青年3 小时前
C#快入教程:Linux安装.NET
linux·c#·.net
抠脚学代码3 小时前
Linux开发-->驱动开发-->字符设备驱动框架
linux·数据结构·驱动开发
Elias不吃糖4 小时前
第四天学习总结:C++ 文件系统 × Linux 自动化 × Makefile 工程化
linux·c++·学习
噜啦噜啦嘞好4 小时前
Linux进程信号
linux·运维·服务器
REDcker4 小时前
Linux 进程资源占用分析指南
linux·运维·chrome
samroom4 小时前
Linux系统管理与常用命令详解
linux·运维·服务器