🧱 一、Jenkins 本地部署详细步骤(Linux)

1. 🔧 安装前准备

  • 操作系统:ubuntu24.10 server版,确保系统已更新:

    sudo apt update && sudo apt upgrade -y
    
  • 安装 Java(Jenkins 需要 Java 环境,注意新版Jenkins在jdk11上运行不起来):

    sudo apt update
    sudo apt install fontconfig openjdk-21-jre
    java -version
    

2. 📦 安装 Jenkins

✅ 添加 Jenkins 仓库并安装:

sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins

3. 🚀 启动 Jenkins 服务

sudo systemctl start jenkins
sudo systemctl enable jenkins
  • 检查服务状态:

    sudo systemctl status jenkins
    

4. 🌐 访问 Jenkins Web界面

  • 默认端口是 8080,在浏览器访问:

    http://your-server-ip:8080
    
  • 获取初始管理员密码:

    sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    
  • 输入密码后,进入 Jenkins 安装向导,选择推荐插件安装。

5. 👤 创建管理员账户

  • 设置用户名、密码、邮箱等信息
  • 完成后进入 Jenkins 控制台

6. 🧪 配置 Jenkins 环境

  • 安装常用插件:

    • Git
    • Pipeline
    • SSH Agent
    • Blue Ocean(可选,更好看的 UI)
  • 设置全局工具路径(如 Git、Java、Maven)

7. 🛠️ 创建第一个 Pipeline Job

  • 新建任务 → 选择 “Pipeline”
  • 配置源码仓库地址(GitHub/GitLab)
  • 编写 Jenkinsfile,定义 CI/CD 流程

示例 Jenkinsfile

groovy

pipeline {
  agent any
  stages {
    stage('拉取代码') {
      steps {
        git 'https://your.repo.url/project.git'
      }
    }
    stage('构建') {
      steps {
        sh './build.sh' // 或 npm run build、mvn package 等
      }
    }
    stage('部署') {
      steps {
        sshagent(['your-ssh-credentials']) {
          sh 'scp -r ./dist user@your-server:/var/www/project'
          sh 'ssh user@your-server "systemctl restart your-app.service"'
        }
      }
    }
  }
}

8. 🔔 设置通知与权限

  • 配置邮件通知或钉钉机器人
  • 设置用户权限(可安装 Role Strategy 插件)

🧭 部署完成后建议

  • 定期备份 Jenkins 配置(/var/lib/jenkins
  • 使用 HTTPS(可配置 Nginx 反向代理 + SSL)
  • 设置自动构建触发器(如 Git Webhook)

官网参考链接:https://www.jenkins.io/doc/book/installing/linux/#debianubuntu


🛠️ 二、Nginx 配置(反向代理 Jenkins)

✅ 1. 在 Nginx 服务器上配置反向代理

编辑 Nginx 配置文件(通常在 /etc/nginx/sites-available/default/etc/nginx/conf.d/jenkins.conf):

sudo nano /etc/nginx/conf.d/jenkins.conf

添加以下内容:

nginx

server {
    listen 80;
    server_name jenkins.xxxx.com;

    location / {
        proxy_pass         http://<jenkins-server-ip>:8080/;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;

        proxy_redirect     off;
        proxy_http_version 1.1;
        proxy_request_buffering off;
    }
}

请将 <jenkins-server-ip> 替换为 Jenkins 实际运行的服务器 IP 地址。

✅ 2. 重启 Nginx

sudo nginx -t    # 检查配置是否正确
sudo systemctl restart nginx

✅ 3. 测试访问

在浏览器中访问:

http://jenkins.xxxx.com

你应该能看到 Jenkins 的登录界面 🎉


🛠️ 三、Nginx 配置 HTTPS(使用阿里云证书)

✅ 1. 上传证书文件到 Nginx 服务器

建议放在 /etc/nginx/ssl/jenkins.xxxx.com/ 目录下:

sudo mkdir -p /etc/nginx/ssl/jenkins.xxxx.com
sudo cp certificate.pem /etc/nginx/ssl/jenkins.xxxx.com/
sudo cp private.key /etc/nginx/ssl/jenkins.xxxx.com/

✅ 2. 配置 Nginx 虚拟主机

编辑配置文件:

sudo nano /etc/nginx/conf.d/jenkins.conf

内容如下:

nginx

server {
    listen 80;
    server_name jenkins.xxxx.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name jenkins.xxxx.com;

    ssl_certificate     /etc/nginx/ssl/jenkins.xxxx.com/certificate.pem;
    ssl_certificate_key /etc/nginx/ssl/jenkins.xxxx.com/private.key;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass         http://<jenkins-server-ip>:8080/;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;

        proxy_redirect     off;
        proxy_http_version 1.1;
        proxy_request_buffering off;
    }
}

请将 <jenkins-server-ip> 替换为实际 IP 地址。

✅ 3. 重启 Nginx

sudo nginx -t
sudo systemctl restart nginx

然后访问:

代码

https://jenkins.xxxx.com

你应该能看到 Jenkins 的登录界面,并且浏览器显示安全锁 🔒。

🔄 证书更新步骤(阿里云)

如果你使用的是阿里云的 自动签发服务(如 ACM),可以:

  • 设置定期更新脚本,将新证书覆盖旧文件
  • 然后重启 Nginx:

    sudo systemctl reload nginx

如果你是手动下载证书,每次更新后只需替换 .pem.key 文件,然后 reload Nginx 即可。

官网参考文档地址:https://www.jenkins.io/doc/book/system-administration/reverse-proxy-configuration-with-jenkins/reverse-proxy-configuration-nginx/


🎯四、遇到的坑(问题一)

使用jenkins.xxxx.com登入后,系统管理里会有一个“反向代理设置有误”提示,如截图

解决方法:

①、点击提示框中的“更多信息”按钮,会跳转到一个 Jenkins 文档地址:https://www.jenkins.io/doc/book/system-administration/reverse-proxy-configuration-troubleshooting/

  1. 进入系统管理

    在Jenkins 仪表盘的左侧菜单中,点击“管理Jenkins”(Manage Jenkins)。

  2. 打开系统配置

    在“系统管理”页面中,找到并点击“系统配置”(Configure System)。

  3. 修改Jenkins URL

    找到“Jenkins Location”区域下的“Jenkins URL”字段。

    • 检查:您当前访问Jenkins 的地址,例如 http://your_domain.comhttp://your_ip:port。
    • “Jenkins URL”字段中的地址修改为您实际通过Nginx 访问的那个地址。确保该URL 包含了正确的域名或IP 地址以及端口(如果Nginx 代理的是非标准端口)。
  4. 保存并重启Jenkins

    • 在页面下方点击“保存”(Save)。
    • 然后,在“管理Jenkins”页面底部找到并点击“立即重启”(Restart)或“安全退出”(Safe Restart)来重启Jenkins。

②、设置完步骤①后,发现还是提示反向代理设置有误,继续排查

搜索引擎一番之后,终于明白了这个问题的所在:

在 Jenkins 的管理台的 Configure System 配置模块中有一项 Jenkins URL 配置:

默认配置是什么我忘了,我之前已经第①步把它改成了:http://jenkins.xxxx.com/ ,也就是我的 Jenkins 外网访问的根目录。

jenkins判断“反向代理设置有误”的依据就是:向这个 Jenkins URL 配置的地址发送一个请求,请求的末尾会携带 Jenkins 控制台的地址。完整请求示例如下:

http://jenkins.xxxx.com/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup/https%3A%2F%2Fxxx.com/manage/

后端接到请求会对比请求的 host 和参数中控制台地址,如果一样就返回200,不一样就返回404错误,前端就根据返回结果是不是200来控制“反向代理设置有误”的提示框是否显示。所以 Jenkins URL 如果配置的不正确,也是会有“反向代理设置有误”的提示框的。

可是我配置的 Jenkins URL 是正确的,为什么也会有提示框?查看浏览器控制台的请求结果如下:

仔细看这个红框中的地址,原来 Jenkins 接收到的参数中少了个斜线,http://jenkins.xxxx.com/manager/ 变成了 http:/jenkins.xxxx.com/manager/

造成斜线丢失的原因就是 当 proxy_pass 以 / 结尾时,Nginx 会对 request_url 进行处理,默认会合并 request_url 中相连的多个斜线为一个。

解决方案就是把 proxy_pass http://jenkins-server-ip:8080/

修改为 proxy_pass http://jenkins-server-ip:8080

重启 Nginx 后,刷新页面,提示框消失。

另外我还根据 Jenkins Reverse proxy - Nginx 文档 增加了下面的配置:

    #其他配置
    proxy_max_temp_file_size 0;

    #this is the maximum upload size
    client_max_body_size       10m;
    client_body_buffer_size    128k;

    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;
    proxy_buffering            off;
    proxy_set_header Connection ""; # Clear for keepalive

🎯五、遇到的坑(问题二)

全局工具配置—新增JDK,JAVA_HOME目录一直提示:/usr/lib/jvm/java-21-openjdk-amd64 不是JDK目录

解决方法

系统默认安装(sudo apt install fontconfig openjdk-21-jre)的是 JRE(Java Runtime Environment),而不是完整的 JDK(Java Development Kit)。Jenkins 在配置 JDK 工具时,必须识别的是包含编译器(javac)、工具链、头文件等完整开发环境,而不仅仅是运行时。

为什么 JRE 不够用?

JRE 只包含:

  • java(运行 Java 程序)
  • 基本类库

但缺少:

  • javac(Java 编译器)
  • javadocjar 等开发工具
  • 头文件和开发接口

Jenkins 在构建 Java 项目时,尤其是使用 Maven、Gradle 或编译源码时,必须依赖 JDK

🛠️ 正确安装 JDK 的命令(适用于 Ubuntu/Debian)

sudo apt update
sudo apt install openjdk-21-jdk -y

安装完成后,确认路径:

readlink -f $(which java) | sed "s:/bin/java::"

你应该看到类似:

/usr/lib/jvm/java-21-openjdk-amd64

这个路径就是你在 Jenkins 中应该填写的 JAVA_HOME

🎯 Jenkins 配置建议

在「全局工具配置」中:

  • 名称:OpenJDK21
  • JAVA_HOME:/usr/lib/jvm/java-21-openjdk-amd64
  • 自动安装:不勾选

点击保存后,Jenkins 应该不再报错。


下面介绍下Jenkins如何定时自动备份,防止数据丢失。

📦 Jenkins 自动备份操作文档(使用 ThinBackup 插件)

🧩 一、前提条件

  • Jenkins 已安装并运行正常
  • 已安装 ThinBackup 插件(系统管理 → 管理插件)
  • Jenkins 用户具有备份目录的读写权限
  • 推荐使用 Linux 系统,具备基本命令行操作权限

🛠️ 二、创建备份目录并授权

在 Jenkins 服务器终端执行以下命令:

# 创建备份目录
sudo mkdir -p /data/jenkins_backups

# 授权 Jenkins 用户为目录拥有者(假设用户名为 jenkins)
sudo chown -R jenkins:jenkins /data/jenkins_backups

# 设置权限,防止其他用户访问
sudo chmod 750 /data/jenkins_backups

# 验证权限
ls -ld /data/jenkins_backups

输出示例应为:

drwxr-x--- 2 jenkins jenkins 4096 Oct 17 19:45 /data/jenkins_backups

⚙️ 三、配置 ThinBackup 插件

进入 Jenkins → 系统管理 → 系统设置 → ThinBackup 配置区域,填写如下内容:

配置项 建议填写
Backup directory /data/jenkins_backups
Backup schedule for full backups H 2 * * *(每天凌晨2点)
Max number of backup sets 7(保留最近7次备份)
Files excluded from backup .*\.log(排除日志文件)
✅ 等待 Jenkins 空闲时备份 勾选
✅ 发生异常时停止备份 勾选
✅ 备份 Jenkins 主目录 勾选
✅ 备份插件 勾选
✅ 备份任务(jobs) 勾选
✅ 备份用户内容(userContent) 勾选
✅ 备份构建结果 勾选
✅ 备份凭据(credentials)与 secrets 勾选
✅ 备份 config-history(如已安装插件) 可选勾选

📦 四、执行备份

你可以选择:

  • 点击 ThinBackup 页面中的 “立即备份” 按钮手动执行
  • 等待定时任务自动触发(如每天凌晨2点)

备份完成后,目录结构如下:

cd /data/jenkins_backups
ls
# 示例输出
FULL-2025-10-17_19-35

进入备份目录查看内容:

cd FULL-2025-10-17_19-35
ls

你应看到以下关键文件和目录:

  • config.xmlcredentials.xml:全局配置与凭据
  • jobs/:任务配置
  • plugins/:插件数据
  • users/:用户信息
  • userContent/:静态资源
  • installedPlugins.xml:插件列表
  • 多个 .xml 文件:插件与系统配置
  • backup-completed.info:备份完成标志

🧪 五、验证恢复流程(建议)

在测试环境中:

  1. 安装 Jenkins 和 ThinBackup 插件
  2. 将备份目录复制到测试环境
  3. 在 ThinBackup 插件中选择“Restore”
  4. 验证任务、插件、用户是否恢复成功

🛡️ 六、安全与维护建议

  • 定期检查备份是否成功执行
  • 每月验证一次恢复流程
  • 将备份同步到远程服务器或云存储(如 S3、NAS)
  • 加密存储包含敏感数据的备份(如 credentials.xml

jenkins版本升级步骤

问题描述:

jenkins界面提示当前安装的下列组件已有警告发布。 Jenkins 2.516.2 核心及其库 Multiple security vulnerabilities in Jenkins 2.527 and earlier, LTS 2.516.2 and earlier A fix for this issue is available. Update Jenkins now.

以下是将 Jenkins 从旧版本(如 2.516.2)升级到最新安全版本2.528.1的完整步骤。

1. 准备工作

  • 确认当前版本:在 Jenkins 管理界面底部查看版本号,或运行命令:

    jenkins --version
    
  • 备份 Jenkins 数据(强烈推荐)

    • 备份 $JENKINS_HOME 目录(默认路径通常是 /var/lib/jenkins
    • 包括:jobs/plugins/config.xmlusers/
    • 可使用 tar 命令:

      sudo systemctl stop jenkins
      sudo tar -czvf jenkins_backup.tar.gz /var/lib/jenkins
      

2.下载 Jenkins 2.528.1 .deb 安装包

  1. 打开 Jenkins GitHub 发布页:Jenkins Releases on GitHub
  2. 找到版本号为 2.528.1 的条目(你也可以直接搜索 jenkins-2.528.1
  3. 在该版本下的 Assets 部分,点击下载:

    jenkins_2.528.1_all.deb
    

    或使用命令行下载(需替换为实际链接):

    wget https://get.jenkins.io/debian-stable/jenkins_2.528.1_all.deb
    

🛠 安装或升级 Jenkins

  1. 停止 Jenkins 服务(如果已安装):

    sudo systemctl stop jenkins
    
  2. 安装 .deb 包:

    sudo dpkg -i jenkins_2.528.1_all.deb
    
    # 此命令只会升级 Jenkins 的程序文件,不会覆盖你的Jenkins数据和配置,Jenkins的数据(包括 Job、插件、用户配置等)默认存储在$JENKINS_HOME目录
    
  3. 启动 Jenkins 服务

    sudo systemctl start jenkins
    
  4. 验证版本: 登录 Jenkins 后台或运行:

    jenkins --version
    

🔐 升级后建议

  • 登录 Jenkins 后台 → 管理 Jenkins → 插件管理 → 更新所有插件
  • 检查 Job 是否正常运行
  • 查看系统日志确认无异常:

    sudo journalctl -u jenkins
    

科普小知识:jenkins.war 和 jenkins.deb的区别

📦 Jenkins.war vs Jenkins.deb 对比表

项目 jenkins.war jenkins.deb
文件类型 Java Web 应用(WAR 文件) Debian 安装包(适用于 Ubuntu/Debian)
用途 手动启动 Jenkins,适用于所有平台 自动安装 Jenkins 并配置服务,仅限 Debian 系列系统
启动方式 通过命令行运行:\
java -jar jenkins.war
安装后通过 systemd 或 init 启动:\
sudo systemctl start jenkins
包含内容 仅包含 Jenkins 核心程序 包含 Jenkins 核心程序 + 服务脚本 + 配置文件
安装路径 无固定路径,由用户决定 默认安装到:\
/usr/share/jenkins/jenkins.war\
/etc/default/jenkins
适合人群 高度自定义部署、跨平台用户 使用标准 Linux 服务管理的用户
升级方式 替换 .war 文件即可 使用 dpkg -iapt upgrade 升级整个包
依赖管理 需手动安装 Java 环境等依赖 自动处理依赖(如 Java)
服务管理 手动控制进程 使用 systemd 管理服务,支持自动启动等

✅ 选择建议

  • 如果希望快速部署、跨平台运行 Jenkins(如在 Windows、macOS、Docker 中),推荐使用 jenkins.war
  • 如果在 Ubuntu 或 Debian 上运行 Jenkins,并希望使用系统服务管理、自动更新等功能,推荐使用 jenkins.deb
Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-10-24 14:57:11

results matching ""

    No results matching ""