欢迎光临
我们一直在努力

jenkins发布在put x x x.jar 卡住了

Jenkins SSH 发布卡在 put [xxxxxx.jar]

日志特征:

SSH: cd [目录]
SSH: OK
SSH: put [xxx.jar]

前面全部 OK,卡在 put 上传 jar 这一步,不再往下跑。

put = sftp 上传文件,正在把本地构建好的 jar 传到远端服务器 对应的目录

最常见 4 个原因(按概率排序)

1)远端服务器磁盘空间不足(dh -f !极高嫌疑)

目标机器:ip,就是刚才那台机器

  • /dev/vda1 使用率 86%,剩余 14G;如果 jar 包很大,磁盘写满,sftp‑put 就会卡死、不报错、不超时,Jenkins 任务挂住。

登录这台机器确认:

df -h

如果根盘继续上涨,sftp 写入直接僵死。

2)当前的 用户对 对应的目录 目录没有写入权限

Jenkins SSH 插件使用用户:用户
登录远端机器执行:

cd 对应的目录
ls -ld .

看目录属主是不是 用户:用户。
如果目录是 root 权限,bigdata 能 cd 进去,但无法上传文件,put 直接卡住。

修复权限:

sudo chown -R 用户:用户 目录

3)jar 包本身太大;网络带宽慢,上传时间超过插件超时时间

  • 大 jar,网络慢,上传耗时很久;Jenkins SSH 插件默认超时不够,任务卡住。

现象:Jenkins 控制台没有输出,进度不动,不是报错,是还在传。

SSH 插件配置修改:

  • Jenkins → 系统管理 → SSH Servers → 找到 对应 jenkins下面的 配置
  • 超时时间(Timeout) 默认一般 10–30 秒,改成 300(5 分钟)
  • 或者构建脚本改成:先传到临时目录,再 mv,不要直接 put 覆盖正在运行的 jar。

4)SELinux / 防火墙、磁盘 IO 打满

服务器 IO 负载很高,磁盘忙,sftp 写入阻塞。
登录机器看负载:

top
iostat -x 1


快速定位问题的调试方法(建议先做)

方式 1:手动本地 sftp 复现,直接看会不会卡死

在 Jenkins 机器手动执行 sftp 模拟 Jenkins 行为:

sftp -P22 用户名@ip
cd 对应目录
put xxxx.jar

如果这里手动 sftp 也卡住 → 问题在目标服务器侧(磁盘 / 权限 / IO),不在 Jenkins。
如果手动 sftp 上传很快成功 → Jenkins 插件问题(超时、版本 bug)。

方式 2:不要直接 put 覆盖运行中的 jar(重要坑)

现在逻辑:直接 put 上传 jar 到 /对应的目录
如果该 jar 正在被 Java 进程占用,部分环境 sftp put 会僵死!

最佳实践改流程:

  • sftp put 上传到临时目录 /home/bigdata/tmp/
  • 上传完成后,ssh 执行 mv 移动到 scm-api 目录
  • 避免直接覆盖正在被进程打开的 jar 包。


    结合你业务完整改造 Jenkins 发布脚本思路

    原来流程:

    sftp cd 目录 → put jar 【卡住点】 → ssh 执行备份、mv、重启

    改成安全流程:

  • SFTP 把 jar 上传到 目录
  • SSH 远程执行:
  • cd 目录
    脚本
    mv 上传好的jar 移动到的最终的地址
    重启


    立刻检查这两点优先(你的环境高概率命中)

  • 登录 ip,确认df -h根盘不要继续上涨,大于90% 已经高危;
  • 确认 /对应的目录 目录属主是 对应的用户;
  • 如果手动 sftp 复现也卡住,90% 就是磁盘满 / 权限问题;手动 sftp 正常,就调 Jenkins SSH 插件超时。

    你可以看一下:任务卡在这里,服务器 对应上传的谬了 有没有生成部分大小的 .part 临时 jar 碎片?有的话就是上传写不进去。

    查看对应的jar的大小:ls -lh 对应jar包

    赞(0)
    未经允许不得转载:171主机测评 » jenkins发布在put x x x.jar 卡住了
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址