在Jenkins构建中使用ssehexec任务并不能阻止它的执行

时间:2013-04-19 08:49:06

标签: java shell ant jenkins

我在Jenkins Ant Execution Plugin中有一个Ant任务,作为Post Build Step,在我们的一个服务器中远程运行shell脚本。 shell脚本在后台启动java进程。当我直接在服务器上执行shell脚本时,它会在后台启动java进程并出来。当我通过sshexec任务从Jenkins运行shell脚本时,它会运行,但它永远不会出现,Jenkins Build会等待。

稍后当我将timeout属性添加到sshexec时,它会在给定的毫秒数后超时,但Jenkins构建显示为失败。如何让sshexec任务从shell脚本执行中干净利落地出来?

这是我的ssheexec任务

<sshexec host="${deploy.host}" username="${deploy.username}"  password="${deploy.password}" command=". /etc/profile; cd ${deploy.path}; sh start.sh i1" trust="true" timeout="10000" />

start.sh 文件如下:

nohup java -Xms512m -Xmx1024m -cp calculation.jar com.tes.StartCalculation $1 &

echo $! > calculation-$1-java.pid

1 个答案:

答案 0 :(得分:1)

看来,执行ssh的作业并非完全守护进程。在许多情况下,从nohup开始是不够的。

查看与其相关的discussion(在不同的背景下)

  

问题是您没有关闭文件描述符   把东西推到后台。 &amp;当你在一个时候很好   shell,但是当你想断开连接并离开时,还不够   进程运行时,您需要从shell断开连接的过程。

....修复以更正脚本。

  

如果有人写了一个没有正确分离的天真服务脚本   从终端,我想第一次知道那个脚本   在部署中使用 - SCM更改将启用重大更改   快速确定。

     

隐藏问题以启用错误代码是错误的   发布到制作 - 如果我知道的第一个,我就不会高兴   关于它是在生产系统管理员抱怨的时候。

如果这是同样的问题,您需要daemonize the script