停止gitlab ci中已启动的后台服务(phantomjs)

停止gitlab ci中已启动的后台服务(phantomjs),gitlab,gitlab-ci,Gitlab,Gitlab Ci,作为我工作的一部分,我开始使用带有特定参数的phantomjs 这是在自定义gitlab/gitlab ci服务器上运行的,我目前没有使用容器,我想这会简化这一点 我开始像这样的幻影: - "timeout 300 phantomjs --ssl-protocol=any --ignore-ssl-errors=true vendor/jcalderonzumba/gastonjs/src/Client/main.js 8510 1024 768 2>&1 >> /tm

作为我工作的一部分,我开始使用带有特定参数的phantomjs

这是在自定义gitlab/gitlab ci服务器上运行的,我目前没有使用容器,我想这会简化这一点

我开始像这样的幻影:

- "timeout 300 phantomjs --ssl-protocol=any --ignore-ssl-errors=true vendor/jcalderonzumba/gastonjs/src/Client/main.js 8510 1024 768 2>&1 >> /tmp/gastonjs.log &"
然后我运行behat测试,然后再次停止该过程:

- "pkill -f 'src/Client/main.js' || true"
问题是,当behat测试失败时,它就不会执行PKLL,测试运行会被困在phantomjs上等待完成。我已经添加了超时300,但这意味着在失败后我目前仍在等待2分钟左右,当测试速度足够慢时,它最终会在测试仍在运行时停止

我还没有找到一种方法来运行某种运行后/清理命令,这种命令在出现故障时也会运行


有更好的方法吗?我可以以gitlab ci不关心它是否仍在运行的方式启动phantomjs吗?也许吧

TL;博士;-使用
&
在新线程中生成进程,但是您必须确保在成功和失败构建中终止该进程

我用这个(加上评论):


试试
-9
信号:

- "pkill -9 -f 'src/Client/main.js' || true"

您也可以尝试其他signlas,您可以找到一个列表,正如所暗示的,基本上我的问题不是无法终止进程,而是运行我的测试脚本失败时,它在该点停止,导致死锁

我已经在做一些与@Rufinus中的例子非常相似的事情,但它对我来说根本不起作用。可能有一些不同的东西,比如运行测试的不同方式,或者在before_脚本中启动它,这对我来说不是一个选项

我确实找到了一种方法让它对我有效,那就是阻止我的测试运行程序停止执行进一步的任务。我用一个“set+e”成功地做到了这一点,然后存储了退出代码(这是我以前尝试过的,但没有成功)

这是我工作中的相关部分:

# Set option to prevent gitlab from stopping if behat fails.
- set +e
- "phantomjs --ssl-protocol=any --ignore-ssl-errors=true vendor/jcalderonzumba/gastonjs/src/Client/main.js 8510 1024 768 2>&1 >> /dev/null &"
# Store the exit code.
- "./vendor/bin/behat -f progress --stop-on-failure; export TEST_BEHAT=${PIPESTATUS[0]}"
- "pkill -f 'src/Client/main.js' || true"
# Exit the build
- if [ $TEST_BEHAT -eq 0 ]; then exit 0; else exit 1; fi

感谢您的回复,但不知怎么的,这对我不起作用,在phantomjs进程运行之前,它永远不会启动after脚本。我试过nohup,没有改变任何事情。只要我通过手动方式完成该进程,它就会继续运行,然后在脚本之后而不是之前运行。您可以使用nohup启动后台服务吗?只需使用
&
在新线程中生成该进程,有关详细信息,请参阅example@Berdir我扩展了我的例子。看一看。这对我有用,你也应该有用。谢谢。我必须做更多的工作来让它为我工作,通过设置set+e来防止它过早中止。请参阅我的答案,在那里我发布了最终对我有效的解决方案。接受这一点,但给予你帮助的赏金。问题不是PKLL不起作用,它工作得很好。但是gitlab没有执行它。
# Set option to prevent gitlab from stopping if behat fails.
- set +e
- "phantomjs --ssl-protocol=any --ignore-ssl-errors=true vendor/jcalderonzumba/gastonjs/src/Client/main.js 8510 1024 768 2>&1 >> /dev/null &"
# Store the exit code.
- "./vendor/bin/behat -f progress --stop-on-failure; export TEST_BEHAT=${PIPESTATUS[0]}"
- "pkill -f 'src/Client/main.js' || true"
# Exit the build
- if [ $TEST_BEHAT -eq 0 ]; then exit 0; else exit 1; fi