2016-07-28 104 views
2

我有一個gitlab ci的設置,我想要在本地啓動一個本地npm服務器進行測試。我.gitlab-ci.yml是這樣的:Gitlab持續集成npm後臺進程

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永遠。我認爲這些工作會並行執行(根據gitlab runner docs)。你有使用gitlab runner運行後臺任務的經驗嗎?

+1

喬布斯沒有設計這一點,看看['services'](http://docs.gitlab.com/ce/ ci/docker/using_docker_images.html#how-to-use-other-images-as-services) – Martin

+0

@mgansler看起來像提問者沒有使用docker。所以'服務'不能解決問題。 – Fairy

回答

1

Tomasz Maczukina related GitLab issue

我認爲最好的解決辦法是使用一些服務經理 (systemd,runit,暴發戶,SYSV - 無論是目前該系統上)。

在服務器上,您應該準備配置文件以啓動 服務。然後在CI工作中,你會做例如systemctl start tomcat。這個 命令預計會在調用之後退出,它的服務 管理員(Runner範圍之外)負責啓動該進程。

即使您在最後添加nohup&時也使用Runner啓動進程,但會標記進程組標識。工作完成時Runner爲 向整個進程組發送kill信號。因此,直接從CI作業開始的任何進程 將在作業結束時終止。使用服務 經理,您不是在Runner的工作環境中啓動該流程。 你只通知管理員使用開始的方法制備 配置:)

+0

爲什麼這會降低投票率?我知道這並不能解釋爲什麼亞軍在這種情況下掛起,票也沒有 - 但沒有評論的downvote似乎沒有必要。 – steinar

+0

我可以確認設置服務並使用例如systemctl改爲按預期工作。所以,從我+1。 (仍然想知道爲什麼構建掛在這上面,但建立一個服務,而不是使用'&'運行的''在任何情況下推着它在後臺看起來更明智)。 – steinar

+0

@steinar賽跑者掛起的原因是它的第一份工作「setup_nvm」不會退出,即使它是用「nohup ..&」執行的,gitlab runner仍然按照進程組進行監控。 – fatfatson