acr purge
命令 来清理 ACR 注册表的 ACR 任务。
这是用于 ACR 清理 3 个存储库的命令,除了那些带有标签
latest
的存储库:
az acr run --cmd 'acr purge --filter '^dev\\/(repo1|repo2|repo_3)$:^((?!latest).)*$' --ago 5d --keep 4 --untagged --dry-run' -c /dev/null -r acrregistry1
但是该命令返回错误:
-bash: !latest: event not found
然后我尝试更改命令以考虑带有任何标签的图像:
az acr run --cmd 'acr purge --filter '^dev\\/(repo1|repo2|repo_3)$:.*' --ago 5d --keep 4 --untagged --dry-run' -c /dev/null -r acrregistry1
再次返回错误:
-bash: syntax error near unexpected token `('
这是我缺少 bash 一些非常基本的东西的问题吗?
或者它是否与
az
相关,不支持标签正则表达式中的负向前瞻?
azure-cli的安装版本:
2.53.1 *
谢谢@Imran,您提出的解决方案在从
\
中删除一个 dev\\/
使其成为 dev\/
后效果很好。
az acr run --cmd 'acr purge --filter '\''^dev\/(repo1|repo2|repo_3)$:^((?!latest).)*$'\'' --ago 5d --keep 4 --untagged --dry-run' -c /dev/null -r acrregistry1
当使用 Terraform 创建使用
acr purge
命令的 ACR 任务时,需要一个额外的反斜杠。 Terraform 要求使用另一个 \
来转义 cmd 的 \
。
通过命令行,您可以创建使用
acr purge
命令的 ACR 任务,如下所示:
az acr task create --cmd 'acr purge --filter '\''^dev\/(repo1|repo2|repo_3)$:^((?!latest).)*$'\'' --ago 5d --keep 4 --untagged --dry-run' -c /dev/null -r acrregistry1 --name testacrtask4
注意: 尝试解码结果 JSON 中找到的 encodedStep 参数的值。验证 cmd 是否正确呈现。
您可以按如下方式运行任务并验证命令是否按预期工作:
az acr task run -r acrregistry1 --name testacrtask4
如果您的目标是完全私有的 ACR(可通过私有端点访问),则需要按照此处提到的步骤(使用 ACR 推送角色到任务的系统管理身份)才能使其工作。
注:
正则表达式
^((?!latest).)*$
匹配不包含latest
的字符串。这意味着,当在
acr purge
命令中使用此正则表达式标记标签时,它不会删除带有 latest
、dev-latest
和 latest-dev
的图像。如果您只想避免完全等于 latest
的标签,请改用此正则表达式:^((?!^latest$).)*$
或 ^(?!^latest$).*$
。