簡體   English   中英

Azure Web 使用特定 appsettings 環境的 ASP.NET 核心的應用程序部署

[英]Azure Web App deployment for ASP.NET Core using specific appsettings environment

我正在將幾個 Web 應用程序部署到 Azure:一個用於開發/測試環境,一個用於生產。

我嘗試根據環境計算機名稱確定要加載的 appsettings,因為我的理解是 Core 的不同之處在於您無法針對特定環境發布。 我沒有意識到 Azure 中的計算機名稱發生了變化,所以當我今天早些時候嘗試將舊應用程序部署到測試環境時,它開始使用生產設置。

        public static void Main(string[] args)
        {
            string environmentName;
            if (args.Length > 0)
            {
                environmentName = args[0];

                if (environmentName != "Local" && environmentName != "Test" && environmentName != "Production")
                {
                    Console.WriteLine("Invalid environment. Please choose between Local, Test, or Production.");
                    environmentName = Console.ReadLine();
                }
            }
            else
            {
                Console.WriteLine("Application was started without arguments.");

                if (Environment.GetEnvironmentVariable("COMPUTERNAME").Contains("dev"))
                {
                    environmentName = "Local";
                }
                else if (Environment.GetEnvironmentVariable("COMPUTERNAME").Contains([Azure name]))
                {
                    environmentName = "Test";
                }
                else
                {
                    environmentName = "Production";
                }
            }
        }
 public static IHostBuilder CreateHostBuilder(string[] args, string environment) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration(configApp =>
                {
                    var path = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
                    configApp.SetBasePath(path);
                    configApp.AddJsonFile($"appsettings.{environment}.json", false, true);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .UseSerilog();

如何確保我的測試 Azure 使用測試環境,而我的生產使用生產?

您的代碼不應該知道環境的名稱,更不用說計算機名稱,否則如果有一天您需要設置環境 test2,則需要重新編譯。

您不應該將所有設置文件部署到所有環境。 例如,開發或測試不應該有您的生產設置,即使它不使用它們。 主要關注點:安全。

我會在部署過程中為服務器設置適當的環境變量設置。 理想情況下,通過自動化管道,但您也可以通過手動修改 azure 應用服務中的配置刀片中的設置來完成此操作。

如果您仍想使用這些文件:

  1. 刪除選擇當前環境的 if 語句。
  2. 在環境變量中設置環境名稱: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-5.0
  3. CreateDefaultBuilder 的默認配置會自動嘗試查找名為 appSettings.{envname}.json 的文件並加載它。

請記住,這會加載配置的每個源,並且某些內容會覆蓋其他內容。 如果您在環境特定文件中有一個變量,這將優先於一般的 appsettings.json 變量。 如果您在通用文件中而不是在特定於環境的文件中有內容,您將獲得通用值。 這對於不會因環境而改變的事物很有用。

然后,如果您在 azure 門戶的配置刀片中有環境變量或變量(我理解是相同的東西),這些優先於文件的內容。 (我只是走這條路,讓管道將環境變量插入到目標機器中,並且不打擾文件,因為在管道中管理機密更容易)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM