当我使用Jenkins构建我的项目时,我需要启动一个nodejs服务器进程来托管一些文件,如果我要像下面这样开始这个过程,那么构建会无限地挂起
<target name="staticserver" description="Starts nodejs static server">
<exec executable="node">
<arg value="${env.WORKSPACE}staticserver.js"/>
</exec>
</target>
所以我切换到以下版本,构建运行正常
<target name="staticserver" description="Starts nodejs static server">
<exec executable="cmd.exe">
<arg value="/c"/>
<arg value="start"/>
<arg value="node"/>
<arg value="${env.WORKSPACE}staticserver.js"/>
</exec>
</target>
然而,当Jenkins构建完成时,节点进程仍处于活动状态。
我四处寻找,但似乎每个人杀死子进程的问题都是Jenkins杀死所有人......
我应该如何启动节点进程,以便Jenkins可以在构建完成后正确杀死它? 我是从错误的角度接近这个问题,需要从不同的方向看待它吗?
感谢。
答案 0 :(得分:0)
我找到了解决问题的两种方法,第一种是添加杀死所有node.exe的目标,如果不需要在同一台机器上运行其他节点实例,则不会出现问题
<target name="stopnode" description="Stops all instances of node">
<exec executable="taskkill">
<arg value="/IM"/>
<arg value="node.exe"/>
</exec>
</target>
第二种方法是添加一个在访问服务器时重置的计时器,并在服务器暂时无法访问时关闭服务器。
global.timer = {
count: 5,
reset: function() {
this.count = 5;
}
};
function countdown() {
global.timer.count = global.timer.count - 1;
//console.log(global.timer.count);
if (global.timer.count <= 0) {
clearInterval(cd);
process.exit(0);
}
}
var cd = setInterval(function () { countdown() }, 1000);
jsfiddle只是为了好玩:http://jsfiddle.net/jeJkm/