Gitlab持续集成npm后台流程

尼克拉斯

我有一个gitlab ci设置,我想在其中启动本地npm服务器以在后台进行测试。.gitlab-ci.yml就像:

stages:
  - setup
  - build
  - test

cache:
  paths:
    - venv/
    - node_modules/

setup_nvm:
  stage: setup
  script:
    - "echo installing npm and phantomJS via nvm"
    - "git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`"
    - ". ~/.nvm/nvm.sh"
    - "nvm install 5.0"
    - "nvm use 5.0"
    - "npm install"
    - "nohup npm run dev &" # HERE I TRY TO RUN THE SERVER IN THE BACKGROUND

setup_python:
  stage: setup
  script:
    - "echo installing python dependencies in virtual environment"
    - "[ ! -d venv ] && virtualenv -p python3 venv"
    - "source venv/bin/activate"
    - "pip3 install -r requirements.txt"

build_multilang:
  stage: build
  script:
    - "[ ! -d tu9onlinekurstest ] && make -f tools/makefiles/multilang"

do_tests:
  stage: test
  script:
    - "cd src/test"
    - "python -m unittest"

但是,该作业会暂停并且setup_python永远不会开始并且pending永远处于状态我认为作业将并行执行(根据gitlabRunner文档)。您是否有使用gitlabRunner运行后台任务的经验?

胖子

根据Tomasz Maczukin关于GitLab相关问题的报道

我认为最好的解决方案是使用某些服务管理器(systemd,runit,upstart,sysv-该系统上存在的任何内容)。

在服务器上,您应该准备配置文件以启动服务。然后在CI工作中,例如systemctl start tomcat该命令应在调用后立即退出,并且由服务管理器(在Runner的作用域之外)启动该过程。

以Runner开头的流程(即使您添加了nohup&在结尾)也标记有流程组ID。作业完成后,Runner正在向整个进程组发送终止信号。因此,任何直接从CI作业启动的过程都将在作业结束时终止。使用服务管理器,您不会在Runner的工作范围内启动流程。您唯一通知管理员使用准备好的配置开始过程的方法:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章