我在"执行shell"下面有以下命令的Jenkins作业:
ssh jenkins@172.31.12.58
pwd
我希望Jenkins服务器通过SSH连接到远程服务器,然后在远程服务器上运行命令。
相反,Jenkins连接到远程服务器,立即断开连接,然后在本地运行pwd
命令,如输出中所示:
Started by user Johanan Lieberman
Building in workspace /var/lib/jenkins/jobs/Test Github build/workspace
[workspace] $ /bin/sh -xe /tmp/hudson266272646442487328.sh
+ ssh jenkins@172.31.12.58
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中运行,而是在本地运行?
答案 0 :(得分:7)
如果您没有以交互方式运行,SSH不会创建交互式会话(因此您会看到" Pseudo-terminal"错误消息),因此它不会完全相同在交互式终端中执行一系列命令。
要通过SSH会话运行特定命令,请使用:
ssh jenkins@YOUR_IP 'uname -a'
必须正确引用remote命令作为ssh命令的单个参数。或者使用bash here-doc syntax作为简单的多行脚本:
ssh jenkins@YOUR_IP <<EOF
pwd
uname -a
EOF
答案 1 :(得分:1)
我认为您可以使用Publish Over SSH plugin在SSH上执行命令:
如果源文件字段是必填字段,则可以传输虚拟文件。
更新: 另一种解决方案是使用SSH plugin。也许它与其他插件相比是一个更好的解决方案:)