我需要在 Artifactory 中获取特定NuGet软件包的最新版本。
我使用以下JFrog CLI命令来接收所有版本的列表(后来是--limit=1
),包括使用jq进行JSON解析:
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中是不正确的。
如何获得按版本号排序的结果?
答案 0 :(得分:1)
您可以使用jq对版本号字符串进行排序。
如果字符串是“原始”字符串,每行一个,则可以使用以下jq程序:
def parse:
sub("alpha"; "alpha.")
| sub("beta"; "beta.")
| sub("gamma"; "gamma.")
| [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
进行读取时才需要-n选项。)