在 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 插件安装
- 登录 Jenkins,进入 Manage Jenkins(系统管理) -> Manage Plugins(插件管理)。
- 在 Available(可选插件) 选项卡中,搜索 "SSH Build Agents"。
- 勾选该插件并安装(通常选择 "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 私钥方式。
-
生成密钥对 :在 Jenkins Master 服务器上,切换到 Jenkins 进程所属用户(通常是
jenkins),生成 SSH 密钥对。bashsudo su jenkins -s /bin/bash cd ~ ssh-keygen -t rsa -f .ssh/jenkins_agent_key -
分发公钥 :将公钥(
jenkins_agent_key.pub)内容添加到远程机器对应用户的~/.ssh/authorized_keys文件中[reference:10]。 -
在 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 节点
- 进入 Manage Jenkins(系统管理) -> Manage Nodes and Clouds(节点管理) ,点击 New Node(新建节点)[reference:12]。
- 输入节点名称(如
linux-build-agent-01),选择 Permanent Agent(固定代理)。 - 在配置页面中,关键设置如下:
- 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"。
- Remote root directory(远程根目录) :远程机器上的工作目录路径(如
- 点击保存后,Jenkins 会自动尝试通过 SSH 连接远程主机,并在其上启动一个 Agent 进程[reference:14]。节点状态显示为绿色即表示连接成功。
4. 应用场景
SSH Build Agents 插件在多种 CI/CD 场景下发挥着关键作用:
- 分布式并行构建:在大型项目中,可将编译、测试等任务分发到多台配置相同的 Agent 上并行执行,显著缩短整体构建时间[reference:15]。
- 跨平台构建与测试:当产品需要支持 Linux、Windows 等多个操作系统时,可以配置对应平台的 SSH Agent,确保构建和测试在原生环境下进行[reference:16]。
- 环境隔离与专用化:为不同的构建类型设置专用 Agent。例如,设立一个安装了大量 SDK 的 Android 构建节点,或一个 GPU 强大的深度学习模型训练节点。
- CI/CD 流水线集成 :在 Jenkins Pipeline 脚本中,可以通过
agent { label 'linux' }指令,轻松地将特定阶段定向到具有相应标签的 SSH Agent 上执行,实现灵活的流水线编排[reference:17]。 - 资源弹性扩展:在构建高峰时段,可以临时启动云主机或容器,并通过 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]。