全面解析 Jenkins SSH 超时问题:`Exec timed out after 120,000 ms` 终极解决方案

本文深入剖析 Jenkins 构建中 Send build artifacts over SSH 步骤的超时故障,提供多种实战优化方案及避坑指南。


🔍 问题根源分析

报错信息解读
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000 ms]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
Finished: UNSTABLE
  • ⏱️ 120,000 ms 超时机制:Jenkins 默认限制 SSH 命令执行时间(120秒),超时强制中断
  • 🔌 非交互式终端限制:后台脚本未正确返回退出状态码,导致 Jenkins 持续等待(如 exit 0)
  • ⚠️ UNSTABLE 状态含义:任务未完全失败,但存在异常中断(区别于 FAILURE)
    在这里插入图片描述

🛠️ 四大解决方案(附配置截图)

✅ 方案一:增加 SSH 超时时间(推荐)
  1. 进入任务配置 → Send build artifacts over SSH
  2. 配置Exec timeout (ms)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
⚡ 方案二:启用 PTY 伪终端

在 SSH 高级选项中勾选:

✔️ Exec in PTY [模拟真实终端环境]

作用:确保脚本退出状态能被 Jenkins 正确捕获

📝 方案三:脚本强制退出

在执行的 Shell 命令末尾添加:

# 示例:启动服务后主动退出
nohup ./deploy.sh & 
sleep 1  # 等待进程启动
exit 0   # 明确返回成功状态

原理:避免后台进程阻塞 Jenkins 状态检测

🌐 方案四:SSH 服务端优化

修改目标服务器配置(/etc/ssh/sshd_config):

# 每60秒发送心跳包
ClientAliveInterval 60  

# 最大失败次数为3
ClientAliveCountMax 3

重启服务生效:

systemctl restart sshd

⚙️ 高级场景配置

1. Pipeline 任务超时控制

在 Jenkinsfile 中使用 timeout 指令:

timeout(time: 10, unit: 'MINUTES') {
    sshPublisher(
        transfers: [
            // SSH传输配置
        ]
    )
}
2. 全局 JNLP 节点超时

调整 Agent 启动参数:

java -jar agent.jar \
  -pingTimeout 300 \    # 心跳检测超时(秒)
  -noReconnect          # 超时后不重连
3. 网络层优化技巧
问题类型检测命令解决方案
SSH 连接缓慢time ssh user@host禁用 DNS 反向解析:UseDNS no
跨机房传输丢包mtr target_ip使用 rsync --partial 断点续传
防火墙拦截telnet ip 22放行目标 IP 的 22 端口

💡 避坑指南:高频失败原因

  1. 脚本未显式退出
    ❌ 错误示例:nohup ./start.sh &
    ✅ 修正方案:nohup ./start.sh & && sleep 1 && exit 0

  2. 资源耗尽导致卡顿

    • 检查目标服务器:top -c
    • 监控磁盘空间:df -Th
  3. 环境变量缺失
    在脚本开头加载环境:

    #!/bin/bash
    source /etc/profile
    source ~/.bash_profile
    

📊 超时时间设置参考表

场景推荐值配置位置
大文件传输(>1GB)300-600 秒SSH Exec timeout
服务启动脚本180 秒PTY + exit 0 组合
集群批量部署0(无限制)仅限稳定内网环境
跨境服务器连接300 秒ClientAliveInterval 设置

🌟 总结

通过以下组合策略可根治 SSH 超时问题:

  1. 基础设置:SSH 超时 ≥300 秒 + 启用 PTY
  2. 脚本规范:后台进程后必须跟随 exit 0
  3. 环境保障:定期检查网络带宽和服务器资源

最终效果:构建日志显示 SUCCESS 而非 UNSTABLE,传输耗时任务稳定执行完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值