我试图创建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 *
1条答案
按热度按时间5ssjco0h1#
感谢@Imran,您提出的解决方案在从
dev\\/
中删除一个\
以使其成为dev\/
之后运行良好。字符串
当Terraform用于创建使用
acr purge
命令的ACR任务时,需要一个额外的反斜杠。Terraform要求使用另一个\
对cmd的\
进行转义。通过命令行,您可以创建一个ACR任务,使用
acr purge
命令如下:型
注意:尝试解码结果JSON中的encodedStep参数值,验证cmd是否正确渲染。
您可以按以下方式运行该任务,并验证命令是否按预期运行:
型
如果您的目标是完全私有的ACR(可通过私有端点访问),则需要遵循此处提到的步骤(将ACR推送角色用于任务的系统管理身份)才能使其工作。