问题:由于 GitLab CI 没有提供内置方法来处理手动取消作业时的清理任务,因此有必要创建一个 Python 脚本来处理作业超时或取消时的清理进程手动。为了实现这一点,脚本需要持续监控作业的状态。
通常,您会使用
after_script
进行清理,但不幸的是,对于某些情况(例如取消的作业),不支持此功能,尽管此功能已被请求并计划了相当长一段时间(请参阅:#10158)。不过,它似乎已经非常接近完成,并将在 GitLab 17.0(下个月的版本)中发布。请参阅重大变更通知:
关键字将针对已取消的作业运行after_script
CI/CD 关键字用于在作业的主要after_script
部分之后运行附加命令。这通常用于清理作业使用的环境或其他资源。对于许多用户来说,如果取消作业,script
命令不会运行,这是意外且不受欢迎的。在 17.0 中,该关键字将更新为在作业取消后也运行命令。确保使用 after_script 关键字的 CI/CD 配置也能够处理已取消作业的运行。after_script
同时,更普遍的是,您可以通过为您的项目设置一个 webhook 并监听 job events 来“监听”作业状态更改,其中将包括任何作业状态更改以及运行者信息(如果需要) 。这可以让您实现所需的清理,而不是 GitLab 对此的全面支持。