0

我正在编写一个自定义任务来将文档发布到 Azure API 门户。我希望任务的 UI 列出所选订阅和资源组的可用 API 管理服务。根据这个问题,这在技术上应该可以通过在我的数据源绑定中指定 endpointUrl 来实现。我试图在 Azure RM Web 部署任务中的数据源之后为端点建模,但我似乎无法让它工作。在我的任务中,我可以选择我的订阅,选择我的资源组,但我的自定义数据源的 pickList 始终为空。我没有在我的任务定义中进行任何明确的身份验证,所以我不确定这是否有某种相关性。以下是我的任务的inputs和:dataSourceBindings

"inputs": [
    {
        "name": "ConnectedServiceName",
        "type": "connectedService:AzureRM",
        "label": "Azure RM Subscription",
        "defaultValue": "",
        "required": true,
        "helpMarkDown": "Select the Azure Resource Manager subscription for the deployment."
    },
    {
        "name": "ResourceGroupName",
        "label": "Resource Group",
        "type": "pickList",
        "required": true,
        "helpMarkDown": "Select resource group which contains the API portal"
    },
    {
        "name": "ApiPortalName",
        "type": "pickList",
        "label": "API Portals",
        "defaultValue": "",
        "required": true,
        "properties": {
            "EditableOptions": "True"
        },            
        "helpMarkDown": "Select the Azure Resource Manager subscription for the deployment."
    }
],
"dataSourceBindings": [
    {
        "target": "ResourceGroupName",
        "endpointId": "$(ConnectedServiceName)",
        "dataSourceName": "AzureResourceGroups"
    },
    {
      "name": "ApiPortals",
      "target": "ApiPortalName",
      "endpointId": "$(ConnectedServiceName)",
      "endpointUrl": "https://management.azure.com/subscriptions/$(endpoint.subscriptionId)/resourceGroups/$(ResourceGroupName)/providers/Microsoft.ApiManagement/service?api-version=2016-07-07",
      "resultSelector": "jsonpath:$.value[*].name",
      "parameters": {
          "ResourceGroupName": "$(ResourceGroupName)"
      }
    }

更新

在 Chrome 中检查控制台后,我收到一条错误消息,指出我无法调用不以{{endpoint.url}}. 我在根目录更新了我的任务,{{endpoint.url}}我确实看到它试图进行我期望的 API 调用:

    {
      "name": "ApiPortals",
      "target": "ApiPortalName",
      "endpointId": "$(ConnectedServiceName)",
      "endpointUrl": "{{endpoint.url}}/subscriptions/$(endpoint.subscriptionId)/resourceGroups/$(ResourceGroupName)/providers/Microsoft.ApiManagement/service?api-version=2016-07-07",
      "resultSelector": "jsonpath:$.value[*].name",
      "parameters": {
          "ResourceGroupName": "$(ResourceGroupName)"
      }
    }

现在的问题是,由于某种原因,Azure RM 终结点类型已endpoint.url解决https://management.core.windows.net。Azure RM API 托管在https://management.azure.com. 结果,我收到了 403,因为我的端点凭据适用于 Azure RM 服务主体,而不是 Azure 经典管理 API。

我也用这些信息更新了我的Github 问题。我相信这是一个错误,endpoint.urlAzure RM 服务端点应该解析为https://management.azure.com. 如果查看 Azure RM 服务终结点中定义的数据源,它们都引用托管在https://managemnet.azure.comnot的 API https://management.core.windows.net

4

1 回答 1

1

检查自定义构建任务 JSON 架构,您不能在 task.json 中对“dataSourceBindings”使用“endpointUrl”和“resultSelector”。用于在 vss-extension.json 文件中定义自定义服务端点。而且您还错过了“ApiPortals”的“dataSourceName”。

如果您想通过 URL 调用 Rest API 并使用 task.json 中的选择器,您可以使用“sourceDefinitions”而不是“dataSourceBindings”。有关详细信息,请参阅我在此问题中的回答。但是,“sourceDefinitions”目前仅支持基本身份验证,这意味着这也不适用于您的场景。

因此,您需要创建一个自定义服务端点来实现您现在想要的功能。

于 2017-01-18T02:46:51.127 回答