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

如何在GitLab Runner后台运行vite preview并结束流水线?

解决GitLab流水线因vite preview进程无法结束的问题

核心问题原因

直接在命令后加&没用的根源是:GitLab Runner会跟踪当前shell启动的所有子进程,哪怕进程后台运行,只要还属于当前shell的子进程组,Runner就会一直等待进程结束才会终止流水线。必须让vite preview完全脱离当前shell的控制。

具体解决方案

方案1:修改npm脚本,用nohup+输出重定向+后台运行

把你的npm run serve对应的脚本改成:

./node_modules/.bin/tsc && vite build && nohup ./node_modules/.bin/vite preview --host 0.0.0.0 --port 4173 > /dev/null 2>&1 &
  • nohup:让进程脱离当前会话,即使启动它的shell退出,进程也能继续运行
  • > /dev/null 2>&1:把标准输出和错误输出都定向到/dev/null,避免生成nohup.out文件,同时防止输出阻塞
  • &:将进程放到后台运行

方案2:用disown移除进程的作业关联

如果不想用nohup,可以在后台启动后加上disown命令,把进程从当前shell的作业列表中移除,让Runner不再跟踪它:

./node_modules/.bin/tsc && vite build && ./node_modules/.bin/vite preview --host 0.0.0.0 --port 4173 > /dev/null 2>&1 & disown

方案3:直接在GitLab CI配置中拆分命令

如果不想修改package.json,也可以在.gitlab-ci.yml的preview阶段直接写命令:

preview:
  stage: preview
  script:
    - npm install
    - ./node_modules/.bin/tsc
    - vite build
    - nohup ./node_modules/.bin/vite preview --host 0.0.0.0 --port 4173 > /dev/null 2>&1 &

验证方式

修改后重新触发流水线,你会发现preview阶段执行完成后,流水线会正常结束,同时vite preview服务保持运行。

内容的提问来源于stack exchange,提问作者Фёдор

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:40:56