2016-05-03 5 views
22

Idealerweise würde ich wollen, dass unsere Azure Web App Anwendungseinstellungen konfigurieren, indem bauen Variablen (auf VSTS), zum Beispiel: AufgabenVSTS: Pass Variablen in Skript-Task Powershell bauen

VSTS Build

Wir haben unsere führen veröffentlichen Verwenden von Powershell-Skripts. Um App-Einstellungen zu setzen, könnte das folgende Skript verwendet werden:

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

ich diese bauen Variablen manuell in einen Skript Build-Task Powershell passieren könnte, etwa so:

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

Gibt es eine Möglichkeit alle Build-Variablen in ein Skript übergeben, ohne jedes einzelne in einer Hash-Tabelle explizit angeben zu müssen?

Antwort

42

Build-Variablen werden automatisch an alle PowerShell-Skripte als Umgebungsvariablen übergeben.

Also, wenn Sie eine Variable myVar im Variables Abschnitt definiert haben. Sie können es als $env:myVar in Ihrem Skript zugreifen. Eine Sache, die hier zu beachten ist, ist, dass . in eine _ konvertiert wird. Für z. Wenn Ihre Variable myVar.config ist, werden Sie in Ihrem Skript als $env:myVar_config darauf zugreifen. Die verfügbaren Variablen enthalten auch Variablen wie den Zweignamen, die Build-Nummer usw. Um alle verfügbaren Variablen anzuzeigen, führen Sie eine Dummy-Build-/Release-Definition aus und fügen Sie eine PowerShell-Aufgabe mit Inline-Typ hinzu und führen Sie Get-ChildItem Env: aus. Dies zeigt Ihnen alle verfügbaren Umgebungsvariablen und Sie können alle Ihre benutzerdefinierten Variablen sehen.

Weitere Details sind verfügbar here

+1

Danke - also habe ich am Ende alle Build-Variablen gesetzt, die ich App-Einstellungen werden möchte, mit dem Präfix "App:". Es ist sicherlich nicht der sauberste Ansatz. 'Get-ChildItem Env: | Where-Object {$ _. Name wie "App: *"} | ForEach-Object {$ appSettings.Add ($ _. Name.Substring (4), $ _. Wert)} ' – davenewza

+0

@davenewza Ja, es scheint eine gute Idee, es in ein Wörterbuch zu legen, wenn Sie viele Einstellungen haben und dann greife auf sie sauber und leicht zu. –

2

Die Variablen wurden bereits an Powershell-Skript übergeben wurde, wenn der Build-Start. Wenn ich Ihre Frage richtig verstanden habe, wollen Sie diese Variablen verwenden, zusammen statt Angabe sie eins nach dem anderen wie folgt vor:

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

Dann gibt keine Möglichkeit, dies zu tun.

Wenn Sie die Saiten, um das Skript Powershell übergeben reduzieren möchten, können Sie die Variable wie folgt einstellen:

Variablenname: MyRandomService | Wert: "MyRandomService" = xxxxxxxx

Dann müssen Sie nur das PowerShell-Skript mit dem übergebenen Variablennamen aufrufen.