Проблема с использованием cURL и REST API TFS для установки расширения

Я пытаюсь использовать 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
}

Привет, друг, ответ ниже решил твой вопрос? Если мой ответ помог или дал правильное направление. Благодарю за то, что пометил это как ответ, что также поможет другим в сообществе.

Walter 25.12.2020 09:20

@WalterQian-MSFT Я попробовал команду, не указав версию, но она все равно возвращает ту же ошибку.

Vincent 29.12.2020 12:42

Пожалуйста, попробуйте использовать в команде installextensionsbyname вместо installextensions. Пожалуйста, также проверьте скриншот результата в моем ответе.

Walter 30.12.2020 08:38

Привет, друг, перед установкой расширений используйте другой GET API. Я обновил свой ответ. Не стесняйтесь обращаться ко мне, если у вас есть путаница.

Walter 30.12.2020 10:21
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
4
421
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Установить расширение по имени Rest 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. В любом случае, большое спасибо, что заглянули.

Vincent 30.12.2020 10:44

Пожалуйста, сначала используйте GET API в моем ответе при установке расширений. Затем вы можете найти их в локальных расширениях. Вам просто нужно получить installContext в первый раз. Вы можете использовать только установленные расширения API по имени для установки расширений, которые существуют в локальных расширениях.

Walter 30.12.2020 10:52

Я попробовал вашу команду get. Возвращенная ошибка говорит о том, что команда «установить» и «installContext» написаны неправильно или не могут быть найдены.

Vincent 30.12.2020 11:36

Вывод в формате html показывает: «Метод открытого действия« элементы »не найден на контроллере« Microsoft.VisualStudio.Services.Gallery.Web.GalleryControll‌​er ».

Vincent 30.12.2020 11:44

Не могли бы вы поделиться со мной своей командой get для дальнейшего устранения неполадок, если у вас все еще есть эта проблема?

Walter 31.12.2020 11:28

Это команда, которую я использовал, URL-адрес напрямую копируется из «URL запроса» консоли разработчика браузера: curl -u {пользователь}: {токен} -X GETtfs:8080/tfs/_gallery/…

Vincent 05.01.2021 11:46

Попробуйте следующие обходные пути: 1. Добавьте двойные кавычки вокруг URL-адреса запроса: curl -u {пользователь}: {токен} -X GET «URL» 2. Скопируйте URL-адрес и вставьте его в браузер. Я с нетерпением жду вашего ответа.

Walter 06.01.2021 07:51

Я только что попробовал 2 варианта: 1. После добавления кавычек ответ, направленный на выходной файл, представляет собой файл html, но, очевидно, расширение не установлено в фоновом режиме. 2. Когда я вставляю URL-адрес в браузер и вхожу, он переходит на страницу, где мне необходимо подтвердить установку расширения.

Vincent 08.01.2021 15:10

Расширение будет добавлено к локальным расширениям. Теперь вы можете использовать API установки расширения по имени для установки этого расширения.

Walter 09.01.2021 04:06

На этот раз это работает! Большое спасибо за вашу помощь в решении проблемы!

Vincent 12.01.2021 14:23

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