允许作业运行“重新启动”命令而不会导致失败

时间:2019-11-18 11:03:21

标签: gitlab-ci

我们有很多跑步者在我们的Gitlab CI / CD管道之一中运行大量工作。

每个跑步者的concurrency1,他们的类型为executor shell

[EDIT]这些运行程序是使用Amazon Linux 2的AWS EC2实例。

管道中的某些作业完成后,我希望它们运行reboot命令来重新启动运行器。

但是,其中一些工作将是测试。当前,当我运行reboot命令时,作业失败。显然,我可以allow_failure使工作通过,但这意味着我们无法确定实际测试是否通过。

最初,我的测试工作如下:

after_script:
  - sleep 1 && reboot

我还尝试了以下变体:

after_script:
  - sleep 15 && reboot
  - exit 0

after_script:
  - (sleep 15 ; reboot ) &
  - exit 0

我也尝试过运行具有相同内容的shell脚本。

所有这些都会导致相同的问题-ERROR: Job failed (system failure): aborted: terminated

有人能想到一个聪明的办法吗?

1 个答案:

答案 0 :(得分:0)

最后,我必须在屏幕上运行它:

sudo screen -dm bash -c 'sleep 5; shutdown -r now;'

这允许我在Gitlab CI管道中将其作为script元素运行,然后立即执行exit命令,如下所示:

after_script:
  - sudo screen -dm bash -c 'sleep 5; shutdown -r now;'
  - exit 0

这样,如果测试失败-作业将失败。如果测试通过,则作业通过。不需要allow_failure

不幸的是...我不确定如何在artifacts命令之后发生的after_script竞争。如果有人对此有任何想法,请在此处添加评论。