Jenkins SSH shell在执行远程命令之前关闭

Jenkins SSH shell closes before executing remote commands

我有一份詹金斯的工作,在"执行shell"下有以下命令:

我希望Jenkins服务器通过ssh连接到远程服务器,然后在远程服务器上运行一个命令。

相反,Jenkins连接到远程服务器,立即断开连接,然后在本地运行pwd命令,如输出中所示:

1
2
3
4
5
6
7
8
Started by user Johanan Lieberman
Building in workspace /var/lib/jenkins/jobs/Test Github build/workspace
[workspace] $ /bin/sh -xe /tmp/hudson266272646442487328.sh
+ ssh [email protected]
Pseudo-terminal will not be allocated because stdin is not a terminal.
+ pwd
/var/lib/jenkins/jobs/Test Github build/workspace
Finished: SUCCESS

编辑:知道为什么在ssh命令之后的后续命令不在ssh shell中运行,而是在本地运行吗?


如果您没有以交互方式运行,ssh不会创建交互会话(因此您看到的"伪终端"错误消息),因此它与在交互终端中执行一系列命令不完全相同。

要通过ssh会话运行特定命令,请使用:

1
ssh jenkins@YOUR_IP 'uname -a'

远程命令必须作为ssh命令的单个参数正确引用。或者对简单的多行脚本使用bash-here-doc语法:

1
2
3
4
ssh jenkins@YOUR_IP <<EOF
pwd
uname -a
EOF


我认为您可以使用发布over ssh插件在具有ssh的slave上执行命令:

enter image description here

如果源文件字段是必需的,也许您可以传输一个虚拟文件。

更新:另一个解决方案是使用ssh插件。也许这是比其他插件更好的解决方案:)