使用Jenkins SSH Publishers插件时如何输出远端脚本的完整报错信息
问题原因
SSH Publishers插件默认不会将远程服务器执行命令的标准输出、标准错误内容回传到Jenkins控制台,你看到的状态码127本身就对应「命令未找到」的错误类型,只是缺少具体报错上下文。
解决步骤
方案一:调整插件配置(推荐)
- 进入对应Jenkins项目的配置页面,定位到 SSH Publishers 配置模块
- 点击你当前使用的SSH服务条目下的高级按钮
- 勾选 Exec in pty(在伪终端中执行)和 Verbose output in console(控制台输出详细日志)两个选项
- 保存配置后重新执行构建,即可看到远程脚本的完整执行日志,包括你要的行号和具体命令不存在的报错。
方案二:命令行重定向输出
如果不方便修改插件配置,直接修改SSH执行命令的内容,将标准错误重定向到标准输出即可被捕获:
sh -x /你的脚本完整路径/demo.sh 2>&1
建议填写脚本的绝对路径,避免Jenkins SSH执行时的默认工作目录和你手动测试时的目录不一致,出现找不到脚本的额外问题。
方案三:脚本内增加强制输出配置
如果上述两种方案还是看不到日志,可在demo.sh开头添加如下配置,关闭输出缓冲、强制打印所有执行信息:
#!/bin/sh # 打印所有执行的命令 set -x # 遇到错误立即退出,管道命令也会返回最后一个非0的退出码 set -eo pipefail # 关闭标准输出/错误的缓冲,避免日志被缓存丢弃 stdbuf -i0 -o0 -e0
内容的提问来源于stack exchange,提问作者FinleyMa
相关产品推荐
相关产品推荐

