我们有很多跑步者在我们的Gitlab CI / CD管道之一中运行大量工作。
每个跑步者的concurrency
为1
,他们的类型为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
。
有人能想到一个聪明的办法吗?
答案 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
竞争。如果有人对此有任何想法,请在此处添加评论。