2017-09-17 3 views
0

J'ai créé une tâche qui communique avec une API REST pour récupérer les valeurs de 2 listes de sélection. Le remplissage de la première zone de liste déroulante fonctionne correctement lorsque vous utilisez uniquement jsonpath. Selon la première liste de sélection, j'aimerais récupérer les valeurs de la deuxième liste.Utilisation de ResultTemplate dans les tâches d'extension vsts

J'ai essayé quelques variantes et j'essaie quelque chose comme ceci: JSON que je reçois dans le premier appel de repos est similaire à:

{ 
    "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" 
    } 
    ] 
} 

J'essaie de montrer le nom des attributs dans la liste et besoin de l'identifiant de l'attribut dans la deuxième liste de sélection. J'ai créé les liaisons de datasource suivantes dans task.json. Bien sûr, les cibles existent dans la tâche. 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" 
     } 
    ] 
} 

Malheureusement je ne peux pas obtenir ce travail. Les sources de données existent dans le noeud final, mais je ne suis pas sûr de savoir quoi faire avec resultSelector. Est-ce que quelqu'un a une idée sur la façon de le faire fonctionner? La documentation sur ce n'est pas trop bon. Je ne suis pas familier avec la moustache, mais dans l'outil de test de moustache cela semble fonctionner.

Les pensées sont appréciées!

Répondre

1

Essayez avec cela dans la première source de données:

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

Mise à jour:

Vous essayez d'utiliser "platformTypeId" dans le fichier vss-extension.json alors qu'il a été défini dans la tâche. json, cela provoque le message d'erreur que vous avez mentionné dans le commentaire. Par ailleurs, je viens de remarquer que vous utilisez "dataSourceBindings", alors vous ne pouvez pas utiliser "selector" et "KeySelector" pour analyser le résultat car ils sont utilisés pour "sourceDefinitions". Pour obtenir la fonctionnalité que vous souhaitez avec "dataSourceBindings", vous pouvez définir directement l'URL du point de terminaison dans task.json au lieu de définir la source de données dans la contribution de point de terminaison.

vous pouvez donc déplacer la section datasources dans le fichier vss-extension.json d'abord, puis dans le fichier task.json, modification suivante:

"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" 
    } 
    ], 
+0

Merci pour votre réponse! Il semble être correct, mais avant que je puisse vraiment tester ce que je besoin de se débarrasser d'une autre erreur: 500: variable avec le nom platformTypeId n'a pas été trouvé pour le critère d'évaluation donné Est-ce que je manque quelque chose dans mon source de données sur le critère d'évaluation d'utiliser des variables ?: '{ "endpointURL": "config/$ (platformTypeId) /", "name": "PlatformSize", "resultSelector": "jsonpath: $ attributes [*] nom.". } ' – Thijs

+0

Pouvez-vous partager la configuration détaillée dans le fichier task.json? –

+0

J'ai édité la question pour la rendre plus complète. Les valeurs de Soms sont masquées/supprimées en raison de la déscrétion de l'entreprise. – Thijs