Я пытаюсь использовать REST API TFS 2018 для установки расширения на наш сервер с помощью cURL. Этот процесс необходимо повторять каждый день, и поэтому я хотел бы запустить его с помощью команды с cURL.
Пока я разобрался, как получить список всех установленных расширений на сервере с помощью следующей команды. Это говорит мне, что соединение и аутентификация работают хорошо.
curl -u {username}:{PAT} -d "" -X GET http://{instance}/{collection}/_apis/extensionmanagement/installedextensions?api-version=4.1-preview.1
Чтобы установить расширение, я прочитал эту информацию из документа Microsoft: https://learn.microsoft.com/en-us/rest/api/azure/devops/extensionmanagement/installed%20extensions/install%20extension%20by%20name ?view=vsts-rest-tfs-4.1
Я пытаюсь сформулировать команду для установки расширения, которое я нашел здесь:https://marketplace.visualstudio.com/items?itemName=benjhuser.tfs-extensions-build-tasks.
Команда:
curl -u {username}:{PAT} -H "Content-Type: application/json" -X POST http://{instance}/{collection}/_apis/extensionmanagement/installedextensionsbyname/benjhuser/tfs-extensions-build-tasks/3.0.14?api-version=4.1-preview.1
Я думаю, что издатель, id и версия расширения должны быть правильными, потому что я взял их из этого релизного документа: https://github.com/huserben/TfsExtensions/blob/master/BuildTasks/vss-extension.json .
Ответ говорит, что расширение не существует. Это смущает. Может кто подскажет, в чем может быть проблема? Заранее спасибо.
{
"$id": "1",
"innerException": null,
"message": "The requested extension 'benjhuser.tfs-extensions-build-tasks' doesn't exist.",
"typeName": "Microsoft.VisualStudio.Services.Gallery.WebApi.ExtensionDoesNotExistException, Microsoft.VisualStudio.Services.Gallery.WebApi",
"typeKey": "ExtensionDoesNotExistException",
"errorCode": 0,
"eventId": 3000
}
@WalterQian-MSFT Я попробовал команду, не указав версию, но она все равно возвращает ту же ошибку.
Пожалуйста, попробуйте использовать в команде installextensionsbyname вместо installextensions. Пожалуйста, также проверьте скриншот результата в моем ответе.
Привет, друг, перед установкой расширений используйте другой GET API. Я обновил свой ответ. Не стесняйтесь обращаться ко мне, если у вас есть путаница.
Попробуйте выполнить следующие действия:
1. Откройте инструмент разработчика (F12) браузера и нажмите кнопку «Установить». Вы можете найти имя издателя и имя расширения в URL-адресе. 2. Проверьте вкладку сети в инструменте разработчика (F12). Вы можете найти REST API, например
GET http://{instance}/{collection}/_gallery/items?itemName = {publisher name}.{extension name}&install=true&installContext = {Some context}
.
Контекст установки не изменится, вам нужно только изменить имя издателя и имя расширения здесь каждый раз, когда вы устанавливаете новое расширение: 3.Теперь вы можете найти это расширение в локальных расширениях.
После этого вы можете использовать API «Установить расширение по имени» для установки расширений.
Летние шаги:
1.curl -u {username}:{PAT} -X GET http://{instance}/{collection}/_gallery/items?itemName=benjhuser.tfs-extensions-build-tasks&install=true&installContext = {installContext}
2.curl -u {username}:{PAT} -d "" -H "Content-Type: application/json" -X POST http://{instance}/{collection}/_apis/extensionmanagement/installedextensionsbyname/benjhuser.tfs-extensions-build-tasks?api-version=4.1-preview.1
Вот мой результат:
Кроме того, службы Azure DevOps могут напрямую использовать API установки расширения по имени.
Да я вижу. Я не очень разбираюсь в разработке веб-приложений, но если API с установленными расширениями по имени полезен только для установки расширения, которое ранее было установлено на сервере, то это превосходит мою цель. Есть ли способ установить расширение в первый раз с помощью API. В любом случае, большое спасибо, что заглянули.
Пожалуйста, сначала используйте GET API в моем ответе при установке расширений. Затем вы можете найти их в локальных расширениях. Вам просто нужно получить installContext в первый раз. Вы можете использовать только установленные расширения API по имени для установки расширений, которые существуют в локальных расширениях.
Я попробовал вашу команду get. Возвращенная ошибка говорит о том, что команда «установить» и «installContext» написаны неправильно или не могут быть найдены.
Вывод в формате html показывает: «Метод открытого действия« элементы »не найден на контроллере« Microsoft.VisualStudio.Services.Gallery.Web.GalleryController ».
Не могли бы вы поделиться со мной своей командой get для дальнейшего устранения неполадок, если у вас все еще есть эта проблема?
Это команда, которую я использовал, URL-адрес напрямую копируется из «URL запроса» консоли разработчика браузера: curl -u {пользователь}: {токен} -X GETtfs:8080/tfs/_gallery/…
Попробуйте следующие обходные пути: 1. Добавьте двойные кавычки вокруг URL-адреса запроса: curl -u {пользователь}: {токен} -X GET «URL» 2. Скопируйте URL-адрес и вставьте его в браузер. Я с нетерпением жду вашего ответа.
Я только что попробовал 2 варианта: 1. После добавления кавычек ответ, направленный на выходной файл, представляет собой файл html, но, очевидно, расширение не установлено в фоновом режиме. 2. Когда я вставляю URL-адрес в браузер и вхожу, он переходит на страницу, где мне необходимо подтвердить установку расширения.
Расширение будет добавлено к локальным расширениям. Теперь вы можете использовать API установки расширения по имени для установки этого расширения.
На этот раз это работает! Большое спасибо за вашу помощь в решении проблемы!
Привет, друг, ответ ниже решил твой вопрос? Если мой ответ помог или дал правильное направление. Благодарю за то, что пометил это как ответ, что также поможет другим в сообществе.