0
votes

Réglage et utilisation d'une variable d'environnement dans plusieurs tâches de version

Problème

Comment passer une valeur d'un pipeline de version à un ensemble de test et une application de console (.exe)? Dans ce cas particulier, j'ai besoin de passer un jeton d'accès personnel (PAT) utilisé à la fois par l'assemblage de test et de l'application de la console, quelque chose comme ceci: p> xxx pré>

i ' J'ai essayé de définir une variable d'environnement dans une tâche particulière, mais je ne suis pas en mesure de l'utiliser dans les autres tâches. p>

Détails H2>

J'ai configuré un pipeline de libération qui fonctionne Quelques tests d'intégration et exécute un script PowerShell qui exécute une application de console: P>

P>

Les tests d'intégration et l'application de la console utilisent une personne personnelle Jeton d'accès (PAT) pour accéder à l'API de repos Devops Azure Devops. Je lis cette valeur à partir d'une variable d'environnement nommée appsettings_personalAccessToken code>, qui doit être défini dans le pipeline de version. P>

 Définir la tâche de version de jeton p>

J'essaie de définir la PAT dans la première tâche (tâche PowerShell - Script en ligne), mais il semble être ignoré dans les autres tâches, ce que je fais mal? P>

J'ai essayé Pour définir la tape dans la tâche PowerShell comme celle-ci: p> xxx pré>

ou comme ceci: p> xxx pré>

mais la valeur semble être ignoré dans les autres tâches. Qu'est-ce que je manque ici? P>

Editer 1 h2>

Essayant même d'essayer de définir la PAT Codé durement dans la tâche PowerShell ne fonctionne pas: P>

Write-Host "##vso[task.setvariable variable=appSettings_personalAccessToken;isSecret=false;isOutput=true;]MY_TOKEN_VALUE"


4 commentaires

Je ne penserais pas que la tâche d'essai d'intégration aurait besoin de la PAT. Comment accédez-vous à la variable où vous dites qu'il n'est pas reconnu dans votre application de console? Assurez-vous de les référer le Correction de manière correcte dans le script PowerShell.


@Matt les tests d'intégration et l'application de la console utilisent l'API Devops Azure Devops, c'est pourquoi j'ai besoin d'une tape. J'essaie d'éviter de définir la PAT dans les fichiers de configuration, pour des raisons de sécurité.


J'essayais de dire vraiment que vous ne montriez qu'un côté de l'équation. Pouvez-vous ajouter des détails sur la façon dont vous référez la variable que vous avez définie. Y a-t-il une raison pour laquelle vous ne pouvez pas simplement utiliser une variable secrète sur la définition de sortie au lieu d'essayer de le définir de PowerShell?


@Matt "Y a-t-il une raison pour laquelle vous ne pouvez pas simplement utiliser une variable secrète sur la définition de sortie au lieu d'essayer de le définir de PowerShell?" - Oui, je peux utiliser une variable secrète, je viens de l'essayer et ça marche bien. Je pensais que les variables de libération ne seraient pas disponibles en tant que variables d'environnement dans l'application de la console, c'est pourquoi j'essayais de les définir à l'aide de PowerShell. Merci!


4 Réponses :


0
votes

Lorsque vous avez utilisé cette commande:

Write-Host "##vso[task.setvariable variable=appSettings_personalAccessToken;isSecret=false;isOutput=true;]$personalAccessToken"


9 commentaires

Vous avez absolument raison - j'avais effectivement eu les citations avant, mais pour une raison quelconque, je les ai supprimées (aller) ... de toute façon, j'ai essayé de remettre les citations mais pas de succès :(


@Ruijarimba dans votre script inline où est la valeur de $ personnaliséAccessTokenting? Essayez-vous de définir $ personnaliséAccesstoken sur la valeur de votre variable de version ou essayez-vous de mettre à jour la valeur de la variable de version?


@Ruijarimba je ne vois pas non plus ISOutput en tant que propriété valide pour la tâche.setvariable sur cette page - github.com/microsoft/azure-pipelines-tasks/blob/master/docs/ ... - Mais peut-être que je manque quelque chose


$ personnalAccessToken est défini dans la section Variables du pipeline de déclenchement. J'ai essayé d'utiliser $ system.AccessToken aussi, sans succès. Oh, et pas de chance en utilisant isoutput non plus!


Si la variable de libération est nommée personnalisableAccessToken et la variable d'environnement local est nommée Appsettages_PersonalAccessToken Vous devez les modifier dans la déclaration. écriture-host "## vso [Task.setvariable variable = personnalAccessToken; Issecret = false] $ env: appsettings _personalAccessToken"


@Ruijarimba - Pouvez-vous ajouter une capture d'écran de vos variables de version? Jamesc. - Il s'agit d'une tâche de libération de Devops Azure et, en tant que telle, il possède des commandes spéciales. Veuillez consulter le lien GitHub à la documentation que j'ai postée plus tôt.


@Scottheath a édité ma réponse. Je n'ai pas mis les variables comme vous l'avez demandé, mais j'ai essayé avec une valeur codée dur, mais toujours pas de chance :(


Comme Matt dit, il est difficile de dire ce qui se passe sans voir plus de la configuration de libération.


@Scottheath j'ai trouvé une solution à mon problème, je complique les choses (comme d'habitude). Quoi qu'il en soit, merci beaucoup pour votre aide.



0
votes

Le problème ici est que Windows n'accepte pas automatiquement les variables d'environnement sur Créer / Modifier ou supprimer. Cela ne se produit qu'après un redémarrage du processus Explorer.exe ou si vous définissez la variable manuellement de
mon ordinateur | Propriétés | Avancé | Variables d'environnement .

Explorer diffuse ensuite un message wm_settingchange à toutes les fenêtres pour les informer de la modification.
Cependant, même lorsque cela le faisait manuellement, les processus qui fonctionnaient déjà peuvent ne pas choisir les modifications à moins qu'ils ne gèrent pas le message de changement de réglage.

Si l'explorateur de redémarrage n'est pas un problème, vous pourriez essayer: xxx

Le processus explorateur.exe doit redémarrer automatiquement. Ceci est contrôlé par le registre hkey_local_machine \ logiciel \ Microsoft \ Windows NT \ Microsoft \ Windows NT \ CurrentVersion \ WinLogon Autorestartshell Valeur.

espère que cela aide.


2 commentaires

Cela pourrait être vrai pour utiliser l'environnement SetEnvironmentVariable, mais ne devrait pas être une exigence pour la commande ## VSO.


@Theo a essayé d'exécuter cela, mais je reçois une erreur lors de la tentative d'exécution de la cmdlet stop-processus , peut-être que les agents de construction n'ont pas les autorisations de le faire dans le pipeline de déclenchement. Cela n'a pas fonctionné non plus: Stackoverflow.com/a/37528395/558486



2
votes

Il n'est pas nécessaire que vous utilisiez une tape pour cela. Utilisez $ ( Système.accessToken) . Vous pouvez accorder votre construire ou libérer l'accès à un jeton OAuth fournissant à un système, puis faites-vous référence dans des cas où vous avez besoin d'un jeton d'authentification.

Veuillez noter que vous devez Accorder l'accès au jeton OAuth , sinon cela ne fonctionnera pas.


2 commentaires

Je suis fatigué en utilisant $ (système.accessToken) mais cela n'a pas fonctionné. Mon problème est que j'ai besoin de définir, d'une manière ou d'une autre, une variable d'environnement pouvant être utilisée dans l'ensemble des tests d'intégration et une application de console (.exe) exécutée via une tâche PowerShell.


J'ai dû faire quelque chose de mal auparavant, je pouvais maintenant utiliser $ (système.accessToken) . Je n'essaie plus de définir une variable d'environnement à l'aide de PowerShell, je viens d'ajouter le $ (appsettings_personalAccessToken) dans la section Variables et définissez la valeur sur $ (System.AccessToken) . Merci pour l'aide!



0
votes

Je posterai ma solution ici, j'espère que cela sera utile pour quelqu'un d'autre qui pourrait avoir le même problème. Merci @matt et @Theo pour me faire remarquer dans la bonne direction.

J'ai eu une mauvaise compréhension sur la façon dont les variables de libération fonctionnent. Je pensais que ceux-ci seraient disponibles au niveau de la tâche, non à aucune application ou assemblée de test exécuté du pipeline de déclenchement - c'est pourquoi j'essayais de les définir à l'aide de PowerShell.

La solution est donc très simple - j'ai supprimé les tâches PowerShell qui tentent de définir les variables environnementales et de définir la variable comme suit:

 Variables de définition de libération


0 commentaires