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

Azure容器注册表-删除除2之外的所有图像,azure,azure-container-registry,Azure,Azure Container Registry,我想删除Azure容器注册表中除最后两个之外的所有图像。我正在寻找一个脚本,这样做,但我只发现删除图像超过X天。这在我的情况下是不可能的,因为有些日子有很多图片被创建,而有些日子只有一张 有人知道了吗?我现在无法测试它,但这个小PowerShell脚本应该可以工作: $acrName = 'YourACRName' $repo = az acr repository list --name $acrName $repo | Convertfrom-json | Foreach-Object {

我想删除Azure容器注册表中除最后两个之外的所有图像。我正在寻找一个脚本,这样做,但我只发现删除图像超过X天。这在我的情况下是不可能的,因为有些日子有很多图片被创建,而有些日子只有一张


有人知道了吗?

我现在无法测试它,但这个小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 --yes -n $acrName --image "$imageName:$_"
        }
}
它检索每个存储库的所有标记,跳过最后2个,然后遍历每个标记并删除它


请先在某种测试环境中测试它。

如果您在
bash
中需要它

变量
delete\u 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

根据您的选择修改$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
        }
 
    }
}

你应该解释一下a)你所说的“最后两个”是什么意思,b)到目前为止你都试了些什么。你好,马丁,很抱歉我回复晚了。我有6个存储库,所以我还想设置存储库。这可能吗?提前谢谢你有什么想法吗?提前谢谢!你的解决方案真的很有帮助。我有一个条件要添加,应该跳过几个图像,它不应该被删除,即使它是在删除列表中来。例如,我有一些像abc:v1、def:v2、xyz:v4这样的图像,在任何情况下都不应该删除它们,我可以将它们添加为硬代码值,这样系统就不会删除它们。在下面的解决方案中,如果我们可以添加一个条件,跳过给定的一些硬编码图像,这样这些图像就不会被删除。可能在forach块下,我们可以添加一个条件并添加应跳过的图像列表?@RajivMishra感谢您的反馈。我同意这会有帮助,但问题是跳过最后两张图片,所以这将是对这个问题的错误回答。一般来说,您只需在从Json转换而来的
之后添加
| Where对象{$\u-notin$yourListOfImagesToKeep}