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

Jenkins部署Express应用如何停止旧进程替换为最新版本

问题修复方案

你当前流水线存在两个核心缺陷:一是启动新服务前未清理残留的旧版本Node进程,导致端口被占用新服务无法启动;二是直接前台执行node index.js会阻塞流水线执行,进程生命周期和Jenkins任务绑定,异常中断时极易出现进程残留。
按以下逻辑修改流水线即可实现版本平滑替换,保证用户访问到的始终是最新版本:

  • 部署环节先清理旧进程:优先通过上次启动时记录的PID精准终止旧服务,再增加端口占用兜底查杀,确保端口完全释放
  • 后台启动新服务:使用nohup让服务脱离Jenkins shell会话运行,将进程PID写入固定文件,日志输出到指定路径方便排查
  • 可选增加启动校验:服务启动后延迟几秒探测本地端口,确认服务启动成功,避免静默失败

修改后的完整Jenkinsfile

注意把代码里的3000替换成你Express项目实际监听的端口:

pipeline {
    agent any
    tools {
       nodejs 'NodeJS'
    }
    stages {
        stage('Build') {
            steps {
               sh 'npm install'
               echo "install dependencies."
            }
        }
        stage('Deploying') {
            steps {
               sh '''
               // 优先根据记录的PID终止旧进程
               if [ -f app.pid ]; then
                   kill $(cat app.pid) || true
                   rm -f app.pid
               fi
               // 兜底:强制终止占用服务端口的残留进程,避免端口占用
               fuser -k 3000/tcp || true
               // 等待1秒让端口完全释放
               sleep 1
               // 后台启动新版本服务,记录PID,输出日志到固定文件
               nohup node index.js > app.log 2>&1 &
               echo $! > app.pid
               // 可选:启动后校验服务是否正常
               sleep 2
               curl -s http://localhost:3000 > /dev/null && echo "express-app started successfully" || echo "Warning: service start failed, please check app.log"
               '''
               echo "run express-app ..."
            }
        }
    }
}

小提示:如果执行时提示fuser: command not found,把fuser那行替换为lsof -ti:3000 | xargs kill -9 || true即可,效果完全一致。

额外优化建议(可选)

如果你的部署环境长期固定,更稳妥的方式是把Express应用配置为systemd系统服务:

  • 在服务器上写好对应的service配置文件,指定工作目录、启动命令、运行用户
  • 流水线Deploy阶段不需要手动管理进程,直接执行systemctl restart your-express-service即可
  • 系统服务会自动完成进程保活、日志收集,比手动维护PID文件稳定性高很多

注意:不要用pkill node这类全局杀Node进程的命令,会误杀同机器上部署的其他Node服务,造成不必要的故障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:57:22