Azure容器注册表-删除除2之外的所有图像

时间:2019-08-20 18:52:14

标签: azure azure-container-registry

我要删除Azure容器注册表中除最后两个以外的所有图像。我一直在寻找这样做的脚本,但是我只发现删除X天之前的图像。对于我的情况,这是不可能的,因为有时创建的图像很多,而有时仅创建一个。

有人有主意吗?

3 个答案:

答案 0 :(得分:3)

将$ skipLastTags和$ registryName的值修改为您选择的值,然后在powershell上运行此脚本。

注意:请确认您的本地系统上已安装az cli。

$registryName = 'registryName'
$doNotDeleteTags = ''
$skipLastTags = 4

$repoArray = (az acr repository list --name $registryName --output json | ConvertFrom-Json)

foreach ($repo in $repoArray)
{
    $tagsArray = (az acr repository show-tags --name $registryName --repository $repo --orderby time_asc --output json | ConvertFrom-Json ) | Select-Object -SkipLast $skipLastTags

    foreach($tag in $tagsArray)
    {

        if ($donotdeletetags -contains $tag)
        {
            Write-Output ("This tag is not deleted $tag")
        }
        else
        {
            az acr repository delete --name $registryName --image $repo":"$tag --yes
        }
 
    }
}

答案 1 :(得分:0)

我现在无法对其进行测试,但是这个小PowerShell脚本应该可以工作:

$acrName = 'YourACRName'

$repo = az acr repository list --name $acrName
$repo | Convertfrom-json | Foreach-Object {
    $imageName = $_
    (az acr repository show-tags -n $acrName --repository $_ | 
        convertfrom-json |) Select-Object -SkipLast 2 | Foreach-Object {
        az acr repository delete -n $acrName --image "$imageName:$_"
        }
}

它将检索每个存储库的所有标记,跳过最后两个标记,然后遍历每个标记并将其删除。

请先在某种测试环境中对其进行测试。

答案 2 :(得分:0)

如果您需要在bash中使用它。

变量delete_from基于1索引,即,如果您指定值1,则将删除所有图像。 值3保留2张最新图像。

#!/bin/bash -e

acr='your_acr'
repos=('repo1' 'repo2' 'repoN')
delete_from=3

for repo in "${repos[@]}"; do
    tags_to_delete=$(echo $(az acr repository show-tags -n ${acr} --repository ${repo} --orderby time_desc --output tsv) | cut -d ' ' -f${delete_from}-) 
    for tag_to_delete in ${tags_to_delete}; do
        az acr repository delete --yes -n ${acr} --image ${repo}:${tag_to_delete}
    done
done