Service Fabric service 根據環境變量讀取配置文件

前言

一個服務或者產品,每每須要三個環境:一個開發環境(Development),一個測試環境(Staging),一個生產環境(Production),
這就不可避免的須要多個配置文件來匹配相應的環境,由於不可能三個環境都使用同一個配置,生產的數據直接就被污染了。shell

爲了便於管理全部的配置字符串,把他們集中在一個json文件,程序啓動時就序列化出來,有須要更新的時候,直接修改json文件便可,沒必要修改代碼,以避免regression或者引入新的bug。json

舊方法

把開發的代碼部署到測試環境的時候,須要手動merge到測試環境的branch,這個merge過程,須要把修改配置文件;
同理,在測試環境經過好,部署到生產環境時,還要再次手動merge一次到production的branch,以後VSTS部署merge後的branch。app

這個過程,繁雜不說,不免出現配置遺漏,錯配,或者交接的困難,畢竟誰都有犯迷糊的時候。ide

根據環境變量自動讀取

.Net Core的project,都有一個startup.cs文件,這個文件是服務啓動的時候就會執行的過程,因此選在這裏把須要的依賴注入,進行初始化:函數

public Startup(IHostingEnvironment env)
{
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();

        //Get key vault URL and environment
        var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>();
        EnvironmentSettings settings = SettingsProvider.Settings(appSettings.KeyVaultURI, appSettings.Environment);
        ServiceManager.Initialize(settings);
}

這個構造函數的參數env,帶有環境變量的值:env.EnvironmentName,根據這個值的不一樣,在項目裏添加三個settings的json文件。工具

每個josn裏面的結構必須保持一下,這樣序列化的時候才能正常解析正確的值。固然,也要符合json的語法,可使用json校驗工具檢查一下。測試

配置project環境變量

.net Core的項目文件,在PackageRoot下,都有一個ServiceManifest.xml文件,把一下代碼加入進去,要注意的是環境變量的Name必須是:ASPNETCORE_ENVIRONMENT
不然讀取失敗。ui

默認是開發環境(Development)。.net

環境變量能夠被override

在Service fabric下,有個ApplicationManifest.xml3d

這個文件能夠配置對應的參數列表(parameters),添加一列環境變量:

在這個文件的下方,在須要根據環境變量讀取配置的project對應節點內,添加環境變量的Name-Value,這裏[Environment]的意思是,讀取上圖中的Environment參數對應的值。

部署時,選擇對應的xml文件

在ApplicationParamerters文件夾下,添加對應的參數文件,每一個文件的內容就是對應部署環境的配置文件的名稱:

publish的時候,選擇對應部署環境的xml文件便可:

這樣,主要部署的時候,選對了相應的xml文件,程序啓動的時候,startup就能夠正確讀取到對應的配置。

後記

這應就減小課不少出錯的可能,項目交接的時候,也不省了很多交接內容。

參考:https://stackoverflow.com/questions/33928204/where-do-you-set-and-access-run-time-configuration-parameters-per-environment-fo
https://docs.microsoft.com/en-us/powershell/module/servicefabric/new-servicefabricapplication?view=azureservicefabricps

若是以爲有幫助,就點個推薦吧; 若是寫的很差,歡迎評論指出。

相關文章
相關標籤/搜索