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

25

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

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


你想在部署之前更新“launchSettings.json”文件中的“ASPNETCORE_ENVIRONMENT”变量值吗? - Eddie Chen - MSFT
有点是的。我在努力表达我想做什么。基本上,当在VSTS中设置构建任务(或发布任务)时,我想在那个时候设置ASPNETCORE_ENVIRONMENT变量,这样当它被部署时,它就是“正确”的环境。基本上,有点像Web.config转换的工作方式。这样说你明白吗? - Adam Grande
我完全有可能看错了这个问题。鉴于下面@set的答案,我在想是否应该预先配置环境变量并简单地部署到其中来设置站点。 - Adam Grande
3个回答

30

啊,谢谢,这非常接近我想要的。我的问题是如何在从VSTS部署/构建时设置它 :) 感谢您的回复! - Adam Grande
@AdamGrande,你有没有找到从VSTS实现这个的方法?我实际上想通过环境变量设置所有的应用程序设置。考虑到遵循正确命名约定的环境变量将有效地覆盖appsettings.json值,这将消除需要令牌化第二个json文件或类似文件的需求。 - Matthew
强调一下这个答案,这也是Azure官方文档建议的做法:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments#setting-the-environment - Daniel

6
如果您想使部署过程幂等,建议使用此部署步骤在Azure Web App上设置 <aspNetCore targetFramework="x.x"> 标记。
此外,您可以访问此链接: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;

    }

如果您有一个发布变量:appsetting.ASPNETCORE_ENVIRONMENT = Release,那么如果您正在通过Kudu上的PowerShell控制台进行检查,则会发现$env:ASPNETCORE_ENVIRONMENT确实为“Release”。

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

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

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

我可以使用类似于发布变量的覆盖方式:

appsetting.settings:secret:foo = "bar"

然后在部署后检查Azure Web应用程序上的$env:settings:secret:foo

不需要在源代码中进行额外的操作或解压Web部署包,标记配置文件并在msdeploy之前重新压缩,即可获得特定于环境的配置。


0
您可以安装替换Token扩展,然后在您的构建/发布定义中添加一个替换Token任务。此任务可用于将文件中的字符串替换为您在构建/发布定义中添加的变量值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接