在VSTS扩展任务中使用ResultTemplate



我创建了一个任务,该任务与REST API对话,以重新计算两个选择列表的值。仅使用JSONPATH时,填充第一个下拉框都可以正常工作。基于我想重述第二个列表的第一个选择列表。

我尝试了一些变体,我正在尝试这样的事情:我在第一个休息电话中收到的JSON与:

{
  "id": "45",
  "href": "https://selfservice/api/configurations/45/",
  "name": "Type",
  "description": "",
  "version": "0.0.4",
  "attributes": [
    {
      "value": {
        "sdk-object": {
          "type": "ConfigurationElement",
          "id": "56"
        }
      },
      "type": "ConfigurationElement",
      "name": "win"
    },
    {
      "value": {
        "sdk-object": {
          "type": "ConfigurationElement",
          "id": "57"
        }
      },
      "type": "ConfigurationElement",
      "name": "lin"
    }
  ]
}

我尝试在列表中显示属性名称,并需要第二个选择列表中的属性ID。我在task.json中创建了以下dataSourceBindings。当然,任务中存在目标。task.json:

{
   "id": "GUID",
   "name": "Spinup",
   "friendlyName": "Create environment",
   "description": "Starts Workflow to create an environment. ___ The following placeholders are created deplending on the template and can be used in the rest of the release:**XLDEnvironment** and **testAgentHostname**",
   "category": "Deploy",
   "author": "***",
   "version": {
      "Major": 0,
      "Minor": 0,
      "Patch": 33
   },
  "minimumAgentVersion": "1.95.3",
  "inputs": [
    {
      "label": "Endpoint",
      "name": "connectedServiceName",
      "required": true,
      "type": "connectedService:server",
      "helpMarkDown": "endpoint to connect to."
    },
    {
      "name": "stage",
      "type": "string",
      "label": "Stage",
      "defaultValue": "$(Release.EnvironmentName)",
      "required": true,
      "helpMarkDown": "Stage of the release, default value is based on the pipeline."
    },
    {
      "name": "releaseName",
      "type": "string",
      "label": "Environment name",
      "defaultValue": "$(Release.ReleaseName)",
      "required": true,
      "helpMarkDown": "Name of the environment that will be created."
    },
    {
      "name": "owner",
      "type": "string",
      "label": "Owner of the environment",
      "defaultValue": "***",
      "required": true,
      "helpMarkDown": "It is common to use the initials of the product owner in this field. There has to be a valid AD user owner of each environment. This can also be set by using a variable through the pipeline."
    },
    {
      "name": "group",
      "type": "string",
      "label": "Group of the owner",
      "defaultValue": "",
      "required": true,
      "helpMarkDown": "group that owns the environment. groups can be requested by the infrastructure department. Example: ****"
    },
    {
      "name": "platform",
      "type": "pickList",
      "label": "Platform (OS)",
      "defaultValue": "",
      "required": true,
      "helpMarkDown": "Choose the type of the target platform."
    },
    {
      "name": "size",
      "type": "pickList",
      "label": "Environment Template",
      "defaultValue": "",
      "required": true,
      "helpMarkDown": "Size of the environment to create."
    }
  ],
  "dataSourceBindings": [
    {
      "dataSourceName": "GetCEPlatformType",
      "endpointId": "$(connectedServiceName)",
      "target": "platform",
      "selector": "jsonpath:$.attributes[*].name",
      "keySelector": "jsonpath:$.attributes[*].value.sdk-object.id"
    },
    {
      "dataSourceName": "GetCEPlatformSize",
      "endpointId": "$(connectedServiceName)",
      "target": "size",
      "parameters": {
        "platformTypeId": "$(platform)"
      }
    }
  ],
   "instanceNameFormat": "Spin up $(size) $(platform) environment",
   "execution": { 
      "PowerShell3": {
         "target": "$(currentDirectory)\task.ps1",
         "argumentFormat": "",
         "workingDirectory": "$(currentDirectory)"
      }
   }
}

vss-extension.json:

{
    "manifestVersion": 1,
    "id": "*****",
    "name": "Release Tasks",
    "version": "1.0.1",
    "publisher": "***",
    "targets": [
        {
            "id": "Microsoft.VisualStudio.Services"
        }
    ],    
    "description": "Tools to contact ***. Includes a task to spin up a platform and a task to remove the platform.",
    "categories": [
        "Build and release"
    ],
    "icons": {
        "default": "images/extension-icon.png"        
    },
    "files": [
        {
            "path": "RemoveEnvironment"
        },
        {
            "path": "SpinUpEnvironment"
        }
    ],
    "contributions": [
        {
            "id": "******",
            "type": "ms.vss-distributed-task.task",
            "targets": [
                "ms.vss-distributed-task.tasks"
            ],
            "properties": {
                "name": "RemoveEnvironment"
            }
        },
        {
            "id": "*********",
            "type": "ms.vss-distributed-task.task",
            "targets": [
                "ms.vss-distributed-task.tasks"
            ],
            "properties": {
                "name": "SpinUpEnvironment"
            }
        },
        {
            "description": "Service Endpoint type for all connections",
            "id": "endpoint-type",
            "properties": {
                "authenticationSchemes": [
                    {
                        "inputDescriptors": [
                            {
                                "description": "Username",
                                "id": "username",
                                "inputMode": "textbox",
                                "name": "Username",
                                "validation": {
                                    "dataType": "string",
                                    "isRequired": true
                                }
                            },
                            {
                                "description": "Password",
                                "id": "password",
                                "inputMode": "passwordbox",
                                "isConfidential": true,
                                "name": "Password",
                                "validation": {
                                    "dataType": "string",
                                    "isRequired": false
                                }
                            }
                        ],
                        "type": "ms.vss-endpoint.endpoint-auth-scheme-basic"
                    }
                ],
                "dataSources": [
                {
                    "endpointUrl": "api/configurations/*****/",
                    "name": "GetCEPlatformType",
                    "resultSelector": "jsonpath:$.attributes[*].name"
                },
                {
                    "endpointUrl": "api/configurations/$(platformTypeId)/",
                    "name": "GetCEPlatformSize",
                    "resultSelector": "jsonpath:$.attributes[*].name"
                }
            ],
                "displayName": "*****",
                "helpMarkDown": "Enter the url and credentials to connect to the endpoint.",
                "name": "server",
                "url": {
                    "displayName": "Server URL",
                    "helpText": "Url for the server to connect to."
                }
            },
            "targets": [
                "ms.vss-endpoint.endpoint-types"
            ],
            "type": "ms.vss-endpoint.service-endpoint-type"
        }
    ]
}

可悲的是,我无法使它起作用。数据源存在于端点,但我不确定如何处理ResultSelector。有人对如何使它起作用有想法吗?关于此的文档不太好。我不熟悉胡须,但是在胡须测试工具中,这似乎可以起作用。

想法被赞赏!

在第一个数据源中尝试一下:

{
  "dataSourceName": "dsList1",
  "endpointId": "$(connectedServiceName)",
  "target": "list1",
  "selector": "jsonpath:$.attributes[*].name",
  "keySelector": "jsonpath:$.attributes[*].value.sdk-object.id"
}

更新:

您试图在vss-extension.json文件中使用" PlatformTypeid"。

顺便说一句,我只是注意到您正在使用" DataSourceBindings",然后您不能使用"选择器"one_answers" Keyselector"来解析结果,因为它们用于" SourcedEfinitions"。

要使用" DataSourceBindings"来实现所需的功能,您可以直接定义任务中的端点URL。

因此,您可以首先在vss-extension.json文件中移动数据源部分,然后在task.json文件中移动数据源部分,更改为以下内容:

"dataSourceBindings": [
    {
      "endpointId": "$(connectedServiceName)",
      "endpointURL": "api/configurations/*****/",
      "target": "platform",
      "resultselector": "jsonpath:$.attributes[*]",
      "resultTemplate": "{ "Value" : "{{{value.id}}}", "DisplayValue" : "{{{name}}}" }"
    },
    {
      "endpointId": "$(connectedServiceName)",
      "endpointURL": "api/configurations/$(platformTypeId)/",
      "target": "size"
    }
  ],

最新更新