首页 > 解决方案 > 选择未标记为 latest 的最新 ECR 图像

问题描述

我需要能够在没有标签 latest 的 ECR 存储库中选择最新的标记图像。

我正在尝试通过 aws cli 和 bash/jq 来实现这一点

aws ecr describe-images --repository-name <repo-name> --region us-east-1 --output text --query 'sort_by(imageDetails,& imagePushedAt)[*].imageTags[*]' | tr '\t' '\n' | tail -2

这里的imageTag输出是

ajohn-feature-123
bgates-feature-345

该列表可以包含latest作为条目之一。我想跳过该条目并在这里选择第一个不是最新的 imageTag。

感谢实现这一目标的任何帮助。

标签: bashjqaws-cli

解决方案


假设您正在寻找最新的输出中的下一个条目,因为您已经在文本中获得了输出,您可以将输出通过管道传输到 sed 等:

aws ecr .... | sed -n '/latest/{n;p}'

搜索 aws cli 命令的输出并搜索字符串 latest。找到这个字符串时,跳到下一行输出并打印

使用 awk,一个接一个地考虑多个最新标签

aws ecr .... | awk '/latest/ { getline;while ($0=="latest") { getline } print $0 }'

将输出中的行与 latest 进行模式匹配,然后运行一个 while 循环,如果遇到字符串 latest 的另一个实例,则移动到下一行。

aws ecr .... | awk '/latest/&&cnt<1 { getline;while ($0=="latest") { getline } print $0;cnt++ } { arr[NR]=$0 } END { if (cnt=="") { print arr[1] } }'

awk 的另一种变体使用 cnt 确保只打印找到的第一个实例(如果有多个最新标签,其中一个不在另一个之后) 还创建一个包含每一行的数组 arr。如果没有找到最新的标签,则打印第一个标签。


推荐阅读