Jenkins 架构详解 - 初学者指南

本文面向 Jenkins 初学者,解释 Jenkins Server、Job、Plugin、Credential、Agent、Cloud、Data 和 Web Interface 等核心组件如何协同工作,并说明生产环境中需要关注的配置、凭证和备份要点。

作者 Bibin Wilson

Jenkins

本文介绍 Jenkins 的基础架构和关键组件。如果你是 Jenkins 初学者,重点应先理解 Jenkins Server 如何负责任务编排,Agent 如何执行构建任务,以及插件、凭证、数据目录和 Web 界面分别承担什么职责。

核心要点

  • Jenkins 是基于 Java 的开源 CI/CD 工具,常用于持续集成、持续交付、基础设施自动化和批处理任务。
  • Jenkins Server 负责保存配置、调度作业、管理插件、凭证、安全策略和全局配置。
  • Jenkins Agent 是实际执行构建、测试、部署等步骤的工作节点,可以是静态服务器,也可以是 Docker、Kubernetes 等动态云代理。
  • Jenkins 的许多配置以 XML 文件形式存放在 $JENKINS_HOME,生产环境必须重视数据目录备份和凭证目录保护。
  • 插件生态是 Jenkins 的核心优势之一,但插件也会带来升级、兼容性和安全治理成本。

Jenkins 是什么

Jenkins 是一个易于使用、基于 Java 的开源 CI/CD 工具。它已经存在多年,许多公司仍用它支撑持续集成和持续交付流程。

理解 Jenkins 前,最好先理解持续集成(CI)和持续交付(CD)。Jenkins 的核心价值是把构建、测试、制品发布、部署、脚本执行等工作流自动化,并通过 Pipeline 方式固化为可复用流程。

Jenkins 拥有庞大的社区支持和大量插件,可以与许多开源工具和企业工具集成。虽然 GitLab CI、GitHub Actions 等 CI/CD 工具越来越普及,Jenkins 仍在很多组织中广泛使用。原文提到,根据开发者生态系统报告,54% 的开发者使用 Jenkins 进行 CI/CD。

Developer Ecosystem Report

Jenkins 常用于以下工作:

  • 应用程序和基础设施代码的持续集成。
  • 使用持续交付管道,将应用部署到不同环境。
  • 通过 Jenkins Pipeline as Code 管理构建和部署流程。
  • 使用 IaC 工具部署和管理基础设施组件。
  • 运行批处理作业或临时运维操作,例如备份、清理、远程脚本执行和事件触发任务。

Jenkins 整体架构

下图展示了 Jenkins 的整体架构和连接工作流。

jenkins-architecture

Jenkins 的关键组件包括:

  • Jenkins Server,也就是过去常说的 Master。
  • Jenkins Agent Nodes / Clouds。
  • Jenkins Web Interface。

可以简单理解为:Server 负责调度和管理,Agent 负责真正执行任务,Web Interface 负责配置、查看和操作。

Jenkins Server:控制和编排中心

Jenkins Server 保存关键配置,负责编排 Pipeline 中定义的工作流。例如调度作业、监控作业、管理插件、维护凭证和展示构建结果。

Jenkins Jobs

Job 是一系列步骤的集合,可以用于构建源代码、测试代码、运行 shell 脚本、在远程主机执行 Ansible 角色,或执行 Terraform 等自动化任务。很多场景下,我们会把 Job 称为 Jenkins Pipeline。

Jenkins pipeline example

如果将上述步骤转换为 Jenkins Pipeline 作业,可以写成如下形式:

Jenkins pipeline code

Jenkins 支持多种作业类型,用来覆盖不同的持续集成和持续交付流程。对于团队协作,推荐把 Pipeline 定义固化到代码仓库中,便于审查、版本管理和回滚。

Jenkins Plugins

插件是 Jenkins 官方或社区开发的功能模块。Jenkins 本身不提供的很多能力,都可以通过插件补齐。

例如,如果要从 Jenkins 上传文件到 S3,可以安装 AWS Jenkins 插件,并使用插件提供的抽象能力,而不是在 Pipeline 中自己编写完整 AWS CLI 逻辑。插件会封装一部分错误处理和异常处理。

以下是 AWS Steps 插件提供的 S3 文件上传功能示例。

AWS Steps plugin

你可以从 Jenkins dashboard 安装或升级插件。对于企业内网环境,通常需要设置代理才能连接插件仓库。也可以下载插件文件,并将其复制到 /var/lib/jenkins/plugins 目录下安装。

如果现有插件不能满足需求,也可以开发自定义插件。可通过 Jenkins 插件索引 查看插件生态。

Jenkins 安全

Jenkins 常见身份认证方式包括:

  • Jenkins 自带用户数据库:用户信息由 Jenkins 自身维护,底层体现为 Jenkins 的 XML 配置文件。
  • LDAP 集成:使用公司 LDAP 进行 Jenkins 身份认证。
  • SAML 单点登录(SSO):通过 Okta、AzureAD、Auth0 等身份提供商实现单点登录。

在认证之外,Jenkins 还可以为用户分配不同权限角色。生产环境需要把“谁能创建 Job、谁能修改凭证、谁能执行部署、谁能管理插件”拆开治理。

Jenkins 凭证

设置 Jenkins Pipeline 时,经常需要连接云账号、服务器、数据库或 API 端点。Jenkins 可以将不同类型的秘密保存为凭证,例如:

  • 秘密文本。
  • 用户名和密码。
  • SSH Key。

所有凭证均由 Jenkins 加密(AES),机密存储在 $JENKINS_HOME/secrets/ 目录中。保护此目录并将其从普通 Jenkins 备份中排除非常重要。

原文提醒:更推荐使用外部机密管理方案,例如 Vault,而不是完全依赖 Jenkins 本机凭据。

Jenkins Nodes / Clouds

Jenkins 可以配置多个代理节点(Linux/Windows)或云代理(Docker、Kubernetes)来执行作业。Agent 的选择会影响构建隔离性、执行效率和环境一致性。

Jenkins 全局配置

Jenkins 全局配置中包含已安装插件的配置,也包含 Jenkins 原生全局配置。你还可以在这里配置全局环境变量。

例如,可以将 Nexus、SonarQube 等工具 URL 存储为全局环境变量,并在多个 Pipeline 中复用。这样当工具地址变化时,可以统一修改,而不是逐个 Job 调整。

Jenkins Logs

Jenkins 提供服务器操作相关日志,包括作业日志、插件日志、webhook 日志等。排查 Jenkins 自身问题时,应同时关注 Jenkins Server 日志、Agent 日志和具体 Job 的控制台输出。

上述组件的许多配置都以 XML 文件形式存在于 Jenkins 主节点数据目录中。

Jenkins Agent:任务执行节点

Jenkins Agent 是实际执行作业步骤的工作节点。创建 Jenkins 作业时,需要为其分配 Agent。每个 Agent 都可以有标签,用来标识它的能力或用途。

Jenkins agent node

当从 Jenkins Server 触发作业时,实际执行发生在作业中配置的 Agent 节点上。

你也可以在 Jenkins Server 上直接运行作业,此时 Server 同时充当 Agent。但生产环境不建议长期这样做,因为构建任务的依赖、环境变量、临时文件或系统级变更可能影响 Jenkins Server 稳定性。

Agent 可以是 Windows、Linux 服务器,也可以是容器。还可以根据用例限制作业只在特定 Agent 上运行。例如,如果某个 Agent 安装了 Java 8,就可以把需要 Java 8 环境的作业分配给它。

Jenkins Server 与 Agent 如何连接

Jenkins Server 和 Agent 常见连接方式有两种:

连接方式 特点 需要关注
SSH Jenkins Server 通过 SSH 连接 Agent Server 到 Agent 的 22 端口连通性、凭证管理
JNLP Agent 主动连接 Jenkins Server Agent 需要知道 Server 地址,Server 防火墙需允许指定 JNLP 端口

JNLP 通常使用可配置端口,原文提到常见端口为 50000。

Jenkins Agent 的两种类型

Agent Nodes

Agent Nodes 是静态代理,通常是 Windows 或 Linux 服务器。这类代理长期启动并保持与 Jenkins Server 的连接。部分公司会使用脚本在夜间或周末关闭不使用的代理,以降低资源成本。

Agent Clouds

Agent Clouds 是动态代理概念。每次触发作业时,Jenkins 按需部署虚拟机或容器作为 Agent,作业完成后再删除它。当 Jenkins 规模较大且持续构建频繁时,这种方式可以节省基础设施成本。

下图展示了不同类型代理和连接方式的高层视图。

jenkins-agent-conneticity

可以参考以下教程了解更多 Jenkins Cloud 用法:

Jenkins Data:数据目录和备份

Jenkins 数据默认存储在:

/var/lib/jenkins/

该目录包含作业配置文件、插件配置、秘密、节点信息等。与一些工具相比,Jenkins 的迁移相对直接,一个重要原因是大部分配置都在这个数据目录中。

如果查看 /var/lib/jenkins/,会发现许多配置文件是 XML 格式。生产环境中,建议每天备份 Jenkins 数据目录。如果 Jenkins Server 数据损坏,可以通过数据备份恢复。

部署 Jenkins 时,通常建议为 /var/lib/jenkins 挂载独立网盘或持久化存储。

Jenkins data volume

Jenkins Web Interface

Jenkins 2.0 引入了更直观的 Web 界面,称为 Jenkins Blue Ocean。它可以为 Pipeline 提供更好的视觉展示。

Jenkins blue ocean

Web Interface 不只是展示界面,也承担配置、插件管理、凭证管理、作业查看和日志排查等操作入口。生产环境中需要通过权限控制限制高风险操作。

新手理解 Jenkins 架构的顺序

如果刚开始学习 Jenkins,可以按下面顺序建立认知:

  1. 先理解 Job / Pipeline:Jenkins 到底要执行哪些步骤。
  2. 再理解 Server / Agent:谁负责调度,谁负责执行。
  3. 然后理解 Plugin:Jenkins 如何连接外部系统和扩展能力。
  4. 接着理解 Credential:Pipeline 如何安全访问外部资源。
  5. 最后理解 Data 和 Backup:Jenkins 的配置和状态如何持久化、迁移和恢复。

FAQ

Jenkins Server 和 Agent 的区别是什么?

Jenkins Server 负责配置、调度、权限、插件和界面管理;Agent 负责实际执行构建、测试、部署等任务。生产环境应尽量把任务执行放在 Agent 上,减少对 Server 的影响。

Jenkins 插件越多越好吗?

不是。插件能扩展能力,但也会增加升级、兼容性和安全治理成本。插件应围绕明确需求安装,并纳入定期升级和审计流程。

为什么要备份 /var/lib/jenkins/

Jenkins 的作业配置、插件配置、节点信息和部分关键状态都存放在数据目录中。该目录损坏或丢失,会直接影响 Jenkins 恢复能力。

总结

Jenkins 架构可以概括为:Server 负责控制和编排,Agent 负责执行,插件负责扩展,凭证负责安全访问外部资源,数据目录负责保存配置和状态。对初学者来说,真正理解 Jenkins 不是记住所有菜单,而是弄清楚一次 Pipeline 从触发、调度、执行到日志和结果展示,分别由哪些组件负责。

原文:https://devopscube.com/jenkins-architecture-explained/ 译者:巴辉特

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

标签 Jenkins
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云