Jenkins 实战4:集群配置与分布式构建

一、Jenkins 分布式架构介绍

Jenkins 采用 ‌Master - Slave/Agent 主从架构‌,是持续集成/持续交付(CI/CD)场景中提升构建效率、扩展能力的关键设计,其核心组件与逻辑如下:

1、核心组成:主节点(Master)与从节点(Agent/Slave)

Jenkins 分布式架构由两类节点组成,两者职责明确分离,协同工作。

节点类型 核心职责 关键说明
主节点(Master) 1. 配置管理:管理全局配置、插件和用户权限。 2. 接收和解析任务请求(如 Pipeline 脚本)。 3. 任务调度:根据作业(Job)规则,将构建任务分配给合适的从节点执行。 4. 监控与报告:跟踪从节点状态(连接、负载、异常),收集任务执行结果生成构建报告(成功率、时间、历史记录)并展示。 不建议直接执行构建任务,避免因资源占用导致界面卡顿或调度失效
从节点(Agent) 1. 无需安装完整 Jenkins:Slave 节点仅需运行"代理程序"(Agent),即可接收 Master 分发的构建任务。 2. 资源扩展:突破 Master 节点硬件限制,通过多 Slave 节点并行执行任务,大幅提升构建效率。 3. 执行具体操作(如代码编译、镜像构建、自动化测试) 4. 环境适配:Slave 节点可部署在不同环境(如 Windows/Linux、物理机/虚拟机),满足多平台构建需求。 5. 将执行日志和结果回传主节点 可根据任务需求配置不同环境(如 Linux 编译环境、Windows 测试环境)

Jenkins 的主从节点架构,不像 MySQL 主从那样的架构方式,从节点本身并不需要安装完整的 Jenkins,只需要运行 "代理程序"。它更像 K8S 的控制平面与Node节点之间的关系。

2、核心优势:为何需要分布式架构

相比单节点部署,分布式架构主要解决以下 4 个核心问题:

  1. 提升性能:将高负载任务分散到多台从节点,避免单节点 CPU、内存、磁盘 IO 瓶颈。
  2. 环境隔离/灵活性:不同任务可使用专属从节点(如 Python 项目用 Python 环境节点,Java 项目用 JDK 环境节点),避免依赖冲突,并能实现 "多环境构建"、"跨平台构建"。
  3. 高可用性:单个从节点故障仅影响其负责的任务,主节点可将任务重新分配到其他健康节点,降低整体故障风险。
  4. 弹性扩展/伸缩性:业务增长时,无需重构主节点,只需新增从节点即可提升整体处理能力。

当然,Jenkins 的高可用性是相对的。Jenkins 的主节点(Master)本身不直接支持 "多节点高可用(HA)" 架构(不像 K8S)。主节点挂掉以后,整个集群也会不可用。

为什么 Jenkins 原生不支持多主节点?

Jenkins 设计之初是单主节点架构,主节点负责存储配置(JENKINS_HOME 目录)、任务调度、用户权限等核心功能。由于:

  • JENKINS_HOME 目录包含实时更新的配置文件、构建历史、插件状态等,多主节点同时读写会导致数据冲突(如配置覆盖、锁竞争)。
  • 主节点与从节点的通信依赖唯一的主节点地址,多主节点会导致从节点无法确定连接目标。

因此,Jenkins 没有原生的 "多主节点集群" 方案,需通过外部工具或架构设计实现高可用。

基于 Kubernetes 的主节点高可用(容器化场景)

核心思路:利用 Kubernetes(K8s)的 Deployment + 持久卷(PV)实现主节点的自动恢复和冗余。

  1. 将 Jenkins 主节点打包为容器镜像,通过 K8s Deployment 部署,设置副本数为 1(避免多主节点冲突)。
  2. 使用 K8s 持久卷(PV,后端绑定高可用存储如 Ceph)挂载 JENKINS_HOME,确保数据持久化。
  3. 配置 K8s Service(固定访问入口)和就绪探针(Liveness/Readiness Probe):
    • 当主节点容器故障时,K8s 自动销毁故障容器并在新节点重建,通过 PV 恢复 JENKINS_HOME
    • 配合 HPA(Horizontal Pod Autoscaler)可实现资源自动扩展(但副本数仍需限制为 1)

二、Jenkins 集群配置

假设现在有三台服务器,一台安装有 Jenkins Master 节点;一台安装有 Maven 环境(agent-maven-01),还有一台安装有 Docker 环境(agent-docker-01)。我们希望 Docker 镜像构建任务能运行在 agent-docker-01 上,Maven Jar 包构建任务能运行在 agent-maven-01 上。针对这个场景,我们来配置一个 Jenkins 集群。

未完待续。。。

相关推荐
可可嘻嘻大老虎4 小时前
nginx无法访问后端服务问题
运维·nginx
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)
linux·运维·数据库·sql·学习
无忧智库5 小时前
某市“十五五“地下综合管廊智能化运维管理平台建设全案解析:从数字孪生到信创适配的深度实践(WORD)
运维·智慧城市
珠海西格5 小时前
“主动预防” vs “事后补救”:分布式光伏防逆流技术的代际革命,西格电力给出标准答案
大数据·运维·服务器·分布式·云计算·能源
阿波罗尼亚6 小时前
Kubectl 命令记录
linux·运维·服务器
IDC02_FEIYA6 小时前
Linux文件搜索命令有哪些?Linux常用命令之文件搜索命令find详解
linux·运维·服务器
犀思云6 小时前
如何通过网络即服务平台实现企业数字化转型?
运维·网络·人工智能·系统架构·机器人
江畔何人初6 小时前
kubectl apply与kubectl create的区别
linux·运维·云原生
M158227690557 小时前
四通道全能组网!SG-Canet-410 CAN转以太网网关,破解工业CAN通信瓶颈
linux·运维·服务器
浪客灿心7 小时前
Linux库制作与原理
linux·运维·服务器