2017-08-09 2 views
0

Je suis actuellement en train de réécrire une tâche de construction TFS personnalisée afin qu'elle soit basée sur Node.js au lieu de PowerShell. Cependant, j'ai rencontré le problème suivant:
Dans la tâche existante, l'utilisateur peut décider s'il souhaite écrire le résultat de la tâche dans une variable d'environnement. C'est utile s'il veut ajouter des scripts qui fonctionnent avec n'importe quel résultat de la tâche. Dans PowerShell j'ai réalisé que par la fixation d'un « niveau utilisateur variable d'environnement » comme celui-ci:Comment partager des informations entre les tâches dans Node.js TFS Build Task?

[Environment]::SetEnvironmentVariable($variableName, "The Value to Set", "User") 

et il pourrait être lu une fois la tâche était terminée, par exemple dans PowerShell comme ceci:

$variable = [Environment]::GetEnvironmentVariable($variableName,"User") 

Cependant, je n'ai trouvé aucun moyen d'atteindre la même chose avec la tâche dans Node.js. Si vous le définissez via process.env["variable"], cela ne sera pas disponible dans l'une des tâches suivantes qui sont exécutées.

Après quelques recherches, je suis tombé sur la méthode setTaskVariable que le VSTS TaskLib offre: https://github.com/Microsoft/vsts-task-lib/blob/master/node/docs/vsts-task-lib.md#tasksetTaskVariable

Mais maintenant, je ne sais pas comment accéder à cette variable dans une tâche ultérieure. Je vois que vous pouvez utiliser getTaskVariable si vous utilisez une tâche personnalisée basée sur la tasklib (soit dans PowerShell ou Node), mais je ne veux pas que tout le monde qui veut utiliser la variable doit écrire une tâche complète si un simple (PowerShell Script ferait l'affaire.

Y a-t-il une façon "facile" d'obtenir cette variable de tâche dans un script qui suit ou est-ce juste pour des tâches "pleines"? Quelles autres options aurais-je quand passer simplement quelques informations à un script qui suivrait ma tâche?

Répondre

1

La méthode simple utilise Task Logging commands: ##vso[task.setvariable]value (par exemple Console.log(‘##vso[task.setvariable variable=testvar;]testvalue’), vous pouvez ensuite l'utiliser comme variable générale définie dans la définition de génération/publication. (Par exemple, les arguments d'une tâche: $(testvar))

D'autre part, la méthode task.setVariable peut faire la même chose. (Le task.setTaskVariable est utilisé pour les étapes suivantes de la tâche en cours)

+0

Merci, cela fonctionne parfaitement (j'ai raté le setVariable et j'ai juste regardé setTaskVariable ...). Avec setVariable, je peux y accéder dans la TaskConfiguration via $ (testVar) ou directement dans un script PowerShell via $ env: testVar :-) – huserben