在 Debian 上实现 Jenkins 集群的实用方案
一 架构与准备
- 架构选型
- 推荐采用 Master–Agent(主从)分布式构建:Master 负责调度与界面,Agent 负责执行构建任务,便于横向扩展与资源隔离。
- 环境与网络
- 所有节点安装 OpenJDK 11(或更高),并确保节点间网络互通。
- 开放必要端口:Master 的 8080(Web 访问)、50000(JNLP 代理通信);如使用容器或云环境,确保相应端口映射与安全组放行。
- 基础组件
- 安装 Jenkins LTS(Debian 官方仓库或 Docker 镜像),首次访问按向导完成解锁与插件安装。
二 安装与初始化
- 安装 Java
- 执行:
sudo apt update && sudo apt install -y openjdk-11-jdk,验证:java -version。
- 安装 Jenkins(APT 方式)
- 导入密钥与源(推荐签名方式):
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
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-get update && sudo apt-get install -y jenkins
sudo systemctl enable --now jenkins
- 解锁与初始化:
- 查看初始管理员密码:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 访问
http://<master_ip>:8080 完成插件与用户配置。
三 配置 Master–Agent 集群
- 方式 A Launch agent via SSH(推荐,稳定易维护)
- 在 Master:进入 Manage Jenkins → Manage Nodes and Clouds → New Node,命名并配置:
- 远程工作目录(如:/var/jenkins)
- 标签(如:linux、docker)
- 启动方式:选择 Launch agents via SSH
- 填写 Agent 主机 IP、凭据(建议使用 SSH 密钥)
- 在 Agent:确保 SSH 可达,建议使用 jenkins 用户与密钥登录,目录权限正确。
- 方式 B Launch agent by connecting it to the master(JNLP/命令行)
- 在 Master 创建节点后,获取 Agent 连接命令/Secret。
- 在 Agent 下载 agent.jar,执行类似命令:
java -jar agent.jar -jnlpUrl http://<master>:8080/computer/<agent>/slave-agent.jnlp -secret <secret> -workDir "/var/jenkins"
- 如需自动化,可结合 Jenkins CLI 或系统服务托管 Agent 进程。
四 高可用与扩展
- 多 Master + 负载均衡(提升入口可用性)
- 部署 2 台以上 Master 实例,前置 HAProxy/Nginx 做 8080 端口的 TCP/HTTP 负载均衡(会话保持可按需开启)。
- HAProxy 示例片段:
- frontend jenkins bind *:8080
- default_backend jenkins_servers
- backend jenkins_servers balance roundrobin
- server jenkins1 192.0.2.11:8080 check
- server jenkins2 192.0.2.12:8080 check
- 注意:Jenkins 的 JENKINS_HOME 配置与构建历史在多 Master 场景下默认不共享,需结合外部存储或插件实现共享与一致性(如集中式存储、数据库或备份恢复策略)。
- 容器化与编排
- 使用 Docker Compose 快速拉起 Master 与多个 Agent,便于弹性扩缩与隔离环境差异。
- 示例要点:Master 映射 8080/50000,挂载 /var/jenkins_home;Agent 通过 JENKINS_URL 与 JNLP 连接 Master。
五 安全与运维要点
- 安全加固
- 禁用匿名访问,使用 RBAC 或基于矩阵的权限控制;为 Master/Agent 启用 SSH 密钥或凭据存储,避免明文口令。
- 限制 8080/50000 访问来源,仅对受控网段开放;容器与宿主机间最小权限挂载(如仅挂载必要目录与 /var/run/docker.sock 时使用谨慎)。
- 运维与排障
- 在 Manage Nodes 观察 Agent 在线/离线、资源与执行队列;为关键任务设置 标签 与 工作目录 隔离。
- 统一 JDK/Git/Maven/Docker 等工具版本;定期备份 JENKINS_HOME(含 jobs、plugins、credentials.xml 等)。