使用 GCloud SDK CLI 的 GCR 图像标签列表

GCR Image Tag Listing using GCloud SDK CLI

我正在尝试获取我的私人 GCR 存储库中所有标签的列表。我可以使用“gcloud container images list-tags”命令来做到这一点,如下所示:

gcloud container images list-tags gcr.io/project-id/REPONAME

DIGEST        TAGS          TIMESTAMP
6b5727be962a  0.0.4,latest  2020-06-25T14:14:48
4b8c3f9c6ab7  0.0.3         2020-06-22T08:56:01

但是我需要将列表展平,以便我可以在不同的行中获得标签“0.0.4”和“最新”。我尝试了以下命令。

gcloud container images list-tags gcr.io/project-id/REPONAME --flatten='[].tags'

这给了我输出,令我惊讶的是重复“latest”标签但忽略了“0.0.4

DIGEST        TAGS    TIMESTAMP
6b5727be962a  latest  2020-06-25T14:14:48
6b5727be962a  latest  2020-06-25T14:14:48
4b8c3f9c6ab7  0.0.3   2020-06-22T08:56:01

我做错了什么,我该如何解决?

我可以重现你的观察结果,我认为这是一个错误。

--flatten 似乎正确枚举了 tags 但不正确 returns 列表中的最后一个值作为每个条目的值。

在我的例子中,如果标签是 v1,v2,v3,我得到:

gcloud container images list-tags gcr.io/${PROJECT}/${IMAGE} \
--flatten="[].tags[]" \
--format="value(tags)" \
--filter="digest=${DIGEST}"
v3
v3
v3

我建议您在 Google 的 Cloud SDK

问题跟踪器上提交错误

jq

如果你有jq,也许:

gcloud container images list-tags gcr.io/${PROJECT}/${IMAGE} \
--format=json |\
 jq -r '.[] | .digest as $D | .timestamp.datetime as $T | .tags[]| {"digest":$D,"tag":.,"timestamp":$T}'

或者:

gcloud container images list-tags gcr.io/${PROJECT}/${IMAGE} \
--format=json |\
 jq -r '.[] | .digest as $D | .timestamp.datetime as $T | .tags[]| [$D,.,$T] | @csv'