最近,我正在编写一个小脚本,以了解在我的 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.x
和 84.3600.x
。除非有人手动将 docker-compose.yaml
中的标记更新为此分支之一,否则不应使用此图像来检测最新版本。
有没有人知道如何对 json 进行排序和过滤以获取最新版本的分支?
答案 0 :(得分:1)
您可以将基本版本作为变量传递并对其进行排序。例如。为您提供的输入
jq --arg base "84.3400" '.Tags | map(select(startswith($base))) | sort | last'
这有效,如果您的版本在问题中被命名为 as。代替 last
,您也可以只执行 reverse | first