我需要在Artifactory中获取特定NuGet软件包的最新版本。我使用以下JFrog CLI命令来接收所有版本的列表(后来使用),包括使用jq进行JSON解析:--limit=1
jfrog rt s myRepo/Path/ --props "nuget.id=MyLib" --sort-by=name --sort-order=desc | jq -M -r ".[] | .props.\"nuget.version\" | .[]"
上面的示例将产生原始字符串输出,如下所示:
1.2.3.101
1.2.3.103
1.2.3.95
1.2.3.99
1.2.3.99-beta10
1.2.3.99-beta9
我的目标是获取按版本排序的输出:
1.2.3.95
1.2.3.99
1.2.3.99-beta9
1.2.3.99-beta10
1.2.3.101
1.2.3.103
不幸的是我不能使用,--sort-by=created
因为它可能与版本排序不同。即使我不使用--sort-by
选项也不起作用。版本号也可以包含字母,例如“ -beta”。
在Artifactory TreeView中,它是正确的,但在CLI中是不正确的。
如何获得按版本号排序的结果?
您可以使用jq对版本号字符串进行排序。
如果字符串是“原始”字符串,每行一个,则可以使用以下jq程序:
def parse:
sub("alpha"; "alpha.")
| sub("beta"; "beta.")
| sub("gamma"; "gamma.")
| sub("prerelease"; "prerelease.")
| sub("debug"); "debug.")
| [splits("[-.]")]
| map(tonumber? // .) ;
[inputs]
| sort_by(parse)[]
这个jq程序可以这样运行:
jq -nrR -f program.jq versions.txt
使用样本版本号,将产生:
1.2.3.95
1.2.3.99
1.2.3.99-beta9
1.2.3.99-beta10
1.2.3.101
1.2.3.103
就您而言,通过修改程序以parse
按照上面显示的方式使用,无需再次调用jq就可以实现结果。jq程序的主要部分可能看起来像这样:
map(.props["nuget.version"]) | sort_by(parse)[]
(当然,仅在使用inputs
read时才需要-n选项。)
如果(如注释中所示)是您想要的最高版本号,则只需将最终版本更改[]
为[-1]
:
... | sort_by(parse)[-1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句