jq - 查找特定次要分支的最新容器镜像标签

时间:2021-05-07 12:26:30

标签: json jq text-processing

最近,我正在编写一个小脚本,以了解在我的 docker-compose 中定义的较新图像是否在注册表中可用。

要获取所有可用标签的列表,我使用 skopeo 并获得以下输出。

{
  "Repository": "registry.example:8080/my-namespace/my-app",
  "Tags": [
    "84.3200.0-alpha-1",
    "84.3200.0-alpha-2",
    "84.3200.0-alpha-3",
    "84.3200.1",
    "84.3300.0-alpha-1",
    "84.3300.0-alpha-2",
    "84.3300.1",
    "84.3400.0-alpha-1",
    "84.3400.0-alpha-2",
    "84.3400.0-alpha-3",
    "84.3400.0-alpha-4",
    "84.3400.1",
    "84.3400.2",
    "84.3500.0-alpha-1",
    "84.3500.0-alpha-2",
    "84.3500.1",
    "84.3500.2",
    "84.3502.1",
    "84.3600.1",
    "84.3600.2",
    "84.3600.3",
    "84.3600.4",
    "latest"
  ]
}

现在,在我的 docker-compose.yaml 中当前定义了以下图像标签:image: registry.example:8080/my-namespace/my-app:84.3400.0-alpha-1。使用 jq 我想对 json 进行排序和过滤以获取最新版本的 84.3400 分支。哪个是标签 84.3400.2

还有更新的标签可用,例如分支 84.3500.x84.3600.x。除非有人手动将 docker-compose.yaml 中的标记更新为此分支之一,否则不应使用此图像来检测最新版本。

有没有人知道如何对 json 进行排序和过滤以获取最新版本的分支?

1 个答案:

答案 0 :(得分:1)

您可以将基本版本作为变量传递并对其进行排序。例如。为您提供的输入

jq --arg base "84.3400" '.Tags | map(select(startswith($base))) | sort | last'

这有效,如果您的版本在问题中被命名为 as。代替 last,您也可以只执行 reverse | first