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]。
相关推荐
山上三树18 小时前
详细介绍 C 语言中的匿名结构体
c语言·开发语言·算法
唐装鼠18 小时前
linux vscode解压版 AI账号无法登陆问题(浏览器无法打开vscode)
linux·运维·vscode
大猫和小黄18 小时前
Java开发过程中的各种ID生成策略
java·开发语言·id
繁依Fanyi18 小时前
从初识到实战 | OpenTeleDB 安装迁移使用指南
开发语言·数据库·python
小罗和阿泽18 小时前
java [多线程基础 二】
java·开发语言·jvm
小罗和阿泽18 小时前
java 【多线程基础 一】线程概念
java·开发语言·jvm
橘颂TA18 小时前
线程池与线程安全:后端开发的 “性能 + 安全” 双维实践
java·开发语言·安全
db_murphy18 小时前
学习篇 | 服务器的睿频
运维·服务器·学习
bruce_哈哈哈18 小时前
go语言初认识
开发语言·后端·golang
Levin__NLP_CV_AIGC18 小时前
Ubuntu部署Dufs
linux·运维·服务器·ubuntu·ssh