Как получить последнюю версию артефакта NuGet с помощью JFrog Artifactory REST API на основе свойства?

Система управления артефактами — JFrog Artifactory Pro X.

В соответствии с REST API JFrog в моей работе Jenkins с REST API я пытаюсь получить последнюю версию артефакта определенного пакета, в данном случае это идентификатор «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»?

почему есть два _any ? опечатка?

error404 11.04.2019 19:14

@ 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».

Chris 12.04.2019 10:01
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
0
2
1 249
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно документу Artifactory/api/versions: поиск артефактов с последним значением в свойстве «версия». Будут возвращены только артефакты с явно определенным свойством «версия».

В вашем случае у вас не установлено свойство «версия» (я думаю), а только «nuget.version», который извлекает метаданные из пакетов nuget во время индексации.

Просто установите свойство «версия» в пакете, и вызов REST будет работать.

Вы можете автоматизировать это, используя пользовательский плагин в артефакте, который установит свойство «версия» после того, как пакет будет написан.

Другим решением без необходимости использования пользовательского плагина было бы использование собственного API-интерфейса nuget, например, с API-интерфейсом nuget v3:

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: «Метаданные, содержащиеся в объекте результата поиска, взяты из последней версии пакета. Каждый элемент в массиве версий является объектом JSON " )

Спасибо за ответ! Я только что проверил: элемент пакета Nuget имеет свойство «версия» в разделе «Информация NuPkg», которое установлено. В разделе «Общие» свойство «версия» недоступно. Не уверен, что будет правильным?!

Chris 09.05.2019 15:56

Тот, о котором я говорю, находится на вкладке «Свойства». Там вы найдете все метаданные nuget (доступные на вкладке «Информация NuPkg» с префиксом «nuget». (например, nuget.version, nuget.dependency, nuget.authors,...). Здесь, если вы добавите «версию», свойство вызов будет работать.

jroquelaure 09.05.2019 16:01

Спасибо за разъяснения! Я мог бы проверить, развернув пакет с дополнительным свойством «версия», и получил действительный ответ JSON с URL-адресом в моем вопросе. Для тех, кто хочет развернуть с дополнительными свойствами, просто взгляните на этот вопрос SO: stackoverflow.com/a/49221228/1001717. Обратите внимание, что у вас должно быть разрешение «Аннотировать».

Chris 04.06.2019 09:41

Другие вопросы по теме