2016-08-04 57 views
5

Im derzeit versucht, die launchSettings.json Datei zu verwenden, um die Umgebungsvariablen der Anwendung zu verwalten, so dass meine Setup.cs Datei der Umgebungen, in der Art und Weise von env.IsDevelopmentEnvironment() usw..Net Kern - Umgebungsvariable in Azure Deployment-Task

verwalten kann

Meine Frage lautet wie folgt: Wie gehe ich in VSTS dazu, die Umgebungsvariable ASPNETCORE_ENVIRONMENT für eine Azure-Bereitstellungstask festzulegen? Oder sollte es in der dotnet publish Aufgabe, die ich in meinen Build-Schritten habe?

Jede Hilfe würde sehr geschätzt werden. Wenn ich weitere Informationen bereitstellen muss, lassen Sie es mich bitte wissen, da ich auch nicht sicher bin, ob das, was ich zur Verfügung gestellt habe, ausreicht, um die Frage klarzustellen.

Cheers,

Adam

+0

Sie möchten also den Wert der Variablen "ASPNETCORE_ENVIRONMENT" in der Datei "launchSettings.json" aktualisieren, bevor Sie sie bereitstellen? –

+0

Art von ja. Ich bemühe mich zu vermitteln, was ich versuche zu tun. Wenn ich eine Build-Task (oder eine Release-Task) in vsts einrichte, möchte ich im Grunde die Variable ASPNETCORE_ENVIRONMENT an diesem Punkt einstellen, so dass sie bei ihrer Implementierung im Wesentlichen die "richtige" Umgebung ist. im Grunde genommen, wie die web.config-Transformationen funktionieren. Ist das sinnvoll? –

+0

Es ist auch durchaus möglich, dass ich das völlig falsch anschaue. Wenn ich die @set-Antwort unten anführe, frage ich mich, ob ich die Site mit der vorkonfigurierten Umgebungsvariablen einrichten soll und einfach dafür bereitstellen soll. –

Antwort

8

Ursache ASPNETCORE_ENVIRONMENT eine Umgebungsvariable ist, können Sie es nur auf Azure angeben. Siehe SO-Antwort unter How and where to define an environment variable on azure?

+0

ah danke, das ist super nah an was ich danach. Mein Punkt ist, wie setze ich das bei der Bereitstellung/Build-Zeit von VSTS :) Danke für die Antwort! –

+0

@AdamGrande haben Sie jemals einen Weg gefunden, dies von VSTS zu tun? Ich möchte eigentlich alle meine Anwendungseinstellungen über Umgebungsvariablen einstellen. Wenn man bedenkt, dass env vars, die der korrekten Namenskonvention folgen, die appsettings.json-Werte wirksam überschreiben, würde es die Notwendigkeit beseitigen, eine zweite json-Datei oder ähnliches zu token. – Matthew

+0

Nur um diese Antwort zu betonen, ist dies auch die offizielle Dokumentation für Azure: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments#setting-the-environment – Daniel

0

Sie können die Erweiterung Replace Token installieren und dann in Ihrer Build-/Release-Definition eine Task zum Ersetzen von Token hinzufügen. Diese Task kann die Zeichenfolgen in einer Datei mit dem Variablenwert ersetzen, den Sie in der Build-/Release-Definition hinzugefügt haben.

1

Wenn Sie den Bereitstellungsvorgang für idempotent halten möchten, sollten Sie diesen Bereitstellungsschritt für die Azure Web App verwenden.

https://marketplace.visualstudio.com/items?itemName=pascalnaber.PascalNaber-Xpirit-WebAppConfiguration

Technisch fügt es Release-Einstellungen auf die web.config als auch, was für eine Kern App nicht notwendig ist, aber wichtiger ist, es setzt auch die Umgebungsvariablen für den Host-Azure.

Vorausgesetzt, Sie haben festgelegt, in Ihrem Startup.cs Umgebungsvariablen verwenden:

public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
         .SetBasePath(env.ContentRootPath) 
         .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)        
         .AddEnvironmentVariables(); //override settings with environment variables 

     var config = builder.Build(); 

     Configuration = config; 

    } 

Wenn Sie also eine Release Variable: appsetting.ASPNETCORE_ENVIRONMENT = Freigabe, werden Sie feststellen, dass $ env: ASPNETCORE_ENVIRONMENT wird in der Tat sein "Release", wenn Sie über die PowerShell-Konsole auf Kudu prüfen.

Ich benutze tatsächlich diese Erweiterung, um alle meine appsettings.json Variablen sowie ASPNETCORE_ENVIRONMENT zum Release-Zeit zu überschreiben, anstatt einige appsettings. {Umgebung} .json Datei. Ich kann einfach mit Umgebungsvariablen überschreiben, indem ich die richtige Benennungskonvention in meinen VSTS Release-Variablennamen verwende.

Zum Beispiel, wenn meine appsettings.json hat diese Struktur:

{ 
 
    settings: { 
 
    secret: { 
 
     foo: "bar" 
 
    } 
 
    } 
 
}

I mit einer Trenn Variable außer Kraft setzen kann, wie:

appsetting.settings: Geheimnis: foo = "bar"

Dann überprüfen Sie $ env: settings: secret: foo auf der Azure Web App nach der Bereitstellung

Ohne etwas in meiner Quelle zu tun oder ein Web-Deployment-Paket zu entpacken, eine Konfigurationsdatei zu Token und dann vor Msdeploy erneut zu zippen, habe ich umgebungsspezifische Konfigurationen.