我想自动清理所有未使用的码头资源,以便为下一个ci作业释放更多的磁盘空间。因此,我创建了一个cron作业,每5分钟清理一次未使用的码头资源。我的码头清理脚本是
sudo docker system prune --all --volumes --force但是,这个cron作业可能会错误地删除图像,这些图像将在以后使用。例如,在停靠器构建时删除中间容器映像并导致错误unknown parent image ID。
定期清理似乎不是一个好做法。对我来说,更好的实践是在gitlab运行程序执行ci作业之前/之后执行docker清理脚本。
为了实现这一点,我可以在pre_build_script中设置清理脚本,或者在gitlab运行程序中设置post_build_script。但是,执行构建脚本的ci环境(容器映像)随ci作业的不同而不同。清理脚本可能与每个操作系统不兼容。pre_build_script和post_build_script不适合我的情况。
是否有任何方法来检测gitlab runner何时开始运行ci作业?或者有什么更好的解决方案来为每一个ci工作清理未使用的码头资源?
发布于 2022-08-02 09:23:33
作为Runner服务运行码头清理容器
我为每个CI作业运行一个码头清理容器作为CI服务。我的CI服务是在CI作业开始时创建的,并清理未使用的码头资源。问题解决了!
Config.toml
...
[[runners]]
...
[runners.docker]
...
[[runners.docker.services]]
name = "registry.gitlab.com/example/docker-cleanup:latest"
...码头工人-清理码头文件
FROM docker:stable
CMD ["docker", "system", "prune", "--volumes", "--all", "--force"]最好在filter中使用docker system prune,以避免错误删除图像
https://stackoverflow.com/questions/73192573
复制相似问题