🧱 一、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 应该不再报错。

Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-08-29 16:17:00

results matching ""

    No results matching ""