Jenkins在Ubuntu上如何实现集群部署
导读:在 Ubuntu 上实现 Jenkins 集群部署 一 架构与准备 架构说明:采用 Master–Agent(Controller–Agent) 模式,Master 负责调度与界面,Agent 负责执行构建;Master 不一定要参与构建...
在 Ubuntu 上实现 Jenkins 集群部署
一 架构与准备
- 架构说明:采用 Master–Agent(Controller–Agent) 模式,Master 负责调度与界面,Agent 负责执行构建;Master 不一定要参与构建,建议将构建任务尽量放到 Agent 上,以提升稳定性与扩展性。
- 节点规划:至少准备 1 台 Master + 1 台以上 Agent;为每台机器安装 OpenJDK 11(版本尽量一致),并准备 SSH 密钥 或 JNLP 方式用于节点接入。
- 网络与端口:开放 TCP 8080(Master Web 访问)与 TCP 50000(Agent 入站通信);如使用云服务器,确保安全组/防火墙放行。
- 时间同步:所有节点启用 NTP 同步,避免因时间漂移导致证书/任务异常。
- 目录与权限:为 Agent 规划可写的 远程工作目录(如 /data/jenkins),并确保运行用户对该目录具备读写权限。
二 安装与初始化 Master
- 安装 Java(Ubuntu 22.04/20.04 示例):
sudo apt update & & sudo apt install -y openjdk-11-jdk
java -version - 安装 Jenkins(官方 APT 仓库,签名校验更稳妥):
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-keyring.gpg > /dev/null
echo “deb [signed-by=/usr/share/keyrings/jenkins-keyring.gpg] 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 - 初始化:访问 http://:8080,获取初始密码:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
完成安装向导后,建议安装常用插件(如 Pipeline、GitHub Integration、Credentials Binding)。
三 添加与管理 Agent 节点
- 方式一(推荐)SSH 启动 Agent
- 在 Master:Manage Jenkins → Manage Nodes and Clouds → New Node,类型选 Permanent Agent,填写节点名称,设置 Number of executors、远程工作目录(如 /data/jenkins)、标签(如 linux、docker、build),保存。
- 在节点:确保已安装 OpenJDK 11,创建 jenkins 用户或使用具备 sudo 权限的账户,并配置 SSH 免密登录 到该节点。
- 回到节点配置页,启动方式选择 Launch agents via SSH,填写 Host、Credentials,保存后等待连接成功。
- 方式二 JNLP 启动 Agent
- 在 Master 节点页面点击 Launch agent 下载 agent.jar 与 JNLP 文件,将 agent.jar 传到 Agent 的远程工作目录。
- 在 Agent 上执行:
java -jar agent.jar -jnlpUrl http://:8080/computer//slave-agent.jnlp -secret -workDir “< 远程工作目录> ”
- 节点可用性策略:按需选择 Keep this slave on-line as much as possible(尽量在线)或 Take this slave on-line when in demand and off-line when idle(按需上线/空闲下线)。
- 验证:在 Master 的节点列表看到 Agent 在线,并可在 Build Executor Status 中观察到执行器分配。
四 在任务中使用集群
- 标签调度:在 Job 配置中勾选 Restrict where this project can be run,填写节点 标签表达式(如 linux & & docker),即可将任务固定到具备相应标签的 Agent。
- 并发构建:在 Job 勾选 Execute concurrent builds if necessary,并为节点设置合理的 Number of executors,实现并行构建与负载分摊。
- 快速验证:对同一 Job 连续触发多次构建,观察 左下角执行状态 是否分布在不同 Agent 上执行。
五 常见问题与优化
- Java 环境一致性:Agent 需安装与 Master 一致的 JDK 版本;若路径不一致,可在节点 环境变量 或 工具位置(JDK/Maven) 中显式配置,避免因路径差异导致构建失败。
- 首次 SSH 连接失败:检查 SSH 免密、用户权限、SELinux/AppArmor、防火墙;必要时在节点上手动执行一次 SSH 登录以建立 known_hosts。
- 时间与证书问题:启用 NTP 同步,避免因时间偏差导致 JNLP/HTTPS 异常。
- 代理连通性:JNLP 方式由 Agent 主动连接 Master,对 NAT/防火墙 更友好;SSH 方式由 Master 主动连接 Agent,需保证 Master 能 SSH 到 Agent。
- 目录与权限:确保 远程工作目录 存在且可写,避免因目录不可写导致拉取代码/构建失败。
- 扩展方式:如需更弹性与大规模并发,可在掌握固定节点后进一步引入 Docker/Kubernetes 动态代理(Kubernetes 插件与容器化 Agent)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Jenkins在Ubuntu上如何实现集群部署
本文地址: https://pptw.com/jishu/770974.html
