选择未标记最新的最新ECR图像

时间:2020-10-22 04:08:20

标签: bash jq aws-cli

我需要能够在没有标签最新的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。

感谢帮助实现这一目标。

1 个答案:

答案 0 :(得分:1)

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

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

搜索aws cli命令的输出并搜索最新的字符串。找到此字符串时,跳至输出的下一行并打印

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

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

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

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。如果找不到最新标签,则打印第一个标签。