【问题标题】:Problem in using cURL and REST API of TFS to install extension使用 TFS 的 cURL 和 REST API 安装扩展时出现问题
【发布时间】:2021-04-02 00:06:03
【问题描述】:

我正在尝试使用 TFS 2018 的 REST API 在 cURL 的帮助下在我们的服务器上安装扩展。这个过程必须每天重复,这就是为什么我想使用带有 cURL 的命令来运行它。

到目前为止,我想出了如何使用以下命令获取服务器上所有已安装扩展的列表。这告诉我连接和身份验证运行良好。

curl -u {username}:{PAT} -d "" -X GET http://{instance}/{collection}/_apis/extensionmanagement/installedextensions?api-version=4.1-preview.1

要安装扩展,我从 microsoft doc 中阅读了此信息:https://docs.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
}

【问题讨论】:

  • 您好朋友,下面的答案是否解决了您的问题?如果我的回复有帮助或给出了正确的方向。感谢marking it as an answer,这也将帮助社区中的其他人。
  • @WalterQian-MSFT 我在没有指定版本的情况下尝试了该命令,但它仍然返回相同的错误。
  • 请尝试在命令中使用 installedextensionsbyname 而不是 installedextensions。另请检查我的答案中的结果截图。
  • 你好朋友,安装扩展前请先使用另一个GET API。我更新了我的答案。如果您有任何困惑,请随时与我联系。

标签: curl tfs azure-devops azure-devops-rest-api azure-devops-extensions


【解决方案1】:

Install Extension By Name Rest API 用于安装预安装的扩展。您需要在本地添加扩展。请参考Install extensions for on-premises servers的文档。

请尝试以下步骤:

1.打开浏览器的开发者工具(F12),点击安装按钮。您可以在网址中找到发布者名称和扩展名。 2.检查开发者工具中的网络选项卡(F12)。您可以找到类似的 REST API

GET http://{instance}/{collection}/_gallery/items?itemName={publisher name}.{extension name}&install=true&installContext={Some context}.

installContext不会改变,你只需要在每次安装新扩展的时候在这里改变发布者名和扩展名即可: 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 Services 可以直接使用 Install Extension By Name API。

【讨论】:

  • 好的,我明白了。我对 Web 应用程序开发了解不多,但如果 api installedextensionsbyname 仅在安装以前安装在服务器上的扩展时有用,那么这超出了我的目的。有没有办法第一次使用 API 安装扩展。无论如何,非常感谢你调查它。
  • 安装扩展时,请先在我的回答中使用 GET API。然后,您可以在本地扩展中找到它们。您只需要在第一时间获取 installContext。只能使用 api installedextensionsbyname 来安装本地扩展中存在的扩展。
  • 我试过你的 get 命令。返回的错误说,“install”和“installContext”命令写不正确或找不到。
  • html格式的输出显示“在控制器'Microsoft.VisualStudio.Services.Gallery.Web.GalleryController'上找不到公共操作方法'items'。”
  • 如果您仍然遇到此问题,能否与我分享您的 get 命令以进行进一步的故障排除?
猜你喜欢
  • 2018-11-23
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 2016-05-03
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多