0

当我使用 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 可以在构建完成后正确终止它?我是否从错误的角度处理这个问题,需要从不同的方向看待它?

谢谢。

4

1 回答 1

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/

于 2013-05-03T19:54:49.013 回答