-2

我正在管理一个 Azure 容器注册表。我已经安排了一个 ACR 清除任务,如果它们超过 7 天,则删除所有图像标记,并排除以v开头的版本化图像, 以便我们可以从清理中跳过某些图像。

例如:如果图像的名称类似于

123abc
v1.2
v1.3
xit5424
v1.4
34xyurc
v2.1

所以它应该删除不以v开头的图像,并应该删除不以v开头的图像。例如,它应该删除下面的图像-

123abc
xit5424
34xyurc

我的脚本是这样的。

PURGE_CMD="acr purge --filter 'Repo1:.' --filter 'ubuntu:.' --ago 7d --untagged --keep 5"

az acr run --cmd "$PURGE_CMD" --registry Myregistry /dev/null

谢谢阿什什

4

1 回答 1

0

请检查以下是否提供了解决方法的想法:

在这里,我尝试使用 delete 命令。

grep -v >>反转匹配的感觉,选择不匹配的行。

grep -o >> 仅显示匹配 PATTERN 的匹配行部分。 grep - 参考

1)尝试获取与模式“v”不匹配的标签

$tagsArray = az acr repository show-tags --name myacr --repository myrepo --orderby time_desc \
    --output tsv | grep -v "v"

如果可能,请使用下面的清除命令检查(未经测试)

PURGE_CMD="acr purge --filter 'Repo1:.' --filter 'ubuntu:.' --ago 7d --filter '$tagsArray' --untagged --keep 5"
az acr run --cmd "$PURGE_CMD" --registry Myregistry /dev/null

(或者)

使用删除命令检查

前任:

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

foreach ($repo in $repositoryList)
{
$tagsArray = az acr repository show-tags --name myacr --repository myrepo --orderby time_desc \
    --output tsv | grep -v "v"

    foreach($tag in $tagsArray)
    {
            az acr repository delete --name $registryName --image $repo":"$tag --yes
        
    }
}

或者,我们可以使用不应该删除的查询获取所有标签,并且可以使用 if else 语句标签。

foreach ($repo in $repositoryList)
    {

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


$doNotDeleteTags=$( az acr repository show-tags  --name $registryName --query "[?contains(name, 'tagname')]" --output tsv)

 #or     $doNotDeleteTags  = az acr repository show-tags --name $registryName --repository $repo --orderby time_asc --output json | ConvertFrom-Json )  -- query "[?starts_with(name,'prefix')].name" 


foreach($tag in $AllTags)
    {

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

参考:

  1. 从 acr-that-doesnt-start-with-a-prefix 获取最新图像
  2. 天蓝色容器注册表删除
  3. 如何从 azure-container-registry 中删除图像
  4. acr-delete-only-old-images-
于 2022-02-28T13:58:11.620 回答