.NET Core - 在Azure部署任务中设置环境变量

Ada*_*nde 19 configuration azure azure-devops asp.net-core

我目前正在尝试使用该launchSettings.json文件来管理应用程序的环境变量,因此我的Setup.cs文件可以通过env.IsDevelopmentEnvironment()等方式管理环境.

在VSTS中,如何ASPNETCORE_ENVIRONMENT在Azure部署任务上设置环境变量?或者它应该dotnet publish进入我的构建步骤中的任务?

Set*_*Set 18

因为ASPNETCORE_ENVIRONMENT是环境变量,所以您只需在Azure上指定它.

请参阅有关在Azure上定义环境变量的方式和位置的Stack Overflow答案.


Mat*_*hew 5

如果要使部署过程保持幂等性,建议您使用此部署步骤在Azure Web App上进行设置。

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

从技术上讲,它还将发布设置添加到web.config中,这对于核心应用程序不是必需的,但重要的是,它还为Azure主机设置了环境变量。

假设您已在Startup.cs中指定使用环境变量:

    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;

    }
Run Code Online (Sandbox Code Playgroud)

因此,如果您具有发布变量:appsetting.ASPNETCORE_ENVIRONMENT = Release,则通过Kudu上的PowerShell控制台进行检查时,您会发现$ env:ASPNETCORE_ENVIRONMENT确实是“发布”。

实际上,我实际上是在发布时使用此扩展程序覆盖我的所有appsettings.json变量以及ASPNETCORE_ENVIRONMENT,而不是标记某些appsettings。{environment} .json文件。我可以通过在VSTS Release Variable名称中使用正确的命名约定来覆盖环境变量。

例如,如果我的appsettings.json具有以下结构:

    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;

    }
Run Code Online (Sandbox Code Playgroud)

我可以使用以下释放变量覆盖:

appsetting.settings:secret:foo =“ bar”

部署后,然后在Azure Web App上检查$ env:settings:secret:foo

在没有做任何其他事情的情况下,也没有对Web部署程序包进行解压缩,对配置文件进行标记化,然后在msdeploy之前重新进行压缩的情况下,我有了特定于环境的配置。