求用于Azure Pipeline的PowerShell脚本:保留ACR最新10个镜像
Azure Pipeline内联PowerShell脚本:ACR自动保留最新10个镜像标签
脚本说明
- 适配Azure Pipeline的AZ CLI任务,以内联PowerShell脚本形式运行
- 自动清理指定ACR仓库中旧镜像标签,仅保留最新10个(可自定义数量)
- 支持排除特定标签(如
latest)避免误删
完整脚本
# 配置参数 $acrName = "your-acr-name" # 替换为你的ACR实例名称 $repositoryName = "your-repo-name" # 替换为目标镜像仓库名称 $keepCount = 10 # 需保留的最新镜像标签数量 $excludeTags = @("latest") # 无需删除的标签列表(可选) # 获取所有镜像标签,按创建时间降序排序 $tags = az acr repository show-tags --name $acrName --repository $repositoryName --orderby time_desc --output json | ConvertFrom-Json # 过滤排除标签后,筛选出需要删除的旧标签 $tagsToDelete = $tags | Where-Object { $_ -notin $excludeTags } | Select-Object -Skip $keepCount if ($tagsToDelete.Count -eq 0) { Write-Host "无需执行删除操作:当前符合条件的标签数量≤$keepCount" exit 0 } Write-Host "将删除以下$($tagsToDelete.Count)个镜像标签:" $tagsToDelete | ForEach-Object { Write-Host "- $_" } # 批量删除目标标签 foreach ($tag in $tagsToDelete) { Write-Host "正在删除标签: $tag" az acr repository delete --name $acrName --repository $repositoryName --tag $tag --yes if ($LASTEXITCODE -ne 0) { Write-Warning "删除标签$tag失败,错误码:$LASTEXITCODE" } } Write-Host "清理完成,已保留最新$keepCount个镜像标签"
使用步骤
- 在Azure Pipeline中添加Azure CLI任务,关联拥有ACR操作权限的服务连接
- 任务类型选择PowerShell,将上述脚本粘贴至内联脚本输入框
- 替换脚本中的
$acrName和$repositoryName为你的实际资源名称 - 按需调整
$keepCount修改保留数量,或更新$excludeTags添加需保护的标签 - 确保服务主体拥有ACR的
AcrDelete和AcrPull权限
注意事项
- 脚本会永久删除镜像标签,建议先在测试环境验证逻辑
- 若镜像标签总数≤保留数量,脚本将直接退出,不执行任何删除操作
- 执行
az acr repository delete时,若目标镜像manifest无其他标签关联,会同时删除底层镜像层
内容的提问来源于stack exchange,提问作者OoO
相关产品推荐
相关产品推荐

