Cara mengatur file konfigurasi di aplikasi .Net Core Console untuk beberapa IDE saat menjalankan container Docker

Tim kami mengembangkan layanan pemrosesan pesan dari Kafka. Itu adalah aplikasi konsol .Net Core yang berlangganan topik, dan ketika sebuah pesan muncul di masing-masing topik, itu melakukan algoritma pemrosesan tertentu. Pada iterasi pertama pengembangan layanan kami, penerapannya cukup sederhana: kami menerbitkan aplikasi, mentransfer file build siap pakai ke server, membuat image buruh pelabuhan, dan meluncurkan layanan dalam container. Kami hidup seperti ini sampai pengujian beban datang kepada kami dan ditempatkan di sirkuit tetangga. File konfigurasi appsettings.json dalam kontur ini, tentu saja, berbeda dan kami memiliki langkah lain dalam penerapan kami - memperbaiki file konfigurasi dengan pegangan. Pada tahap ini, faktor manusia ikut campur, dan terkadang kami lupa mengedit file, yang menyebabkan kesalahan dan waktu terbuang percuma.Ketika kami bosan (sangat cepat), kami memutuskan untuk memanggil DevOps untuk membantu. Tapi tetap saja, butuh waktu, dan tidak ada lagi upaya untuk mengedit konfigurasi secara manual. Kemudian saya datang dengan dan menerapkan solusi yang cukup cepat, yang ingin saya bicarakan di artikel ini.



Inilah kondisi awal kami:



  1. Layanan kami adalah Aplikasi Konsol, dan tidak seperti Aplikasi Web Inti ASP.NET, kami tidak memiliki solusi di luar kotak.
  2. Aplikasi diluncurkan dari kontainer buruh pelabuhan.


Nah, mari kita lihat bagaimana menggunakan multi konfigurasi dalam aplikasi konsol. Pertama, mari buat file konfigurasi untuk lingkungan Dev dan Pengujian kami:





Tidak ada penyarangan default dalam aplikasi konsol. Oleh karena itu, buka file proyek .csproj dan tambahkan:



<ItemGroup>
	<Content Include="appsettings.json">
		<CopyToOutputDirectory>Always</CopyToOutputDirectory>
	</Content>
	<Content Include="appsettings.Dev.json;appsettings.Testing.json;">
		<DependentUpon>appsettings.json</DependentUpon>
		<CopyToOutputDirectory>Always</CopyToOutputDirectory>
	</Content>
</ItemGroup>

      
      





File terlampir dengan nama lingkungan pengembangan muncul di file appsettings.json:







Di file appsettings.Dev.json dan appsettings.Testing.json, tambahkan bagian-bagian konfigurasi yang berubah tergantung pada lingkungan. Mari ubah nama topik Kafka di loop pengujian beban dengan menambahkan parameter yang diperlukan ke appsettings.Testing.json:



{
  "Kafka": 
  {
    "EventMainTopicTitle": "Test_EventMain",
    "EventDelayTopicTitle": "Test_EventDelay",
    "EventRejectTopicTitle": "Test_EventReject"
  }
}

      
      





Tetap hanya memilih file appsettings.json yang diinginkan selama awal layanan. Untuk melakukan ini, mari buat perubahan pada kelas Program:



///  
private static IServiceProvider ConfigureServices()
{
    //    
    const string environmentVariableName = "ASPNETCORE_ENVIRONMENT";
    //    
    var environmentName = 
        Environment.GetEnvironmentVariable(environmentVariableName);

    var services = new ServiceCollection();

    _configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
        .AddJsonFile("appsettings.json")
        //  json-   environmentName
        .AddJsonFile($"appsettings.{environmentName}.json")
        .AddEnvironmentVariables()
        .Build();

    services.AddSingleton(_configuration);
    services.AddSingleton<KafkaHandler>();

    return services.BuildServiceProvider();
}

      
      





Sekarang semuanya siap untuk memulai layanan di kontainer buruh pelabuhan.



Tetap menentukan variabel lingkungan untuk penampung. Ada beberapa cara untuk melakukannya:



  • garis komando
  • file teks
  • buruh pelabuhan menulis


Saya berhenti di menentukan variabel pada baris perintah. Berikut ini contoh skrip untuk membuat gambar dan menjalankan container:



# Build image
# docker build . -t consoleapp

# Run container on Dev
# docker run -d <i>--env ASPNETCORE_ENVIRONMENT=Dev</i> --name app consoleapp

      
      





Ada solusi yang lebih elegan untuk membuat pipeline untuk penerapan Anda, tetapi metode ini dapat diterapkan dalam waktu singkat, yang sangat penting pada tahap awal pembuatan proyek.



Tautkan ke GitHub dengan proyek tersebut .



Terima kasih atas perhatian Anda dan coding yang menyenangkan!



All Articles