【问题标题】:How to kill child processes spawned from jenkins after a build?如何在构建后杀死从詹金斯产生的子进程?
【发布时间】:2013-04-27 05:58:03
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: node.js ant jenkins cmd


    【解决方案1】:

    我找到了两种解决问题的方法第一种是添加一个杀死所有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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多