Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么从ACR中删除了多个图像?_Bash_Command Line Interface_Azure Container Registry_Az - Fatal编程技术网

Bash 为什么从ACR中删除了多个图像?

Bash 为什么从ACR中删除了多个图像?,bash,command-line-interface,azure-container-registry,az,Bash,Command Line Interface,Azure Container Registry,Az,我正在尝试编写一个清理脚本。脚本应该删除旧的ACR图像。下面是在Jenkins中运行的sh命令: ACRS=( mydevacr ) for ACR in "\${ACRS[@]}" do readarray -t repos < <(az acr repository list --name \$ACR | jq -cr '.[]') for imageName in "\${repos[@]}"; do readarray -t tags <

我正在尝试编写一个清理脚本。脚本应该删除旧的ACR图像。下面是在Jenkins中运行的sh命令:

ACRS=( mydevacr )
for ACR in "\${ACRS[@]}"
do
    readarray -t repos < <(az acr repository list --name \$ACR | jq -cr '.[]')
    for imageName in "\${repos[@]}"; do
        readarray -t tags < <(az acr repository show-tags -n \$ACR --repository \$imageName --orderby time_desc | jq -cr '.[]')
        for tag in "\${tags[@]:30}"
        do
            az acr repository delete -n \$ACR --image "\$imageName:\$tag" --yes
        done
    done
done
最后一个az命令
az acr repository delete-n mydevacr--image frontend dev:604--yes
在仅指定1时删除59个图像

这怎么可能

我在这里“匿名”了一些东西,以避免透露太多我们的设置


而且,由于这是在Jenkins管道中运行的,所以我不得不转义$signs,这样Groovy就不会试图处理它们。

正如我看到的脚本一样,您只需在存储库中列出图像,然后无条件地删除它们

+ for tag in "${tags[@]:30}"
+ az acr repository delete -n mydevacr --image frontend-dev:606 --yes
WARNING: This operation will delete the manifest 'sha256:44355fdb6becffc44d2cc6a4f3d00d9d7963bf00fbe4375e' and all the following images: 'frontend-dev:606'
+ for tag in "${tags[@]:30}"
+ az acr repository delete -n mydevacr --image frontend-dev:605 --yes
WARNING: This operation will delete the manifest 'sha256:8e48ac6c8b51458b4846c10b01260d74cbb11ac3c7f52c5' and all the following images: 'frontend-dev:605'
+ for tag in "${tags[@]:30}"
+ az acr repository delete -n mydevacr --image frontend-dev:604 --yes
WARNING: This operation will delete the manifest 'sha256:2b443ff1da9604b4b4a3b1831095375b6fd72c19c39e2e93' 
and all the following images: 'frontend-dev:525', 'frontend-dev:526', 'frontend-dev:527', 
'frontend-dev:528', 'frontend-dev:529', 'frontend-dev:530', 'frontend-dev:531', 'frontend-dev:533', 
'frontend-dev:534', 'frontend-dev:535', 'frontend-dev:536', 'frontend-dev:537', 'frontend-dev:538', 
'frontend-dev:539', 'frontend-dev:540', 'frontend-dev:542', 'frontend-dev:545', 'frontend-dev:547', 
'frontend-dev:549', 'frontend-dev:550', 'frontend-dev:551', 'frontend-dev:555', 'frontend-dev:556', 
'frontend-dev:557', 'frontend-dev:558', 'frontend-dev:559', 'frontend-dev:560', 'frontend-dev:561', 
'frontend-dev:562', 'frontend-dev:563', 'frontend-dev:565', 'frontend-dev:566', 'frontend-dev:569', 
'frontend-dev:571', 'frontend-dev:572', 'frontend-dev:574', 'frontend-dev:575', 'frontend-dev:576', 
'frontend-dev:577', 'frontend-dev:579', 'frontend-dev:580', 'frontend-dev:581', 'frontend-dev:582', 
'frontend-dev:583', 'frontend-dev:584', 'frontend-dev:585', 'frontend-dev:586', 'frontend-dev:590', 
'frontend-dev:591', 'frontend-dev:592', 'frontend-dev:593', 'frontend-dev:594', 'frontend-dev:595', 
'frontend-dev:596', 'frontend-dev:597', 'frontend-dev:599', 'frontend-dev:600', 'frontend-dev:602', 
'frontend-dev:604'
我认为您需要做的是在脚本中添加条件。例如,您需要删除存储库中最早的五个图像,您可以通过以下命令获取图像:

az acr repository show-tags -n \$ACR --repository \$imageName --orderby time_asc --top 5
注意:时间是一个增加的东西,所以你需要按时间对图像进行排序。这个命令只向您显示五个图像。您可以根据需要获取更多图像


此外,该命令还将删除您使用的图像标记引用的清单以及引用同一清单的所有其他标记。因此,当清单全部删除时,该命令将不会再次删除清单。我想这是你遇到的情况。因此,我建议您只需取消标记图像,而不是直接删除图像。

谢谢Charles。但是,我想删除除最后10。。。。我知道现在我有30个,但我会把它改成10个。谢谢你解释为什么删除了超过1个。我接受了你的回答。