我在 CI/CD 管道中面临着自托管构建代理的重大问题,我需要一个全面的解决方案。详情如下:
我有 6 个构建代理。 我管理着 30-40 个管道中的服务。
在构建过程中,由于 Docker 镜像和缓存层的累积,我的自托管构建代理的磁盘已满。 我们已经在使用临时基础镜像来最小化 Docker 镜像的大小。
我需要一个解决方案,既可以保留缓存层以加快构建过程,又可以确保磁盘不会变满。
我尝试了多种解决方案来解决该问题,但没有一个完全令人满意:
Docker System Prune -a
命令:
bash: |
docker rmi img/address/image_name:$(Build.BuildId)
displayName: "Docker Delete"
请提供解决以下问题的解决方案:
保持构建速度:确保构建过程保持高效和快速。
有效的磁盘空间管理:实施有效管理磁盘空间的策略。
保留缓存层:找到一种方法来保留必要的缓存层,同时释放磁盘空间。
自动化和维护:利用脚本或工具自动执行清理过程,无需人工干预。
您能提供满足这些要求的解决方案吗?
您正在使用自托管代理,您应该在本地维护资源,而不是在管道内维护资源。
作为一种可能的解决方法,您可以创建一个单独的管道来删除所有未使用的映像和已停止的容器,并配置定期触发的计划。
,而不是使用删除所有未使用数据的
Docker System Prune -a
docker image prune -a --filter "until=24h"
命令,该命令将删除 24 小时前创建的所有未使用的图像。docker container prune --filter "until=24h"
命令,该命令将删除 24 小时前创建的所有已停止容器下面是一个示例 yaml 供您参考。
# YAML file in the main branch
trigger:
- none
schedules:
- cron: '0 0 * * *'
displayName: Daily midnight build
branches:
include:
- main
jobs:
- deployment: VMDeploy
displayName: Deploy to VMs
environment:
name: VMenv
resourceType: virtualMachine
strategy:
runOnce:
deploy:
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
docker image prune -a --filter "until=24h" -f
docker container prune --filter "until=24h" -f