Система управления артефактами — 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»?
@ 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».
Согласно документу 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», которое установлено. В разделе «Общие» свойство «версия» недоступно. Не уверен, что будет правильным?!
Тот, о котором я говорю, находится на вкладке «Свойства». Там вы найдете все метаданные nuget (доступные на вкладке «Информация NuPkg» с префиксом «nuget». (например, nuget.version, nuget.dependency, nuget.authors,...). Здесь, если вы добавите «версию», свойство вызов будет работать.
Спасибо за разъяснения! Я мог бы проверить, развернув пакет с дополнительным свойством «версия», и получил действительный ответ JSON с URL-адресом в моем вопросе. Для тех, кто хочет развернуть с дополнительными свойствами, просто взгляните на этот вопрос SO: stackoverflow.com/a/49221228/1001717. Обратите внимание, что у вас должно быть разрешение «Аннотировать».
почему есть два _any ? опечатка?