如何通过Azure Pipelines自动删除Azure Blob存储中过期X时间的旧文件?
用Azure Pipelines自动清理Azure Blob存储过期文件的方案
前提准备
- 给Azure Pipelines配置有权访问目标Blob存储的服务连接(用Azure Resource Manager类型的服务连接即可)
- 确定要清理的容器名称,以及文件过期时长X(比如30天)
方案一:用Azure CLI任务批量清理
在Pipeline的YAML文件里添加这个任务,通过Azure CLI命令批量删除过期文件:
- task: AzureCLI@2 displayName: '清理过期Blob' inputs: azureSubscription: '你的服务连接名称' scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | # 替换成你的实际参数 STORAGE_ACCOUNT_NAME="你的存储账户名" CONTAINER_NAME="目标容器名" EXPIRE_DAYS=30 # 这里改成你的X天 # 计算过期时间点(当前时间往前推X天) EXPIRE_DATE=$(date -d "-$EXPIRE_DAYS days" +%Y-%m-%dT%H:%MZ) # 批量删除最后修改时间早于过期点的Blob az storage blob delete-batch \ --account-name $STORAGE_ACCOUNT_NAME \ --source $CONTAINER_NAME \ --if-unmodified-since $EXPIRE_DATE \ --auth-mode login
如果是Windows环境执行,把scriptType改成pscore,日期计算换成PowerShell语法:
$EXPIRE_DAYS = 30 $EXPIRE_DATE = (Get-Date).AddDays(-$EXPIRE_DAYS).ToUniversalTime().ToString("yyyy-MM-ddTHH:mmZ")
方案二:用PowerShell任务实现
习惯PowerShell的话,可以用Azure PowerShell模块来完成清理:
- task: AzurePowerShell@5 displayName: 'PowerShell清理过期Blob' inputs: azureSubscription: '你的服务连接名称' ScriptType: 'InlineScript' Inline: | # 替换参数 $storageAccountName = "你的存储账户名" $containerName = "目标容器名" $expireDays = 30 $storageAccount = Get-AzStorageAccount -Name $storageAccountName $ctx = $storageAccount.Context $expireDate = (Get-Date).AddDays(-$expireDays) # 筛选出过期的Blob $blobs = Get-AzStorageBlob -Container $containerName -Context $ctx | Where-Object { $_.LastModified -lt $expireDate } # 执行删除 if ($blobs.Count -gt 0) { $blobs | Remove-AzStorageBlob -Context $ctx Write-Host "已删除 $($blobs.Count) 个过期文件" } else { Write-Host "没有找到需要清理的过期文件" } azurePowerShellVersion: 'LatestVersion'
设置定时自动执行
让Pipeline定期运行清理任务,在YAML里添加定时触发器:
schedules: - cron: '0 0 * * *' # 每天凌晨0点执行,可根据需求修改cron表达式 displayName: 每日凌晨清理过期Blob branches: include: - main # 替换成你的分支名 always: true # 即使没有代码变更也执行
注意事项
- 测试阶段先别直接删除,用
az storage blob list或者Get-AzStorageBlob命令预览要删除的文件,避免误删 - 服务连接必须有存储账户的Storage Blob Data Contributor权限,不然没法操作Blob
- 如果Blob数量特别多,建议分批次删除,防止任务超时
内容的提问来源于stack exchange,提问作者nishanth gmk
相关产品推荐
相关产品推荐

