azure 用于清理的ACR任务,避免特定标记给出语法错误

ssgvzors  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(162)

我试图创建ACR任务,将运行acr purge命令来清理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-tool版本:2.53.1 *

5ssjco0h

5ssjco0h1#

感谢@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任务,使用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推送角色用于任务的系统管理身份)才能使其工作。

相关问题