Java 使用Jenkins通过SSH发送文件或执行命令时脚本未退出

Java 使用Jenkins通过SSH发送文件或执行命令时脚本未退出,java,shell,ssh,jenkins,jetty,Java,Shell,Ssh,Jenkins,Jetty,我对詹金斯很陌生,所以请容忍我。我试图远程执行一个shell脚本,在Jenkins完成构建并将文件部署到此服务器后,该脚本停止并启动我的独立Jetty部署 (詹金斯的后期构建设置截图,因为我还不是10个代表…) 因此,我遇到的问题是,一旦构建达到这个阶段,并且通过SSH发送文件插件开始执行jetty.sh启动脚本,我就会收到一个超时错误,因为sh脚本似乎没有返回任何完成确认(错误:发布时异常,异常消息)[Exec超时或在120003毫秒后中断]。这会导致生成失败,尽管jetty服务已正确启动

我对詹金斯很陌生,所以请容忍我。我试图远程执行一个shell脚本,在Jenkins完成构建并将文件部署到此服务器后,该脚本停止并启动我的独立Jetty部署

(詹金斯的后期构建设置截图,因为我还不是10个代表…)

因此,我遇到的问题是,一旦构建达到这个阶段,并且通过SSH发送文件插件开始执行jetty.sh启动脚本,我就会收到一个超时错误,因为sh脚本似乎没有返回任何完成确认(错误:发布时异常,异常消息)[Exec超时或在120003毫秒后中断]。这会导致生成失败,尽管jetty服务已正确启动

我曾尝试通过启用“Exec in pty”来使用高级设置,但这会导致启动的jetty服务在该步骤完成后再次关闭


有人对我可以尝试的其他方法有什么建议吗?我的方法是正确的还是完全错误的?

为什么我会出现超时错误
“通过SSH发送文件”插件的“高级”部分中有一个内置超时。默认情况下,它设置为在SSH连接处于非活动状态时超时120秒。在本例中,我使用“Exec in Pty”运行“通过SSH发送文件”post任务选项已禁用。选中此选项时,插件将通过虚拟SSH终端会话连接到部署服务器,之后,它不会自行退出会话,因此它只需等待超时

为什么码头服务启动但立即关闭
“执行官在私人公司”启用选项,使用适当的SSH终端会话连接到我的部署服务器。这会将任何输出和进程绑定到实际的终端会话。当通过SSH发送文件插件完成jetty启动脚本执行时,它会自行退出,但这样做会终止脚本启动的任何进程

解决方案
在深入研究之后,我找到了一个解决方案,可以使用命令:“nohup./jetty.sh start>/dev/null 2>&1&”来代替我通常使用的./jetty.sh start命令来启动我的脚本。但这也有一个缺点。输出没有重定向到终端会话,所以我不知道我的jetty服务是否正确启动。但目前我对它感到满意到目前为止,该解决方案只会部署到我的开发环境中

来源



我为什么会出现超时错误
“通过SSH发送文件”插件的“高级”部分中有一个内置超时。默认情况下,它设置为在SSH连接处于非活动状态时超时120秒。在本例中,我使用“Exec in Pty”运行“通过SSH发送文件”post任务选项已禁用。选中此选项时,插件将通过虚拟SSH终端会话连接到部署服务器,之后,它不会自行退出会话,因此它只需等待超时

为什么码头服务启动但立即关闭
“执行官在私人公司”启用选项,使用适当的SSH终端会话连接到我的部署服务器。这会将任何输出和进程绑定到实际的终端会话。当通过SSH发送文件插件完成jetty启动脚本执行时,它会自行退出,但这样做会终止脚本启动的任何进程

解决方案
在深入研究之后,我找到了一个解决方案,可以使用命令:“nohup./jetty.sh start>/dev/null 2>&1&”来代替我通常使用的./jetty.sh start命令来启动我的脚本。但这也有一个缺点。输出没有重定向到终端会话,所以我不知道我的jetty服务是否正确启动。但目前我对它感到满意到目前为止,该解决方案只会部署到我的开发环境中

来源



如果您只需要通过ssh在远程计算机上执行命令,那么可以在使用类似
ssh的命令完成构建和部署后添加另一个构建步骤user@remote.machine.com
。您需要确保
用户
能够以无密码的方式通过ssh连接到该机器,因此该用户的ssh密钥应复制到remo中Jetty正在运行的机器。你好,david!谢谢你的评论!我检查了密码和ssh权限,它们都是正确的。我已经找到了解决我的问题的方法,所以我会更新并给出答案。没问题!那是什么问题?如果你只需要通过ssh在远程机器上执行命令,你可以添加另一个版本使用类似于
ssh的命令完成构建和部署后的步骤user@remote.machine.com
。您需要确保
用户
能够以无密码方式通过ssh连接到该机器,因此该用户的ssh密钥应复制到Jetty运行的远程机器中。你好,大卫!谢谢您的评论!我检查了密码words和ssh权限,它们都是正确的。我已经找到了解决我的问题的方法,所以我会更新一个答案。没问题!然后是什么问题?