gitlab-ci - 允许作业运行“重启”命令而不会导致失败
问题描述
我们有大量的跑步者在我们的一个 Gitlab CI/CD 管道中运行大量的作业。
这些跑步者中的每一个都有一个concurrency
of 1
,并且它们是executor
type 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
.
谁能想到一个聪明的方法来解决这个问题?
解决方案
最后,我不得不在屏幕上运行它:
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
。如果有人对此有任何想法,请在此处添加评论。
推荐阅读
- java - 我怎样才能得到对象而不是地图地址?
- flutter - 如何使用flutter_bloc包从api获取数据
- ubuntu-18.04 - 无法使用带有错误消息的 apt 或 apt-get
- python - 在 Keras 中同时增强 X,y
- reactjs - Integration Xero in ReactJS application causes errors
- reactjs - 将 React 应用程序注入 Chrome 扩展程序时,无法在“历史记录”上执行“pushState”
- php - 在默认 var/www/html 文件夹内的实时服务器中,如果没有 index.php,codeigniter 路由将无法正常工作
- apache - 是否有任何功能可以更改网站的 URL 路径?
- django - 在 Google Cloud Platform 中部署 Django Channels App
- html - 如何停止 HTML 到 JSP 页面重定向的 cookie 操作?