44 votes

VSTS: passer les variables de génération / libération dans la tâche de script Powershell

Idéalement, je voudrais configurer notre Azure Web App paramètres de l'application à l'aide de construire des variables (sur VSTS), par exemple:

VSTS Build

Nous nous acquittons de nos publier des tâches à l'aide de scripts Powershell. Pour définir les paramètres de l'application, le script suivant peut être utilisé:

param($websiteName, $appSettings)
Set-AzureWebsite -Name $websiteName -AppSettings $appSettings

J'ai pu passer ces variables manuellement dans un script Powershell tâche de génération, comme suit:

PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings @{"MyConnectionString" = $(MyConnectionString);"MyRandomService" = $(MyRandomService);"MyRandomServiceClient"=$(MyRandomServiceClient);"MyRandomServicePassword"=$(MyRandomServicePassword)}

Est-il un moyen de passer tous les de construire des variables dans un script sans avoir à spécifier de manière explicite à chacun dans une table de hachage?

87voto

Harshil Lodhi Points 3589

Construire les Variables sont automatiquement transmis à tous les scripts PowerShell comme des variables d'environnement.

Donc, si vous avez défini une variable myVar dans la Variables section. Vous pouvez y accéder en tant que $env:myVar dans votre script. Une chose à noter ici est que l' . est convertie en _. Pour eg. si votre variable est - myVar.config, vous pourrez y accéder dans votre script $env:myVar_config.

Les variables disponibles également inclure des variables telles que le nom de la succursale, le numéro de build etc. Pour voir toutes les variables disponibles, exécutez un mannequin build/release définition et ajouter une PowerShell tâche avec inline type et exécutez Get-ChildItem Env:. Cela va vous montrer toutes les variables d'environnement disponibles et vous pouvez voir toutes les variables définies.

Plus de détails sont disponibles ici

9voto

Artjom Points 182

Il convient de mentionner ici que les variables secrètes ne sont pas transmises aux scripts en tant que variables d'environnement ( env: dans PS). Donc accessible uniquement si passé comme paramètres pour un script, par exemple. -MyPassword $(Password) . Voir https://docs.microsoft.com/en-us/vsts/pipelines/build/variables?view=vsts&tabs=batch#secret-variables

3voto

Eddie Chen - MSFT Points 23046

Les variables ont déjà été passé au script PowerShell lorsque la démarrer. Si je comprends votre question correctement, vous souhaitez utiliser ces variables entre elles au lieu de les spécifier un par un, comme suit:

PrepareAppSettings.ps1 -websiteName "MyWebApp" -appsettings $(AllVariables)

Ensuite, il n'y a pas moyen de le faire.

Si vous souhaitez réduire le nombre de chaînes transmises au script PowerShell, vous pouvez définir la variable comme suit:

VariableName: MyRandomService | Valeur:"MyRandomService" = xxxxxxxx

Ensuite, vous avez juste besoin d'appeler le script PowerShell avec le nom de la variable passée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X