Debian 上搭建 Jenkins 集群的实用方案
一 架构与准备
- 架构选型:采用 Master–Agent(主从) 分布式构建,Master 负责调度与界面,Agent 负责执行构建任务;按需横向扩展多个 Agent 节点以提升并发与弹性。
- 节点规划:生产建议将 Master 与 Agent 分离;推荐规格(可按需调整):Master 4–8 核/8–16GB/100GB+ SSD,Agent 4 核/8GB/50GB+ SSD。
- 基础环境:所有节点安装 Java 11(OpenJDK 11);确保节点间网络互通。
- 端口规划:Master 8080/TCP(Web 访问),50000/TCP(JNLP Agent 通信);如部署外部负载均衡,请开放对应前端端口。
- 安全基线:禁用匿名访问、创建管理员账户、使用强凭据与最小权限策略。
二 安装与初始化 Master
- 安装 Java:
sudo apt update && sudo apt install -y openjdk-11-jdk
java -version
- 添加 Jenkins APT 源(Debian 12 推荐签名方式):
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io.key
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
sudo apt update && sudo apt install -y jenkins
- 启动与开机自启:
sudo systemctl enable --now jenkins
sudo systemctl status jenkins
- 防火墙放行:
sudo ufw allow 8080/tcp
sudo ufw allow 50000/tcp
sudo ufw reload
- 初始化解锁:访问 http://:8080,使用初始密码:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 插件与更新源(可选加速):Manage Jenkins → Plugin Manager → Advanced,将 Update Site 替换为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json;推荐安装 Pipeline、GitHub Integration、Docker、Kubernetes CLI、Credentials Binding。
三 添加与管理 Agent 节点
- 方式一 Launch agents via Java Web Start(JNLP)
- 在 Master:Manage Jenkins → Manage Nodes and Clouds → New Node,类型选 Permanent Agent,填写节点名称、远程工作目录(如 /var/jenkins)、标签(如 linux docker)、并发构建数;保存后页面会显示 Agent 连接命令与 Secret。
- 在 Agent:安装 OpenJDK 11,将命令中的 JENKINS_URL 指向 http://:8080,在 Agent 主机执行;连接成功后节点状态显示为 Online。
- 方式二 SSH 启动 Agent(便于自动化)
- 在 Master:安装 SSH Build Agents 插件;新建节点时选择 Launch agents via SSH,填写 Host、凭据(私钥)、Java 路径(如 /usr/bin/java)、工作目录与并发数;保存后自动连接。
- 任务调度与并发
- 在 Job 配置 General 勾选 在必要的时候并发构建;使用 Restrict where this project can be run 或 Label Expression(如 linux && docker)将任务定向到指定 Agent;也可在节点上设置 # of executors 控制并发度。
四 负载均衡与高可用
- 外部负载均衡(推荐):使用 HAProxy/Nginx 对 8080/TCP 做前端入口,后端指向多个 Master(如有多 Master 场景)或同一 Master 的不同实例;示例 HAProxy 片段:
frontend jenkins bind *:8080
default_backend jenkins_servers
backend jenkins_servers balance roundrobin
server master1 :8080 check
server master2 :8080 check
注:JNLP 端口 50000/TCP 通常直连后端 Master,不建议经 L4/L7 负载均衡。
- 高可用思路:对 JENKINS_HOME 做共享存储(如 NFS/块存储),前置 Keepalived/VRRP 或云厂商 SLB 漂移 VIP;构建任务由多个 Agent 分担,Master 专注调度与安全管控。
五 常见问题与优化
- Java 版本不一致:确保 Master 与所有 Agent 的 Java 主版本一致(建议 11),避免因字节码/工具链差异导致构建异常。
- 端口与连通性:确认 8080/50000 对 Agent 开放;云环境需放通安全组与主机防火墙;如使用容器,映射 -p 8080:8080 -p 50000:50000。
- 凭据与权限:为 Git、Docker Registry、Kubeconfig 等配置 ID 规范 的凭据;Job 使用 Label 精确调度,避免资源争用。
- 日志与排障:查看 Master 日志 /var/log/jenkins/jenkins.log,Agent 日志位于工作目录的 agent.log;节点离线时优先检查网络、Java 路径、JNLP/SSH 配置与密钥权限。