【问题标题】:How to get latest NuGet artifact version with JFrog Artifactory REST API, based on property?如何基于属性使用 JFrog Artifactory REST API 获取最新的 NuGet 工件版本?
【发布时间】:2019-05-09 21:51:22
【问题描述】:

工件管理系统是JFrog Artifactory Pro X

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

根据属性“nuget.id”,获取最新版本的正确 URL 是什么?

【问题讨论】:

  • 为什么有两个 _any ?错字?
  • @error404 根据jfrog.com/confluence/display/RTF3X/…,用法是GET /api/versions/{repo}/{path}?[listFiles=0/1]&[<property key>=<property value>]&[<property key>=<property value>],其中´{repo}:指定要搜索的存储库或替换为“_any”以搜索所有存储库´和´{path }:指定要搜索的路径或替换为“_any”以搜索所有路径。所以我用'_any'替换了这两个变量。

标签: jenkins nuget artifactory devops


【解决方案1】:

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

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

只需在包上设置一个“版本”属性,REST 调用就会起作用。

您可以通过使用工件中的用户插件自动执行此操作,该插件将在编写包后设置“版本”属性。

另一个不需要用户插件的解决方案是使用本机 nuget api,例如使用 nuget v3 api:

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

将为您提供最新版本的 json 响应(以及 doc https://docs.microsoft.com/fr-fr/nuget/api/search-query-service-resource 中提到的其他版本的列表:“搜索结果对象中包含的元数据取自最新的包版本。版本中的每个项目数组是一个 JSON 对象 ")

【讨论】:

  • 感谢您的回复!我刚刚检查过:Nuget 包元素在“NuPkg 信息”部分下有一个属性“版本”,该属性已设置。在“常规”部分下,没有“版本”属性可用。不确定,哪个是正确的?!
  • 我指的是在“属性”选项卡下。在那里你会找到所有 nuget 元数据(在 NuPkg 信息选项卡中可用),带有“nuget.”前缀(例如 nuget.version、nuget.dependency、nuget.authors...)。如果您添加“版本”属性调用将起作用。
  • 感谢您的解释!我可以通过部署具有附加“版本”属性的包进行检查,并在我的问题中使用 URL 获得有效的 JSON 响应。对于那些想要使用其他属性进行部署的人,只需看看这个 SO 问题:stackoverflow.com/a/49221228/1001717。注意要有“注释”权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多