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 SSH[reference: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]。
相关推荐
cike_y2 小时前
JavaWeb之HttpServletResponse
java·开发语言·安全·java安全
小黄编程快乐屋2 小时前
线程、并发与互斥:解锁多任务编程的核心逻辑
java·开发语言·jvm
学困昇2 小时前
Linux 进程概念与内存管理详解(含冯诺依曼体系结构、环境变量、调度算法)
linux·c语言·开发语言·网络·数据结构·c++
靈龍靈2 小时前
ELBK部署
运维·ci/cd·jenkins
为什么要内卷,摆烂不香吗2 小时前
sed 流编辑器练习自用
linux·运维·编辑器
智象科技2 小时前
从资源到业务:运维监控体系的差异
大数据·运维·一体化运维·智能运维·多云管理
carver w2 小时前
open cv 基础操作合集 python
开发语言·c++
拾忆,想起2 小时前
Dubbo通信协议全景指南:如何为你的微服务选择最佳通信方案?
微服务·云原生·性能优化·架构·dubbo·safari
杜子不疼.2 小时前
【Linux】多机管理终极方案:禁用 root 密码,用面板实现批量部署 + 操作追溯
linux·运维·服务器