You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins构建完成后如何保持启动的node.exe子进程持续运行

问题描述

需要实现Jenkins构建任务结束后,仍保持启动的Node进程持续运行。当前构建步骤调用的restart_node.bat脚本内容如下:

Taskkill /IM node.exe /F
cd C:\node
call npm start

构建执行时可以成功终止旧进程并启动新的node.exe进程,但构建任务完成后,新启动的进程会被自动杀死。
运行截图

问题原因

Jenkins默认开启进程树清理机制,构建任务结束后会自动销毁本次构建过程中启动的所有子进程,因此你启动的node.exe进程会被连带杀死。

解决方案

方案1:临时禁用进程树清理(快速生效,适合测试场景)

在调用重启脚本前设置指定环境变量,告诉Jenkins不要清理对应进程:

  • 自由风格项目直接修改构建步骤的执行命令:
set BUILD_ID=dontKillMe
call C:\你的脚本存放路径\restart_node.bat
  • Pipeline流水线项目用withEnv包裹执行步骤:
pipeline {
    agent any
    stages {
        stage('重启Node服务') {
            steps {
                withEnv(['BUILD_ID=dontKillMe']) {
                    bat 'call C:\\你的脚本存放路径\\restart_node.bat'
                }
            }
        }
    }
}

如果你使用的是2.289及以上版本的Jenkins,上述配置不生效时,可以把BUILD_ID替换为JENKINS_NODE_COOKIE。

方案2:优化启动脚本(配合方案1使用更稳定)

修改你的restart_node.bat,用start /B后台启动npm进程,避免进程绑定Jenkins的执行控制台:

Taskkill /IM node.exe /F
cd C:\node
start /B npm start

方案3:注册为Windows系统服务(生产环境推荐,最稳定)

将Node应用注册为系统服务,进程由Windows服务管理器托管,完全脱离Jenkins进程树,不受构建清理机制影响,还支持开机自启、异常自动重启能力:

  1. 下载轻量级Windows服务注册工具nssm,放到系统PATH目录下
  2. 执行命令注册服务(示例服务名为NodeAppService,可自定义):
nssm install NodeAppService "C:\node\node.exe" "C:\node\你的项目启动入口文件.js"
nssm set NodeAppService AppDirectory C:\node
  1. 修改restart_node.bat直接操作系统服务即可:
net stop NodeAppService
net start NodeAppService

内容的提问来源于stack exchange,提问作者golu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:27:02