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

时间:2015-05-21 04:11:42

标签: java shell ssh jenkins jetty

我对设置詹金斯很新,所以请耐心等待。在Jenkins完成构建文件并将文件部署到此服务器之后,我试图远程执行一个shell脚本来停止并启动我独立的Jetty部署。

http://imgur.com/PXGHqtl (关于詹金斯的Post Build设置的截图,我还没有10个代表......)

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

我尝试通过启用" Exec in pty"来尝试使用高级设置。但这会导致启动的码头服务在此步骤完成后再次关闭。

有没有人建议我还能尝试什么?我的方法是正确还是完全错误?

1 个答案:

答案 0 :(得分:4)

为什么我收到超时错误
在通过SSH插件发送文件的高级部分中有一个内置超时。默认情况下,它设置为在SSH连接不活动时超时120秒。在这个例子中,我正在运行“通过SSH发送文件”帖子任务,其中包含" Exec in Pty"选项已停用。选中此选项后,插件将通过虚拟SSH终端会话连接到部署服务器,之后,它不会自动退出会话,因此只是等待超时。

为什么码头服务启动但立即关闭
随着" Exec in Pty"选项已启用,正确的SSH终端会话用于连接到我的部署服务器。这将任何输出和过程与实际的终端会话联系起来。当通过SSH发送文件插件完成jetty启动脚本执行时,它会自行退出,但这样做会杀死脚本启动的任何进程。

<强>解决方案
经过大量挖掘后,我发现了一个使用命令启动脚本的解决方案:&#39; nohup ./jetty.sh start&gt; / dev / null 2&gt;&amp; 1&amp;&#39;取代我平常的./jetty.sh启动命令。但这有一个缺点。输出没有重定向到终端会话,所以我不知道我的码头服务是否正常启动。但到目前为止,我对解决方案表示满意,因为它只会部署到我的开发环境中。

源头
Terminating SSH session executed by bash script
Jenkins Text-finder unable to success my Build
Jetty server stops running after closing terminal window