0

我正在尝试获取我的私人 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'

这给了我输出,令我惊讶的是重复“最新”标签但省略“ 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

我做错了什么,我该如何解决这个问题?

4

1 回答 1

1

我能够重现您的观察并认为这是一个错误。

--flatten似乎正确枚举但错误地将tags列表中的最后一个值作为每个条目的值返回。

就我而言,如果标签是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'
于 2020-07-15T16:12:32.550 回答