我们的开发项目通过命令npm run serve
启动,可以在后台模式下运行它吗?我尝试在字符串末尾使用nohup和&。它可以在Shell中正常工作,但是当它在Gitlab上由CI启动时,管道状态始终处于“运行”状态,因为npm输出会永久显示在屏幕上
答案 0 :(得分:1)
干净的方法是运行一个容器,其运行命令为“ npm run serve”
我不确定通过管道运行非阻塞命令是正确的方法,但是您应该尝试使用“&” “ npm run serve”将以“分离模式”运行命令。
答案 1 :(得分:0)
使用nohup and &
时遇到了同样的问题。它在shell上运行良好,但在Gitlab CI上却无法运行,看来npm start
并未分离。
对我有用的是在bash脚本中调用npm start
并在before_script
钩子上运行它。
test:
stage: test
before_script:
- ./serverstart.sh
script:
- npm test
after_script:
- kill -9 $(ps aux | grep '\snode\s' | awk '{print $2}')
在bash脚本serverstart.sh
# !/bin/bash
# start the server and send the console and error logs on nodeserver.log
npm start > nodeserver.log 2>&1 &
# keep waiting until the server is started
# (in my case wait for mongodb://localhost:27017/app-test to be logged)
while ! grep -q "mongodb://localhost:27017/app-test" nodeserver.log
do
sleep .1
done
echo -e "server has started\n"
exit 0
这使我可以分离npm start
并传递到下一个命令,同时保持npm start
进程为活动状态