Jenkins SSH Build Agents 插件详解:远程构建的利器

在 Jenkins 的持续集成与交付 (CI/CD) 实践中,单个 Master 节点的处理能力终有上限。为了提升构建效率、实现跨平台测试或隔离构建环境,将任务分发到多个远程机器(Agent)执行是必然选择。而在众多连接方式中,SSH Build Agents 插件因其安全、通用和易用的特性,成为了连接和管理远程构建节点的首选方案。

Jenkins SSH Build Agents 插件通过成熟、安全的 SSH 协议,为 Jenkins 提供了强大、灵活的远程构建节点管理能力。无论是为了实现分布式并行构建、跨平台测试,还是为了构建环境隔离与弹性扩展,它都是一个可靠且高效的选择。通过遵循本文所述的配置步骤与最佳实践,您可以轻松地搭建并维护一个健壮的分布式 Jenkins 构建集群,从而为团队的持续集成与交付流程提供坚实的支撑。

1. 插件概述

SSH Build Agents 插件 (原名 SSH Slaves 插件)是 Jenkins 的官方插件之一reference:0。其核心功能是通过 SSH 协议远程启动和管理 Jenkins 构建代理(Agent)reference:1。它使用纯 Java 实现的 SSH 客户端,无需在 Jenkins Master 上安装额外的原生 SSH 工具,具有良好的跨平台兼容性。

核心价值与特点:

  • 简化管理:自动化代理节点的部署与连接,大幅减少手动配置工作量。
  • 安全可靠:利用 SSH 协议本身的安全特性(如加密通信、密钥认证)保障连接安全reference:2
  • 跨平台支持:原生支持 Linux、Unix 系统,并通过与 Cygwin 集成,也能有效地在 Windows 环境下工作reference:3
  • 无缝集成:作为 Jenkins 生态的核心组件,可与 Pipeline、凭据管理、节点标签等特性深度集成。

2. 安装与配置

2.1 插件安装

  1. 登录 Jenkins,进入 Manage Jenkins(系统管理) -> Manage Plugins(插件管理)
  2. Available(可选插件) 选项卡中,搜索 "SSH Build Agents"。
  3. 勾选该插件并安装(通常选择 "Install without restart")reference:4

注意:该插件依赖 "SSH Credentials Plugin" 来管理认证信息,安装时通常会一并解决reference:5

2.2 基础系统配置

安装后,建议在全局安全配置中启用 SSH 服务器功能,以备其他用途。路径为:系统管理 -> 全局安全配置 -> SSH Server,将其设置为"非禁用"reference:6

3. 使用步骤详解

使用 SSH Build Agents 插件添加一个远程节点,主要分为三大步骤:准备远程机器、配置连接凭据、在 Jenkins 中添加节点。

3.1 准备远程 Agent 机器

远程机器需要满足以下条件:

  • 运行 SSH 服务 :确保 sshd 服务已开启且网络可达reference:7
  • 安装 Java:必须安装 JDK 8 或更高版本,这是运行 Jenkins Agent 进程的前提reference:8
  • 创建专用用户 (可选但推荐):为 Jenkins 构建创建一个专用用户(如 jenkins),并为其设置好工作目录及相应权限reference:9

3.2 配置 SSH 连接凭据

Jenkins 需要通过 SSH 认证连接到远程机器。推荐使用更安全的 SSH 私钥方式

  1. 生成密钥对 :在 Jenkins Master 服务器上,切换到 Jenkins 进程所属用户(通常是 jenkins),生成 SSH 密钥对。

    bash 复制代码
    sudo su jenkins -s /bin/bash
    cd ~
    ssh-keygen -t rsa -f .ssh/jenkins_agent_key
  2. 分发公钥 :将公钥(jenkins_agent_key.pub)内容添加到远程机器对应用户的 ~/.ssh/authorized_keys 文件中reference:10

  3. 在 Jenkins 中添加凭据

    • 进入 Manage Jenkins(系统管理) -> Credentials(凭据) -> System(系统) -> Global credentials (unrestricted)(全局凭据)
    • 点击 Add Credentials(添加凭据)
    • 种类选择 SSH Username with private key
    • 填入远程用户名,在 Private Key 选项中选择 Enter directly ,并将之前生成的私钥(jenkins_agent_key)的完整内容粘贴进去reference:11

3.3 添加并启动 SSH Agent 节点

  1. 进入 Manage Jenkins(系统管理) -> Manage Nodes and Clouds(节点管理) ,点击 New Node(新建节点)reference:12
  2. 输入节点名称(如 linux-build-agent-01),选择 Permanent Agent(固定代理)
  3. 在配置页面中,关键设置如下:
    • Remote root directory(远程根目录) :远程机器上的工作目录路径(如 /data/jenkins)。
    • Labels(标签) :为此节点打上标签(如 linux, docker-host),便于任务筛选。
    • Usage(用法):建议选择 "Only build jobs with label expressions matching this node"。
    • Launch method(启动方式) :选择 Launch agents via SSHreference:13
    • Host(主机):填写远程机器的 IP 地址或主机名。
    • Credentials(凭据):选择上一步创建的 SSH 密钥凭据。
    • Host Key Verification Strategy(主机密钥验证策略):生产环境建议选择 "Known hosts file",测试环境可选 "Non verifying Verification Strategy"。
  4. 点击保存后,Jenkins 会自动尝试通过 SSH 连接远程主机,并在其上启动一个 Agent 进程reference:14。节点状态显示为绿色即表示连接成功。

4. 应用场景

SSH Build Agents 插件在多种 CI/CD 场景下发挥着关键作用:

  1. 分布式并行构建:在大型项目中,可将编译、测试等任务分发到多台配置相同的 Agent 上并行执行,显著缩短整体构建时间reference:15
  2. 跨平台构建与测试:当产品需要支持 Linux、Windows 等多个操作系统时,可以配置对应平台的 SSH Agent,确保构建和测试在原生环境下进行reference:16
  3. 环境隔离与专用化:为不同的构建类型设置专用 Agent。例如,设立一个安装了大量 SDK 的 Android 构建节点,或一个 GPU 强大的深度学习模型训练节点。
  4. CI/CD 流水线集成 :在 Jenkins Pipeline 脚本中,可以通过 agent { label 'linux' } 指令,轻松地将特定阶段定向到具有相应标签的 SSH Agent 上执行,实现灵活的流水线编排reference:17
  5. 资源弹性扩展:在构建高峰时段,可以临时启动云主机或容器,并通过 SSH 插件快速将其纳管为 Jenkins Agent,构建结束后再释放资源,实现成本优化。

5. 最佳实践

为了确保 SSH Build Agents 稳定、安全、高效地运行,建议遵循以下最佳实践:

  • 使用密钥认证,避免密码:始终使用 SSH 密钥对进行认证,并妥善保管私钥。这是比密码更安全、更自动化的方式reference:18
  • 精细化权限控制:为 Jenkins 专用用户分配最小必要的文件系统权限和 sudo 权限(如果构建需要),降低安全风险reference:19
  • 利用标签进行分组管理 :为节点设置清晰的标签(如 prod-linux, test-windows),在 Pipeline 或任务中通过标签表达式来选择合适的节点,提高配置的灵活性和可读性。
  • 保持环境一致性:确保同类 Agent 上的工具链(JDK、Maven、Docker 等)版本一致,避免因环境差异导致的构建失败。可以考虑使用 Docker 或自动化配置工具(如 Ansible)来标准化环境。
  • 监控与维护
    • 定期检查 Agent 节点的磁盘空间、内存和 CPU 使用情况。
    • 在 Jenkins 系统设置中,将 Master 节点的执行器数量设为 0,强制所有任务都在 Agent 上运行,解放 Master 资源reference:20
    • 建立 Agent 节点离线告警机制,及时发现问题。
  • 网络与安全优化
    • 确保 Jenkins Master 与 Agent 之间的网络延迟较低且稳定。
    • 在防火墙规则中,限制只有 Master 的 IP 可以访问 Agent 的 SSH 端口(默认为 22)。
    • 定期更新 SSH Build Agents 插件及其依赖插件,以获取安全补丁和新功能reference:21
相关推荐
JouYY1 天前
聊一下多 Agent 编排架构的应用实践
架构·llm·agent
Sunia1 天前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi2 天前
Q01-高并发点赞系统架构设计
架构
笨鸟飞不快2 天前
从 MVC 到 DDD:一次真实的渐进式迁移实录
后端·架构
这个DBA有点耶3 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
锋行天下3 天前
我试图优化 Vite 的拆包,结果首屏慢了 10 倍
前端·vue.js·架构
小鼻子的猫3 天前
独立开发 30 天:2.5 万行代码,23 个 Bug,5 次重构——一个 AI 社区的诞生
架构
咖啡八杯3 天前
GoF设计模式——命令模式
java·设计模式·架构
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端