Azure devops 开发Azure DevOps扩展时无法使用resultSelector

Azure devops 开发Azure DevOps扩展时无法使用resultSelector,azure-devops,mustache,azure-pipelines-release-pipeline,azure-pipelines-release-task,Azure Devops,Mustache,Azure Pipelines Release Pipeline,Azure Pipelines Release Task,我正在为Azure Devops开发一个自定义扩展,该扩展已经包含一个服务端点: "type": "ms.vss-endpoint.service-endpoint-type" 此外,我想创建一个自定义发布工件源: “type”: “ms.vss-releaseartifact.release-artifact-type” 接下来,我当前的工作是使用外部API填充工件源下的字段。我在下面的“resultSelector”和“resultTemplate”中尝试了许多模式,但都没有找到适合我的

我正在为Azure Devops开发一个自定义扩展,该扩展已经包含一个服务端点:

"type": "ms.vss-endpoint.service-endpoint-type"
此外,我想创建一个自定义发布工件源:

“type”: “ms.vss-releaseartifact.release-artifact-type”
接下来,我当前的工作是使用外部API填充工件源下的字段。我在下面的“resultSelector”和“resultTemplate”中尝试了许多模式,但都没有找到适合我的模式

在我的示例中,我希望获取json响应中“builds”下的所有“uri”值,并将它们显示在工件源的“definition”inputDescriptor中。我所有的尝试都导致一个空的组合框,即使我可以看到请求到达所需的API

我要解析到组合框中的json:

{
"builds": [
    {
        "uri": "/build1",
        "lastStarted": "2018-11-07T13:12:42.547+0000"
    },
    {
        "uri": "/build2",
        "lastStarted": "2018-11-09T15:40:30.315+0000"
    },
    {
        "uri": "/build3",
        "lastStarted": "2018-11-12T17:46:24.805+0000"
    }
],
"uri": "https://<server-address>/api/build"
}
这似乎不起作用

这里有更多的信息,以防有所帮助

服务端点的数据源:

"dataSources": [
                {
                  "name": "TestConnection",
                  "endpointUrl": "{{endpoint.url}}/api/plugins",
                  "resourceUrl": "",
                  "resultSelector": "jsonpath:$.values[*]",
                  "headers": [],
                  "authenticationScheme": null
                },
                {
                  "name": "BuildNames",
                  "endpointUrl": "{{endpoint.url}}/api/build",
                  "resultSelector": "jsonpath:$.builds[*].uri"
                },
                {
                  "name": "BuildNumbers",
                  "endpointUrl": "{{endpoint.url}}/api/builds/{{definition}}",
                  "resultSelector": "jsonpath:$.buildsNumbers[*].uri"
                }
]
"inputDescriptors": [
     {
       "id": "connection",
       "name": "Artifactory service",
       "inputMode": "combo",
       "isConfidential": false,
       "hasDynamicValueInformation": true,
       "validation": {
            "isRequired": true,
            "dataType": "string",
            "maxLength": 300
       }
     },
     {
       "id": "definition",
       "name": "definition",
       "description": "Name of the build.",
       "inputMode": "combo",
       "isConfidential": false,
       "dependencyInputIds": [
             "connection"
       ],
       "validation": {
            "isRequired": true,
            "dataType": "string",
            "maxLength": 300
        }
      },
      {
        "id": "buildNumber",
        "name": "Build Number",
        "description": "Number of the build.",
        "inputMode": "combo",
        "isConfidential": false,
        "dependencyInputIds": [
            "connection"
         ],
        "validation": {
             "isRequired": true,
             "dataType": "string",
             "maxLength": 300
        }
       }
],
"dataSourceBindings": [
   {
       "target": "definition",
       "dataSourceName": "BuildNames",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "versions",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "latestVersion",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "artifactDetails",
       "resultTemplate": "{ Name: \"{{version}}\", downloadUrl : \"{{endpoint.url}}\" }"
    },
    {
       "target": "buildNumber",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    }
  ]
 }
{
  "name": "BuildNames",
  "endpointUrl": "{{endpoint.url}}/api/build",
  "resultSelector": "jsonpath:$.builds[*]"
}
{
  "target": "definition",
  "dataSourceName": "BuildNames",
  "resultTemplate": "{ \"Value\" : \"{{{uri}}}\", \"DisplayValue\" : \"{{{uri}}}\" }"
}
工件源:

"dataSources": [
                {
                  "name": "TestConnection",
                  "endpointUrl": "{{endpoint.url}}/api/plugins",
                  "resourceUrl": "",
                  "resultSelector": "jsonpath:$.values[*]",
                  "headers": [],
                  "authenticationScheme": null
                },
                {
                  "name": "BuildNames",
                  "endpointUrl": "{{endpoint.url}}/api/build",
                  "resultSelector": "jsonpath:$.builds[*].uri"
                },
                {
                  "name": "BuildNumbers",
                  "endpointUrl": "{{endpoint.url}}/api/builds/{{definition}}",
                  "resultSelector": "jsonpath:$.buildsNumbers[*].uri"
                }
]
"inputDescriptors": [
     {
       "id": "connection",
       "name": "Artifactory service",
       "inputMode": "combo",
       "isConfidential": false,
       "hasDynamicValueInformation": true,
       "validation": {
            "isRequired": true,
            "dataType": "string",
            "maxLength": 300
       }
     },
     {
       "id": "definition",
       "name": "definition",
       "description": "Name of the build.",
       "inputMode": "combo",
       "isConfidential": false,
       "dependencyInputIds": [
             "connection"
       ],
       "validation": {
            "isRequired": true,
            "dataType": "string",
            "maxLength": 300
        }
      },
      {
        "id": "buildNumber",
        "name": "Build Number",
        "description": "Number of the build.",
        "inputMode": "combo",
        "isConfidential": false,
        "dependencyInputIds": [
            "connection"
         ],
        "validation": {
             "isRequired": true,
             "dataType": "string",
             "maxLength": 300
        }
       }
],
"dataSourceBindings": [
   {
       "target": "definition",
       "dataSourceName": "BuildNames",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "versions",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "latestVersion",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "artifactDetails",
       "resultTemplate": "{ Name: \"{{version}}\", downloadUrl : \"{{endpoint.url}}\" }"
    },
    {
       "target": "buildNumber",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    }
  ]
 }
{
  "name": "BuildNames",
  "endpointUrl": "{{endpoint.url}}/api/build",
  "resultSelector": "jsonpath:$.builds[*]"
}
{
  "target": "definition",
  "dataSourceName": "BuildNames",
  "resultTemplate": "{ \"Value\" : \"{{{uri}}}\", \"DisplayValue\" : \"{{{uri}}}\" }"
}

我们将非常感谢您提供的任何帮助。

本案例的工作组合为:

数据源:

"dataSources": [
                {
                  "name": "TestConnection",
                  "endpointUrl": "{{endpoint.url}}/api/plugins",
                  "resourceUrl": "",
                  "resultSelector": "jsonpath:$.values[*]",
                  "headers": [],
                  "authenticationScheme": null
                },
                {
                  "name": "BuildNames",
                  "endpointUrl": "{{endpoint.url}}/api/build",
                  "resultSelector": "jsonpath:$.builds[*].uri"
                },
                {
                  "name": "BuildNumbers",
                  "endpointUrl": "{{endpoint.url}}/api/builds/{{definition}}",
                  "resultSelector": "jsonpath:$.buildsNumbers[*].uri"
                }
]
"inputDescriptors": [
     {
       "id": "connection",
       "name": "Artifactory service",
       "inputMode": "combo",
       "isConfidential": false,
       "hasDynamicValueInformation": true,
       "validation": {
            "isRequired": true,
            "dataType": "string",
            "maxLength": 300
       }
     },
     {
       "id": "definition",
       "name": "definition",
       "description": "Name of the build.",
       "inputMode": "combo",
       "isConfidential": false,
       "dependencyInputIds": [
             "connection"
       ],
       "validation": {
            "isRequired": true,
            "dataType": "string",
            "maxLength": 300
        }
      },
      {
        "id": "buildNumber",
        "name": "Build Number",
        "description": "Number of the build.",
        "inputMode": "combo",
        "isConfidential": false,
        "dependencyInputIds": [
            "connection"
         ],
        "validation": {
             "isRequired": true,
             "dataType": "string",
             "maxLength": 300
        }
       }
],
"dataSourceBindings": [
   {
       "target": "definition",
       "dataSourceName": "BuildNames",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "versions",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "latestVersion",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "artifactDetails",
       "resultTemplate": "{ Name: \"{{version}}\", downloadUrl : \"{{endpoint.url}}\" }"
    },
    {
       "target": "buildNumber",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    }
  ]
 }
{
  "name": "BuildNames",
  "endpointUrl": "{{endpoint.url}}/api/build",
  "resultSelector": "jsonpath:$.builds[*]"
}
{
  "target": "definition",
  "dataSourceName": "BuildNames",
  "resultTemplate": "{ \"Value\" : \"{{{uri}}}\", \"DisplayValue\" : \"{{{uri}}}\" }"
}
数据源绑定:

"dataSources": [
                {
                  "name": "TestConnection",
                  "endpointUrl": "{{endpoint.url}}/api/plugins",
                  "resourceUrl": "",
                  "resultSelector": "jsonpath:$.values[*]",
                  "headers": [],
                  "authenticationScheme": null
                },
                {
                  "name": "BuildNames",
                  "endpointUrl": "{{endpoint.url}}/api/build",
                  "resultSelector": "jsonpath:$.builds[*].uri"
                },
                {
                  "name": "BuildNumbers",
                  "endpointUrl": "{{endpoint.url}}/api/builds/{{definition}}",
                  "resultSelector": "jsonpath:$.buildsNumbers[*].uri"
                }
]
"inputDescriptors": [
     {
       "id": "connection",
       "name": "Artifactory service",
       "inputMode": "combo",
       "isConfidential": false,
       "hasDynamicValueInformation": true,
       "validation": {
            "isRequired": true,
            "dataType": "string",
            "maxLength": 300
       }
     },
     {
       "id": "definition",
       "name": "definition",
       "description": "Name of the build.",
       "inputMode": "combo",
       "isConfidential": false,
       "dependencyInputIds": [
             "connection"
       ],
       "validation": {
            "isRequired": true,
            "dataType": "string",
            "maxLength": 300
        }
      },
      {
        "id": "buildNumber",
        "name": "Build Number",
        "description": "Number of the build.",
        "inputMode": "combo",
        "isConfidential": false,
        "dependencyInputIds": [
            "connection"
         ],
        "validation": {
             "isRequired": true,
             "dataType": "string",
             "maxLength": 300
        }
       }
],
"dataSourceBindings": [
   {
       "target": "definition",
       "dataSourceName": "BuildNames",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "versions",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "latestVersion",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    },
    {
       "target": "artifactDetails",
       "resultTemplate": "{ Name: \"{{version}}\", downloadUrl : \"{{endpoint.url}}\" }"
    },
    {
       "target": "buildNumber",
       "dataSourceName": "BuildNumbers",
       "resultTemplate": "{ Value : \"{{uri}}\", DisplayValue : \"{{uri}}\" }"
    }
  ]
 }
{
  "name": "BuildNames",
  "endpointUrl": "{{endpoint.url}}/api/build",
  "resultSelector": "jsonpath:$.builds[*]"
}
{
  "target": "definition",
  "dataSourceName": "BuildNames",
  "resultTemplate": "{ \"Value\" : \"{{{uri}}}\", \"DisplayValue\" : \"{{{uri}}}\" }"
}