Artifactory 管理系统是JFrog Artifactory Pro X。
根据REST API of JFrog在我使用 REST API 的 Jenkins 工作中,我尝试获取特定包的最新 Artifactory 版本,在本例中,id 是“MyLib”。
我的 NuGet 包存储在此处:https://artifactory.myserver.net/artifactory/api/storage/projectx-nuget/MyLib/MyLib.1.0.0.nupkg?properties=nuget.version
,这会产生以下 JSON 响应:
{
"properties" : {
"nuget.version" : [ "1.0.0" ]
},
"uri" : "https://artifactory.myserver.net/artifactory/api/storage/projectx-nuget/MyLib/MyLib.1.0.0.nupkg"
}
还具有以下 URL:https://artifactory.myserver.net/artifactory/api/storage/projectx-nuget/MyLib/MyLib.1.0.0.nupkg?properties=nuget.id
我收到有效的 JSON 响应:
{
"properties" : {
"nuget.id" : [ "MyLib" ]
},
"uri" : "https://artifactory.myserver.net/artifactory/api/storage/projectx-nuget/MyLib/MyLib.1.0.0.nupkg"
}
我尝试使用以下网址https://artifactory.myserver.net/artifactory/api/versions/_any/_any?nuget.id=MyLib
,但得到了
{
"errors" : [ {
"status" : 404,
"message" : "Not Found"
} ]
}
根据属性“nuget.id”获取最新版本的正确 URL 是什么?
最佳答案
根据文档artifactory/api/versions:搜索“version”属性中具有最新值的 Artifactory 。仅返回具有明确定义的“版本”属性的 Artifactory 。
在您的情况下,您没有设置“version”属性(我猜),而只有“nuget.version”,它是在索引期间从 nuget 包中提取的元数据。
只需在包上设置“版本”属性,REST 调用就会起作用。
您可以通过使用artifactory中的用户插件来自动执行此操作,该插件将在编写包后设置“版本”属性。
无需用户插件的另一个解决方案是使用 native nuget api,例如 nuget v3 api :
https://artifactory.myserver.net/artifactory/api/nuget/v3/projectx-nuget/query?q= MyLib&prerelease=false
将为您提供最新版本的 json 响应(以及文档 https://learn.microsoft.com/fr-fr/nuget/api/search-query-service-resource 中提到的其他版本的列表:“搜索结果对象中包含的元数据取自最新的包版本。版本中的每个项目数组是一个 JSON 对象 ")
关于jenkins - 如何根据属性使用 JFrog Artifactory REST API 获取最新的 NuGet Artifactory 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55615354/