【问题标题】:.NET Core - Set Environment Variable in Azure Deployment Task.NET Core - 在 Azure 部署任务中设置环境变量
【发布时间】:2016-12-10 05:44:15
【问题描述】:

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

在 VSTS 中,如何在 Azure 部署任务中设置环境变量 ASPNETCORE_ENVIRONMENT?还是应该加入我在构建步骤中的dotnet publish 任务中?

【问题讨论】:

  • 那么你想在部署之前更新“launchSettings.json”文件中的“ASPNETCORE_ENVIRONMENT”变量的值吗?
  • 是的。我正在努力传达我正在尝试做的事情。基本上,当在 vsts 中设置构建任务(或发布任务)时,我想在那时设置 ASPNETCORE_ENVIRONMENT 变量,所以当它部署时,它本质上是“正确的”环境。基本上,有点像 web.config 转换的工作方式。这有意义吗?
  • 它也完全有可能我看这个完全错误的方式。鉴于下面@set 的答案,我想知道我是否应该使用预配置的环境变量来设置站点,然后简单地部署到该站点。

标签: azure configuration asp.net-core azure-devops


【解决方案1】:

因为ASPNETCORE_ENVIRONMENT是一个环境变量,你可以在Azure上指定它。

请参阅 How and where to define an environment variable on Azure 上的 Stack Overflow 答案。

【讨论】:

  • 啊,谢谢,这与我所追求的非常接近。我的意思是我如何在 VSTS 的部署/构建时设置它:) 感谢您的回复!
  • @AdamGrande 你有没有从 VSTS 找到一种方法来做到这一点?我实际上想通过环境变量设置我的所有应用程序设置。考虑到遵循正确命名约定的 env var 将有效地覆盖 appsettings.json 值,它将消除对第二个 json 文件或类似文件进行标记的需要。
  • 只是为了强调这个答案,这也是官方文档对 Azure 的建议:docs.microsoft.com/en-us/aspnet/core/fundamentals/…
【解决方案2】:

如果你想让你的部署过程保持幂等性,我建议使用这个部署步骤在 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;

    }

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

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

例如,如果我的 appsettings.json 有这样的结构:

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

我可以用释放变量覆盖,例如:

appsetting.settings:secret:foo = "bar"

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

无需在我的源代码中执行任何其他操作或解压缩 Web 部署包、标记配置文件然后在 msdeploy 之前重新压缩,我就有了特定于环境的配置。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      相关资源
      最近更新 更多