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

如何让GitHub Action判定Next.js网站部署任务已成功完成?

解决GitHub Action SSH启动Next.js超时的问题

这个问题的核心原因很明确:npm run start 是前台阻塞式运行的命令,启动后会一直占用终端输出日志,不会主动退出。而GitHub Action的SSH执行步骤会默认等待命令执行完成才会判定成功,但你的Next.js服务启动后会持续运行,永远不会主动结束,所以到了Action的默认超时时间就会触发超时错误,哪怕服务已经正常启动了。

下面是几个靠谱的解决方案,按推荐程度排序:

方案1:用PM2管理Node.js进程(最推荐)

PM2是专门的Node.js进程管理器,不仅能把服务后台化,还能自动重启崩溃的进程、监控日志,非常适合生产环境。步骤如下:

  1. 先在服务器上安装PM2(如果还没装的话,第一次部署时执行即可)
  2. 用PM2启动你的Next.js项目
  3. 验证PM2是否成功启动了进程

在GitHub Action的SSH步骤里执行这些命令:

# 全局安装PM2(仅第一次需要,后续部署可以跳过,或者加上判断避免重复安装)
if ! command -v pm2 &> /dev/null; then
  npm install -g pm2
fi

# 用PM2启动Next.js,--name参数给进程起个好记的名字,方便后续管理
pm2 start npm --name "my-nextjs-site" -- start

# 验证进程是否存在,确保启动成功
pm2 list | grep -q "my-nextjs-site"

这样,pm2 start命令会立即退出,不会阻塞终端,然后grep检查进程列表,找到对应的进程就返回0,GitHub Action就会判定这一步执行成功。

方案2:用nohup让服务后台运行(轻量方案)

如果不想用PM2,也可以用系统自带的nohup命令把启动命令放到后台,同时捕获启动日志来验证服务是否正常启动:

# 用nohup后台启动服务,把日志输出到nextjs.log
nohup npm run start > nextjs.log 2>&1 &

# 等待几秒,给服务足够的启动时间(根据你的项目大小调整,比如5-10秒)
sleep 8

# 检查日志里是否出现了预期的启动成功提示
if grep -q "ready - started server on http://localhost:4000" nextjs.log; then
  echo "Next.js服务启动成功"
  exit 0
else
  echo "服务启动失败,日志内容:"
  cat nextjs.log
  exit 1
fi

这里的关键是:

  • nohup ... & 把进程放到后台运行,命令立即返回
  • sleep 等待服务完成启动(不能省,不然日志里还没出现成功提示)
  • grep 检查日志中的成功标识,确保服务真的启动了,而不是后台进程崩溃了

方案3:修改GitHub Action的超时时间(不推荐)

你也可以直接修改SSH步骤的超时时间,比如把超时设置成更长的时间,但这只是治标不治本——因为npm run start永远不会退出,哪怕你设置成1小时,到时间还是会报错,而且浪费Action的执行时间,所以不推荐这个方法。如果一定要试,在SSH action里加timeout-minutes参数:

- name: SSH to server and start Next.js
  uses: appleboy/ssh-action@v0.1.5
  with:
    host: ${{ secrets.SERVER_HOST }}
    username: ${{ secrets.SERVER_USER }}
    key: ${{ secrets.SERVER_SSH_KEY }}
    command: npm run start
    timeout-minutes: 60 # 设置更长的超时时间

但还是强烈建议用前两个方案,从根本上解决问题。

最后提醒一下:不管用哪个方案,最好在部署前先停止旧的服务(比如用pm2 stop my-nextjs-site或者pkill -f "npm run start"),避免端口冲突导致新服务启动失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:38:11