最稳妥方式是用 Jenkins 官方 apt 仓库:先卸载旧版并清理 /var/lib/jenkins,导入官方 GPG 密钥,添加 debian-stable 源,更新后安装;需搭配 OpenJDK 17,并通过 /etc/default/jenkins 或 systemd drop-in 配置 JAVA_HOME;初始化卡顿主因是插件中心连接慢,可换清华镜像或禁用更新。

直接装 Jenkins 最稳妥的方式是用官方 apt 仓库
Ubuntu/Debian 系统下,用系统自带的 apt install jenkins 安装出来的版本通常太老(比如 Ubuntu 22.04 自带的是 2.361),连 Pipeline 语法都可能报错。必须换源。
实操建议:
- 先卸载旧版:
sudo apt remove --purge jenkins,并删掉/var/lib/jenkins - 导入 Jenkins 官方 GPG 密钥:
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo apt-key add -(注意:2023.key 是当前有效密钥名,不是模板) - 加源:
echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list - 更新后安装:
sudo apt update && sudo apt install jenkins
Jenkins 启动失败常见于 Java 版本不匹配
Jenkins 2.387+ 要求 Java 17,但系统默认可能还是 Java 11 或 8,systemctl status jenkins 会看到 Failed to start LSB: Start Jenkins at boot time,日志里实际是 UnsupportedClassVersionError。
实操建议:
- 查当前 Java:
java -version和update-alternatives --config java - 装 OpenJDK 17:
sudo apt install openjdk-17-jdk - 告诉 Jenkins 用哪个 Java:编辑
/etc/default/jenkins,改JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64(路径用readlink -f $(which java)往上推两级确认) - 重启服务:
sudo systemctl daemon-reload && sudo systemctl restart jenkins
首次访问 Jenkins 页面卡在“请等待初始化完成”
不是卡死,是 Jenkins 正在下载插件——尤其在国内,updates.jenkins-ci.org 域名解析慢或连接超时,导致初始化阻塞。页面没报错,但进度条不动,tail -f /var/log/jenkins/jenkins.log 会反复刷 Failed to load update center。
实操建议:
- 临时关插件下载:启动前在
/etc/default/jenkins加一行JENKINS_ARGS="--httpPort=8080 --disable-updates" - 或者手动预置插件清单:把
https://updates.jenkins-ci.org/download/plugins/下需要的基础插件(如git、workflow-aggregator)下好,丢进/var/lib/jenkins/plugins/,再启动 - 更省事的是改更新中心地址:编辑
/var/lib/jenkins/updates/default.json,把url字段换成国内镜像,例如https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
用 systemd 管理 Jenkins 时,jenkins.service 文件不能直接改
很多人习惯 sudo systemctl edit jenkins 或直接改 /lib/systemd/system/jenkins.service,结果下次 apt upgrade jenkins 会被覆盖,服务突然起不来。
实操建议:
- 永远用 drop-in 方式定制:
sudo systemctl edit jenkins,然后写:
[Service] Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" Restart=on-failure RestartSec=10
systemctl cat jenkins 能看到 override 是否生效sudo systemctl daemon-reload,否则 restart 不读新配置Jenkins 的初始化逻辑藏在 jenkins.model.Jenkins.<init></init> 里,不是 shell 脚本能控制的。很多“跳过插件安装”的技巧只对第一次有效,升级后仍可能触发,得盯住日志里的 PluginManager 行。










