如何在代码中找到azure function应用程序的部署环境

如何在代码中找到azure function应用程序的部署环境,azure,azure-devops,azure-functions,Azure,Azure Devops,Azure Functions,场景是: 我们有Azure DevOps,我们可以运行一个管道到x个命名环境之一 我们使用Azure应用程序配置和每个环境的值标签。因此,对于每个设置,它可能具有不同的值,具体取决于标签 我突然想到,如果我将标签与环境名称匹配,那么在代码中,当我获得配置值时,如果我能够以某种方式确定我部署到了什么环境(从代码的角度讲)然后我可以在获取应用程序配置时传递这个变量,这样我就可以为我的环境设置正确的配置 var environment = // HERE find my

场景是:

  • 我们有Azure DevOps,我们可以运行一个管道到x个命名环境之一

  • 我们使用Azure应用程序配置和每个环境的值标签。因此,对于每个设置,它可能具有不同的值,具体取决于标签

  • 我突然想到,如果我将标签与环境名称匹配,那么在代码中,当我获得配置值时,如果我能够以某种方式确定我部署到了什么环境(从代码的角度讲)然后我可以在获取应用程序配置时传递这个变量,这样我就可以为我的环境设置正确的配置

                var environment = // HERE find my deployed to environment as in pipeline (1.)
            var credentials = new DefaultAzureCredential();
    
    
                configurationBuild.AddAzureAppConfiguration(options =>
                {
                    options.Connect(settings.GetValue<string>("ConnectionStrings:AppConfig"))
                            .Select(KeyFilter.Any, LabelFilter.Null)
                            .Select(KeyFilter.Any, labelFilter: environment);
                });
    
    var-environment=//这里找到我的部署到环境中的管道(1)
    var credentials=新的DefaultAzureCredential();
    configurationBuild.AddAzureAppConfiguration(选项=>
    {
    options.Connect(settings.GetValue(“ConnectionString:AppConfig”))
    .选择(KeyFilter.Any,LabelFilter.Null)
    .选择(KeyFilter.Any,labelFilter:environment);
    });
    

    我认为解决方案应该是在azure-pipelines.yaml中设置环境,其中管道不知何故知道环境的选择,然后从环境变量中读取代码。但是我不知道怎么做,或者有没有更好的方法?提前感谢您提供的帮助。

    您可以使用管道变量将环境值传递给代码。您在azure-pipelines.yaml中定义的将作为平台的环境变量注入,这允许您使用
    environment.GetEnvironmentVariable()
    在代码中获取它们的值

    因此,您可以在azure-pipelines.yaml中定义管道变量,如下面的示例(即
    DeployEnv
    ):

    然后,您可以在代码中获得管道变量(即
    DeployEnv
    ),如下所示:

     using System;
    
     var environment = Environment.GetEnvironmentVariable("DeployEnv");
     
     var credentials = new DefaultAzureCredential();
     ....
    

    另一种解决方法是在config(例如web.config)文件中定义环境属性。您可以在代码中读取环境属性。在管道中,您需要添加任务以替换配置文件中环境属性的值。有关更多信息,请参阅。

    非常感谢您的回答。小问题我认为yaml变量声明应该是:variables:-name:DeployEnv-value:${{parameters.Environment}}这样正确吗?谢谢。@JML上面的格式和你的格式都是正确的。。
     using System;
    
     var environment = Environment.GetEnvironmentVariable("DeployEnv");
     
     var credentials = new DefaultAzureCredential();
     ....