提问人:AnjK 提问时间:11/18/2023 更新时间:11/18/2023 访问量:44
用于清理的 ACR 任务,避免特定标记出现语法错误
ACR task for cleanup avoiding specific tags giving syntax error
问:
我正在尝试创建将运行 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 *
答:
1赞
AnjK
11/20/2023
#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 任务时,需要额外的反斜杠。Terraform 要求 cmd 使用另一个 .acr purge
\
\
通过命令行,可以创建使用如下命令的 ACR 任务:acr purge
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$).*$
评论
-bash: !latest: event not found
指示尝试处理命令的 shell 的历史记录功能。使用 转义代码或参数中的任何字符。祝你好运。bash
!
\!
az acr run --cmd 'acr purge --filter '\''^dev\\/(repo1|repo2|repo_3)$:^((?!latest).)*$'\'' --ago 5d --keep 4 --untagged' -r acrregistry1 /dev/null