首页 > 解决方案 > 允许作业运行“重启”命令而不会导致失败

问题描述

我们有大量的跑步者在我们的一个 Gitlab CI/CD 管道中运行大量的作业。

这些跑步者中的每一个都有一个concurrencyof 1,并且它们是executortype shell

[编辑] 这些运行器是使用 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.

谁能想到一个聪明的方法来解决这个问题?

标签: gitlab-ci

解决方案


最后,我不得不在屏幕上运行它:

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。如果有人对此有任何想法,请在此处添加评论。


推荐阅读