Jenkins底层架构与万亿级流水线设计核心

在这里插入图片描述

肖哥弹架构 跟大家“弹弹” Jenkins 设计与实战应用,需要代码关注

欢迎 关注,点赞,留言。

关注公号Solomon肖哥弹架构获取更多精彩内容

历史热点文章

🚀 你以为Jenkins只是个简单CI工具?大错特错!本文首次公开Jenkins支撑万亿级流水的底层架构设计:7大核心架构图解密Master-Agent通信机制,深入插件系统加载原理,剖析Pipeline执行引擎运作流程。更有生产级金丝雀发布、混沌工程注入、自动化回滚等高阶玩法,带你从“会用”到“精通”,彻底掌握Jenkins架构设计与企业级实战经验!

一、架构设计

1. Jenkins 基础架构图

在这里插入图片描述

2. 分布式架构图

在这里插入图片描述

3. 总体架构关系图

在这里插入图片描述

3.1 框架层 (The Framework Layer)

框架层是 Jenkins 的引擎和骨架。它本身不直接完成具体的构建或部署任务,而是提供了实现这些任务所需的核心机制、扩展能力和运行时环境。它的特点是稳定、通用、可扩展

3.1.1 核心组件:
  1. 运行时环境 (Runtime Environment)
    • Web 容器:基于 Java Servlets 的 Web 应用程序,处理 HTTP 请求和 UI 渲染。
    • 持久化模型:如何将任务(Job)、配置、构建结果等保存到磁盘(通常是 JENKINS_HOME 目录下的 XML 文件)。
  2. 扩展系统 (Extension System) - 灵魂所在
    • 扩展点 (Extension Points) :框架层定义了一系列“接口”或“契约”,例如 BuilderPublisherTriggerSCM。这些扩展点规定了插件可以做什么,但不提供具体实现。
    • 插件管理器 (Plugin Manager) :负责插件的发现、加载、依赖解析和生命周期管理。它使得 Jenkins 的功能可以无限扩展而无需修改核心代码。
  3. 调度与执行核心 (Scheduling & Execution Core)
    • 构建队列 (Build Queue) :管理等待执行的任务,处理优先级和并发控制。
    • 执行器 (Executors) :代表执行任务的“槽位”或能力。它负责启动和监控构建进程。
    • 节点管理 (Node Management) :管理 Master 和 Agent 的通信、状态和任务分配逻辑。
  4. 抽象模型 (Abstract Models)
    • 定义了核心概念的对象模型,如 JobRun(构建)、ViewUser 等。应用层的功能都围绕这些模型构建。
3.2 应用层 (The Application Layer)

应用层是建立在框架层之上的具体功能和实现。它利用框架层提供的扩展点和服务,来实现特定的 DevOps 实践和工具链集成。它的特点是具体、易变、面向用户

绝大部分用户直接接触和配置的都是应用层的功能。

3.2.1 核心组成部分:
  1. 插件 (Plugins)
    • 插件是应用层功能的主要载体。每个插件实现一个或多个框架层定义的扩展点。
    • 示例
      • Git Plugin:实现了 SCM 扩展点,提供了从 Git 仓库拉取代码的能力。
      • Email Extension Plugin:实现了 Publisher 扩展点,提供了发送丰富邮件通知的能力。
      • JUnit Plugin:实现了 Publisher 扩展点,提供了解析和展示 JUnit 测试报告的能力。
  2. 用户界面 (UI) & 用户体验 (UX)
    • 经典 UI:传统的 Jenkins Web 界面,用于配置自由风格任务、查看构建历史等。
    • Blue Ocean UI:提供现代化的、直观的流水线可视化界面(注:目前已不再积极开发,但仍有使用)。
    • 表单和配置页面:每个插件都会提供自己的配置界面,这些都属于应用层。
  3. 流水线 (Pipeline)
    • Jenkinsfile 和 Pipeline 语法是应用层的DSL(领域特定语言)
    • 它利用框架层的执行引擎和插件提供的步骤(Step),来编排复杂的构建、测试、部署流程。例如 sh, git, bat, junit 这些步骤都是由相应的插件实现并注入到流水线 DSL 中的。
  4. API
    • REST API:提供以编程方式与 Jenkins 交互的能力,用于触发构建、获取信息、管理配置等。它是对框架层核心模型的程序化暴露。
3.3 技术架构分层示例

在这里插入图片描述

关键特点总结:

  1. 模块化设计:所有功能通过插件解耦,可按需扩展
  2. 声明式与脚本式混合:同时支持 GUI 配置和代码化流水线(Jenkinsfile)
  3. 生态整合能力:无缝对接 DevOps 工具链(如:Ansible、Terraform、Prometheus)
  4. 可观测性:提供完整的构建日志、测试报告和性能指标追踪
3.4 两层之间的关系与交互
1. 依赖关系

在这里插入图片描述

2. 交互流程示例:一次构建任务

在这里插入图片描述

3.4 总结与比喻
层面比喻职责特点
框架层电脑的操作系统提供进程管理、文件系统、驱动模型等基础能力稳定、通用、提供标准接口
应用层电脑上安装的软件 (Chrome, Word,游戏)完成用户需要的具体任务(浏览网页、写文档、玩游戏)多样、易变、直接面向用户

这种分层架构的优势:

  • 高内聚低耦合:核心框架非常稳定,新功能通过插件独立开发,互不影响。
  • 极强的扩展性:社区可以为核心框架开发无数应用(插件),而无需改动一行框架代码。
  • 生态繁荣:这种模式直接催生了 Jenkins 近 2000 个插件的庞大生态系统。

4. 流水线执行原理图

在这里插入图片描述

5. 插件系统架构图

在这里插入图片描述

6. CI/CD 工作流图

在这里插入图片描述

7. 高可用架构图

在这里插入图片描述

8. 安全认证架构图

在这里插入图片描述

二、Jenkins 功能说明

1. Jenkins 核心框架功能

功能类别核心功能描述
1. 持续集成引擎- 自动化代码拉取、构建、测试 - 实时反馈构建状态 - 支持定时/代码变更触发
2. 分布式构建- Master-Agent 架构 - 任务动态分配 - 跨平台构建(Linux/Windows/macOS)
3. 流水线编排- Pipeline as Code(Groovy DSL) - 可视化 Blue Ocean 界面 - 多阶段并行执行
4. 插件系统- 1800+ 官方插件 - 自定义插件开发框架 - 依赖管理(Plugin Manager)
5. 安全控制- RBAC 权限模型 - 凭证管理(Credentials) - 集成 LDAP/OAuth/GitHub SSO
6. 扩展点体系- 提供 100+ 扩展点(Extension Points) - 支持核心功能二次开发

2. 应用层核心功能

2.1. 源代码管理集成

在这里插入图片描述

2.2. 构建工具支持
工具类型典型实现
编译型Maven/Gradle/MSBuild
脚本型Shell/Python/PowerShell
容器化Docker/Podman Build
云原生Helm/Kustomize
2.3. 测试自动化

在这里插入图片描述

2.4. 部署与发布
  • 部署模式
    • 蓝绿部署(Blue-Green)
    • 滚动更新(Rolling Update)
    • 金丝雀发布(Canary Release)
  • 目标环境
    在这里插入图片描述
2.5. 监控与反馈
功能模块实现方式
构建监控实时控制台输出/构建时间趋势图
质量门禁SonarQube 质量阈值检查
通知机制邮件/Slack/钉钉/Webhook 通知
日志分析ELK 集成/Logstash 管道

3. Jenkins 核心组件总览

组件类别关键组件功能描述
中央控制器Jenkins Master调度中心、UI服务、插件管理
执行单元Jenkins Agent/Node实际任务执行者(可动态扩展)
任务编排器Build Queue Executor Slot任务排队管理 并发控制(每个Agent的并行槽位)
持久化层Job Config Store Build Artifact Storage存储任务配置 保存构建产物(如JAR包)
安全层Authentication Realm Authorization Matrix用户认证(LDAP/OAuth等) 细粒度权限控制
通信桥梁Jenkins CLI REST API Agent Protocol (JNLP/SSH)命令行接口 外部系统集成 Master-Agent通信协议

4. 组件运转规则与交互流程

4.1. 核心组件交互图

在这里插入图片描述

4.2. 资源调度规则

在这里插入图片描述

4.3. 状态转换规则

在这里插入图片描述

5. 关键组件详细说明

5.1. Master-Agent 通信机制

在这里插入图片描述

  • 协议选择
    • JNLP:Agent主动连接Master(需开放端口)
    • SSH:Master主动连接Agent(更安全)
5.2. 插件加载流程

在这里插入图片描述

5.3. 流水线执行引擎

在这里插入图片描述

三、Jenkins概念对象模型

0. 核心对象模型关系图

下图清晰地展示了上述核心对象之间的静态关系(如继承、组合)和动态关系(如触发)。
在这里插入图片描述

交互流程:

一次简单的手动构建所涉及的对象交互:

  1. User 在 Jenkins UI 上点击一个 Job 的“构建”按钮。
  2. 这会创建一个 CauseUserIdCause),记录是谁发起的。
  3. Job 的配置被读取,并创建一个新的 Run(例如 FreeStyleBuild)对象。
  4. Run 被放入执行队列,最终分配到一个 Node(可能是 MasterAgent)上的 Executor 执行。
  5. 执行过程中,会产生日志(写入 Run 的 log 属性)。
  6. 执行结束后,结果(SUCCESS/FAILURE)被设置到 Run 的 result 属性。
  7. 如果配置了归档,会生成 Artifact 文件。
  8. 插件可能会向本次 Run 添加 Action(例如 TestResultAction 来展示测试报告)。
  9. 所有这些数据(Run 的状态、日志、Artifacts、Actions)都被持久化到 JENKINS_HOME 的磁盘上。
  10. UI 通过读取 Run 和其关联的 Action 对象来向 User 展示这次构建的详细结果页面。

1. 核心配置与身份模块

这个模块定义了 Jenkins 的静态结构和访问控制。

1.1. Node (节点)
  • 说明:代表一个可以执行任务的执行环境。是 MasterAgent 的抽象基类。
  • 关键属性:
    • label: 标签,用于将任务分组到合适的节点上。
    • numExecutors: 执行器数量,决定并发能力。
  • 子类:
    • Master: 主节点,负责协调。
    • Agent/Slave: 代理节点,负责执行任务。
1.2. User (用户)
  • 说明:代表一个可以登录和操作 Jenkins 的实体。
  • 关键属性:
    • id: 用户名。
    • fullName: 全名。
    • email: 邮箱。
1.3. Credential (凭证)
  • 说明:安全存储敏感信息的对象(由 Credentials Plugin 引入)。
  • 类型:
    • UsernamePasswordCredential: 用户名密码。
    • SSHUserPrivateKeyCredential: SSH 私钥。
    • StringCredential: 秘密文本。
    • CertificateCredential: 证书。
1.4. View (视图)
  • 说明:用于对 Job 进行分组和筛选,提供不同的仪表板视角。
  • 类型:
    • ListView: 列表视图,基于规则过滤。
    • DashboardView: 更复杂的仪表板视图(由插件提供)。

2. 任务与执行模块

这是最核心的模块,定义了要做什么和做的过程。

2.1. Job / Project (任务 / 项目)
  • 说明:用户配置的自动化任务的定义蓝图。它本身不存储执行状态,只存储配置。
  • 关键属性:
    • name: 名称。
    • config: 所有配置信息(XML格式存储)。
  • 子类:
    • FreeStyleProject: 自由风格项目,通过UI配置。
    • WorkflowJob: 流水线项目,其配置来自 Jenkinsfile
2.2. Run (运行) / Build (构建)
  • 说明Job一次具体执行。它存储了本次执行的所有状态、日志和结果。
  • 关键属性:
    • number: 构建号,唯一标识。
    • result: 结果(SUCCESS, FAILURE, UNSTABLE, ABORTED)。
    • duration: 持续时间。
    • log: 控制台输出日志。
  • 子类:
    • FreeStyleBuild: 对应 FreeStyleProject 的运行。
    • WorkflowRun: 对应 WorkflowJob 的运行。
2.3. Stage (阶段)
  • 说明(属于 Pipeline 插件) 将流水线逻辑划分为不同的、可视化的块(如“构建”、“测试”、“部署”)。
  • 关键属性:
    • name: 阶段名称。
2.4. Step (步骤)
  • 说明(属于 Pipeline 插件) 流水线中最小的执行单元。一个 Stage 包含多个 Step
  • 示例:
    • sh: 执行 shell 命令。
    • git: 拉取代码。
    • bat: 执行批处理命令。
    • junit: 发布测试报告。

3. 流水线与编排模块

3.1. Pipeline (流水线)
  • 说明:一套通过 Jenkinsfile 定义的持续交付流水线的完整模型。它是一个 WorkflowJob
3.2. Jenkinsfile
  • 说明:一个文本文件,包含了整个流水线的定义,使用 Groovy DSL 编写。它被存储在源代码库中,实现了 Pipeline as Code

4.产物与报告模块

4.1. Artifact (制品)
  • 说明:由一次 Run 产生的、需要被保留和存档的文件(如 Jar 包、War 包、文档)。
  • 存储:通常存储在 $JENKINS_HOME/jobs/[job_name]/builds/[build_number]/archive/ 目录下。
4.2. Action (动作)
  • 说明:一个非常重要的抽象接口,用于向 RunJob 对象添加额外的元数据、报告或功能
  • 常见实现:
    • TestResultAction: 存储和展示单元测试结果(由 JUnit 插件添加)。
    • BuildDataAction: 存储本次构建的 SCM 信息(如 Git Commit ID)。
    • CauseAction: 存储本次构建的触发原因(如由用户手动触发、由 SCM 变更触发)。
    • BadgeAction: 为构建添加自定义徽章。

5. 触发器与通知模块

5.1. Trigger (触发器)
  • 说明:定义了一个 Job 应在何时被自动触发。
  • 类型:
    • SCMTrigger: 轮询 SCM 变更。
    • TimerTrigger: 定时触发(Cron 语法)。
    • BuildAfterOtherProjectsTrigger: 在其他项目构建完成后触发。
5.2. Cause (原因)
  • 说明:记录一次 Run为什么被触发的。
  • 类型:
    • UserIdCause: 用户手动触发。
    • SCMCause: SCM 变更触发。
    • UpstreamCause: 由上游项目触发。

四、Jenkins 常规业务流程

0. 生产环境流水线全景图

在这里插入图片描述

1. 核心发布流程 (The Core Release Process)

这是生产环境的命脉,通常表现为一条分阶段(Stage)的部署流水线

1.1. 自动化金丝雀发布/蓝绿发布流程
  • 目标:以最小风险、零停机的方式发布新版本到生产环境。

  • 流程详解
    在这里插入图片描述

  • 关键工具:Kubernetes(Service/Ingress 流量切换)、Helm、Prometheus/Grafana(监控)、Istio/Linkerd(服务网格)。

  • 适用场景:对可用性要求极高的用户-facing 服务。

1.2. 审批门禁流程 (Manual Approval Gates)
  • 目标:在关键操作(如生产部署)前引入人工确认,平衡自动化与风险控制。

  • 流程详解
    在这里插入图片描述

  • 实现:使用 Jenkins 的 input 步骤或插件(如 Jira Approval、Telegram Notification)。

  • 适用场景:法律合规要求、高风险变更、首次发布新功能。

2. 安全与合规流程 (Security & Compliance)

这些流程是生产环境的“防火墙”,确保所有发布物都符合安全标准。

2.1. 生产镜像构建与漏洞扫描流程
  • 目标:确保部署到生产环境的容器镜像是纯净、安全、不可变的。
  • 流程详解
    1. 来源:使用通过CI测试的唯一可信二进制制品(如 application.jar)。
    2. 构建:在一个独立的、高权限的Jenkins Job中,基于最小化基础镜像(如 distroless)构建 Docker 镜像。
    3. 扫描:立即使用 TrivyGrype 对构建好的镜像进行漏洞扫描。
    4. 阻断:如果发现高危(CRITICAL/HIGH)漏洞,流程自动失败,无法推送到仓库。
    5. 推送:扫描通过后,镜像被推送到生产镜像仓库(如 Harbor、ECR),并打上唯一标签(如 git-commit-id)。
2.2. 合规性审计与证据收集流程
  • 目标:自动为每一次生产发布生成审计线索,满足合规要求(如 SOC2, ISO27001)。
  • 流程详解
    • 流水线自动收集并关联:
      • 构建信息:谁、在什么时候、触发了什么版本的构建。
      • 代码信息:构建对应的 Git Commit ID、代码差异(Diff)。
      • 测试证据:单元测试、集成测试的通过报告。
      • 安全证据:漏洞扫描结果、SBOM(软件物料清单)。
      • 部署证据:部署到的环境、使用的配置、审批记录。
    • 所有这些信息被自动打包并上传到审计数据库或长期存储中。

3. 可靠性保障流程 (Reliability Assurance)

3.1. 自动化回滚流程 (Self-Healing Rollback)
  • 目标:当监控系统检测到发布后异常,自动触发回滚,最大限度减少MTTR(平均恢复时间)。
  • 触发条件:Prometheus等监控系统检测到5xx错误率飙升、延迟增加、业务指标异常
  • 流程详解
    在这里插入图片描述
3.2. 混沌工程注入流程 (Chaos Engineering)
  • 目标:在生产发布后,主动注入故障,验证系统的弹性和高可用设计是否有效。
  • 流程:在蓝绿部署或金丝雀发布后,自动调用 ChaosMesh 或 LitmusChaos 工具,模拟节点宕机、网络延迟、Pod 被杀等故障,观察系统是否按预期运行或自愈。
  • 注意:此流程风险极高,需有完善的熔断和快速恢复机制。

4. 数据管理流程

4.1 数据库迁移流水线 (Database Migration Pipeline)
  • 目标:自动化、安全地执行生产数据库的 Schema 变更。
  • 流程详解
    1. 准备:将 Flyway/Liquibase 迁移脚本纳入代码库,进行代码审查。
    2. 预检查:在预生产环境(Staging) 自动执行 dry-runcheck 命令,评估变更影响。
    3. 备份:执行前自动触发生产数据库备份
    4. 执行:在指定的维护窗口(通过参数化选择),自动执行变更脚本。
    5. 验证:执行后运行简单的查询验证变更是否成功。
    6. 恢复预案:准备好备份恢复脚本,随时准备手动干预。

一、基础自动化流程

这些是构成复杂流水线的基础构建块。

1. 定时构建流程 (Scheduled Build)
  • 目标:无需人工干预,定期自动构建项目,确保代码稳定性。

  • 触发方式定时构建 (Build periodically) 触发器,使用 Cron 语法。

  • 典型流程
    在这里插入图片描述

  • 适用场景:每日构建 (Nightly Build)、周期性的集成测试。

2. 静态代码检查流程 (Static Code Analysis)
  • 目标:在编译前提前发现代码风格、潜在漏洞和坏味道。

  • 工具:SonarQube、Checkstyle、PMD、SpotBugs。

  • 典型流程
    在这里插入图片描述

  • 适用场景:强制代码质量门禁,提升代码健壮性。

二、核心CI/CD流水线

这是 Jenkins 最经典、最强大的业务流程。

1. 持续集成流水线 (CI Pipeline)
  • 目标:对每个提交快速反馈,确保集成后的代码质量。

  • 触发方式GitHub Webhook轮询 SCM

  • 典型流程
    在这里插入图片描述

  • 适用场景:所有需要保证代码质量的软件开发项目。

2. 持续交付/部署流水线 (CD Pipeline)
  • 目标:将 CI 产出的制品安全、可靠地交付到不同环境,直至生产环境。

  • 触发方式:由成功的 CI 流水线触发,或手动触发。

  • 典型流程
    在这里插入图片描述

  • 部署策略:蓝绿部署、金丝雀发布、滚动更新。

  • 适用场景:需要频繁、可靠发布应用的团队。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Solomon_肖哥弹架构

你的欣赏就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值