Jenkins 基础与架构
Jenkins 是一套主从(Master/Agent)架构的自动化平台。理解它的运行模型,是后续排障和性能调优的基础。
本篇目标:能画出 Jenkins 的部署拓扑,解释构建请求如何流转,并知道它与 GitLab CI、Argo CD 的分工边界。
1. Jenkins 核心概念
| 概念 | 是什么 | 一句话 |
|---|---|---|
| Master(Controller) | Jenkins 主进程 | 管理配置、调度构建、提供 Web UI 与 API |
| Agent(Executor) | 执行构建的节点 | 接收 Master 派发的 Job,在独立环境中运行流水线 |
| Job / 项目 | 一个自动化任务 | 绑定源码、触发方式、流水线脚本 |
| Node | 可运行构建的机器 | 包括内置节点(master)和 Agent 节点 |
| Executor | 节点上并发执行槽位 | 一个 Executor 同时只能跑一个构建 |
| 构建队列 | 等待执行的任务 | 无空闲 Executor 时构建排队 |
| Workspace | 构建工作目录 | 检出代码、执行构建、生成产物的位置 |
| 插件 | 功能扩展单元 | 与 Git、K8s、通知平台对接的载体 |
1.1 构建如何流转
开发者 push 代码
│ webhook
▼
Jenkins Master ──触发 Job──▶ 从代码仓库拉取(SCM)
│
▼
分配到有空闲 Executor 的 Agent ──▶ 在 Workspace 检出源码
│
▼
执行流水线(编译 → 测试 → 打包 → 部署)
│
▼
归档产物 + 发送通知 + 记录结果
2. 主从(Master/Agent)模型
2.1 为什么不能只用一个进程
初学者常用"安装 Jenkins 后在本机跑构建"的方式。它的问题:
- Master 资源被构建挤占:构建吃 CPU/内存,拖慢 Web UI 和调度;
- 构建环境无法隔离:每个 Job 共享同一个环境,依赖互相污染;
- 无弹性:构建高峰时执行器固定,队列堆积。
生产推荐 Master 只管调度,Agent 专职执行。
2.2 Agent 的几种形态
| Agent 形态 | 适用场景 | 特点 |
|---|---|---|
| 固定物理机 / 虚拟机 | 有专属构建机的团队 | 环境稳定,需手工维护 |
| Docker 容器(SSH 或 Docker 插件) | 需要干净隔离环境 | 每次构建用容器,环境可复现 |
| Kubernetes 动态 Pod | 已有 K8s 集群 | 按需创建/销毁,弹性最好(见第 10 篇) |
| Windows / Mac 节点 | 需要跨平台构建 | 各平台独立 Agent |
2.3 内置节点(master)上不要跑构建
内置节点默认有 2 个 Executor,建议设为 0 或只跑轻量管理任务。构建应全部交给 Agent,保证 Master 的调度和 UI 响应稳定。
3. 插件机制
Jenkins 几乎一切能力来自插件。核心插件分层:
| 层 | 插件举例 | 作用 |
|---|---|---|
| 基础层 | Pipeline、Credentials、Timestamper | 流水线语法、凭证存储、日志时间戳 |
| 集成层 | Git、Kubernetes、Docker Pipeline、GitLab | 对接代码仓库、K8s、容器 |
| 交付层 | Blue Ocean、Notifications(钉钉/飞书)、Email Extension | 可视化、通知 |
| 平台层 | Folders、Matrix Authorization、LDAP、Audit Trail | 组织、权限、审计 |
插件版本与兼容性
插件是 Jenkins 最大风险源之一。升级前先在测试实例验证,关注插件与 Jenkins 版本的兼容矩阵(Plugin Manager 中会标记)。不要在生产无脑"Update All"。
4. 与周边工具的边界
| 场景 | 用什么 | 说明 |
|---|---|---|
| 代码托管 + MR 评审 | GitLab / Gitea / GitHub | Jenkins 负责 MR 触发的构建,不负责代码评审 |
| 平台内置 CI | GitLab CI / GitHub Actions | 与 Jenkins 二选一或并存,各有生态 |
| 声明式基础设施 | Terraform | 构建 Agent、构建机由 IaC 管理(见 automation/terraform) |
| 容器编排 | Kubernetes | Jenkins 可部署其上,也用它做动态 Agent |
| 应用部署 | kubectl / Helm / Argo CD | Jenkins 负责产出与触发,GitOps 负责持续同步 |
| 监控告警 | Prometheus / Grafana | 通过 Jenkins 插件暴露指标(见 monitor/prometheus) |
Jenkins 与 Argo CD 的分工
典型的现代流水线:Jenkins 负责"构建出可部署的产物"(编译、测试、打镜像),Argo CD 负责"把产物部署到集群并持续同步"。Jenkins 在产物就绪后更新 Git 中的镜像 tag,Argo CD 检测到变更后自动同步。不要把部署逻辑全写进 Jenkins 脚本里与 GitOps 冲突。
5. 验收清单
- 能解释 Master、Agent、Executor、构建队列的关系
- 知道为什么生产不在内置节点跑构建
- 知道 Agent 的三种常见形态(固定机 / 容器 / K8s Pod)
- 能说清 Jenkins 与 GitLab CI、Argo CD 的分工边界
- 了解插件升级前需先验证兼容性
下一篇:Jenkins 安装部署。