2016-07-28 12 views
2

バックグラウンドでのテストのためにローカルのnpmサーバを起動するgitlab ciの設定があります。ジョブが停止し、setup_pythonが起動しないと、永遠のステータスpendingにんが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" 

:私の.gitlab-ci.ymlは次のようです。私はジョブが並列に実行されると思っていました(gitlabランナーの文書によると)。 gitlabランナーを使ってバックグラウンドタスクを実行した経験がありますか? a related GitLab issueTomasz Maczukinによると

+1

ジョブズはこれのために設計されていない、[ 'services'](http://docs.gitlab.com/ce/を見てみましょうci/docker/using_docker_images.html#how-to-use-other-images-as-services) – Martin

+0

@mgansler質問者がドッカーを使用していないように見えます。だから、「サービス」は問題を解決しないだろう。 – Fairy

答えて

1

私は最善の解決策は、いくつかのサービスマネージャ (systemdに、値Runit、成り上がり、SysVの - このシステム上に存在しているものは何でも)を使用することだと思います。

サービスを開始するには、設定ファイルを準備する必要があります。その後、CIの仕事では、例えば、 systemctl start tomcat。この コマンドは、呼び出し直後に終了することが予想され、そのプロセスを開始するのは マネージャ(ランナーの範囲外)です。

ランナーで開始されたプロセスは、最後にnohup&を追加しても、プロセスグループIDでマークされます。ジョブが終了するとランナーは プロセスグループ全体にキル信号を送信します。したがって、ジョブ終了時にCIジョブから直接開始された のプロセスは終了します。サービス を使用すると、ランナーの仕事の中でプロセスを開始することはありません。 設定を用意し あなただけ使用してプロセスを開始するために管理者に通知:)

+0

なぜこれが控除されたのですか?私はそれがなぜこのランナーがこの場合にハングアップするのか説明していないと理解していますが、どちらのチケットもありませんが、コメントのないdownvoteは不要です。 – steinar

+0

サービスを設定していることを確認できます。代わりにsystemctlが期待どおりに動作します。だから+1。 (なぜビルドがこれに掛かっているのか知りたいのですが、バックグラウンドでプッシュするために '&'で実行するのではなくサービスを設定することは、どんな場合でももっと賢明に見えます) – steinar

+0

@steinarランナーがハングする理由はその最初のジョブ "setup_nvm"は "nohup .."で実行されても終了しませんが、gitlabランナーはまだ プロセスグループによって監視しています。 – fatfatson

関連する問題