如何基于 属性 使用 JFrog Artifactory REST API 获取最新的 NuGet 工件版本?

How to get latest NuGet artifact version with JFrog Artifactory REST API, based on property?

工件管理系统是JFrog Artifactory Pro X

根据 REST API of JFrog 在我的 Jenkins 工作中使用 REST API 我尝试获取特定包的最新工件版本,在这种情况下,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"
}

我尝试关注 URL https://artifactory.myserver.net/artifactory/api/versions/_any/_any?nuget.id=MyLib,但得到了

{
  "errors" : [ {
    "status" : 404,
    "message" : "Not Found"
  } ]
}

什么是正确的URL获取最新版本,基于属性"nuget.id"?

根据文档 artifactory/api/versions:在 "version" 属性 中搜索具有最新值的工件。仅返回明确定义了 "version" 属性 的工件。

在您的情况下,您没有设置 "version" 属性(我猜),但只有 "nuget.version",它是在索引期间从 nuget 包中提取的元数据。

只需在程序包上设置 "version" 属性 即可进行 REST 调用。

您可以使用 artifactory 中的用户插件自动执行此操作,该插件将在编写包后设置 "version" 属性。

另一种不需要用户插件的解决方案是使用原生 nuget api 例如 nuget v3 api :

https://artifactory.myserver.net/artifactory/api/nuget/v3/projectx-nuget/query?q= MyLib&prerelease=false

会给你一个 json 最新版本的响应(以及文档 https://docs.microsoft.com/fr-fr/nuget/api/search-query-service-resource 中提到的其他版本的列表:"The metadata contained in the search result object is taken from the latest package version. Each item in the versions array is a JSON object ")