使Nodejs脚本在gitlab CI中在后台运行

时间:2018-07-20 08:17:45

标签: node.js background continuous-integration gitlab

我们的开发项目通过命令npm run serve启动,可以在后台模式下运行它吗?我尝试在字符串末尾使用nohup和&。它可以在Shell中正常工作,但是当它在Gitlab上由CI启动时,管道状态始终处于“运行”状态,因为npm输出会永久显示在屏幕上

2 个答案:

答案 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进程为活动状态