Dockerコンテナを実行しているときに複数のIDEの.NetCoreConsoleアプリで構成ファイルを設定する方法

私たちのチームは、Kafkaからメッセージ処理サービスを開発しました。トピックをサブスクライブするのは.NetCoreコンソールアプリケーションであり、各トピックにメッセージが表示されると、特定の処理アルゴリズムを実行しました。サービス開発の最初の反復では、展開は非常に単純でした。アプリケーションを公開し、既製のビルドファイルをサーバーに転送し、ドッカーイメージを作成し、コンテナーでサービスを起動しました。負荷テストがやって来て、隣接する回路に配備されるまで、私たちはこのように暮らしました。もちろん、これらの輪郭のappsettings.json構成ファイルは異なり、展開にはもう1つのステップがありました。それは、構成ファイルをハンドルで修正することです。この段階で人的要因が介入し、ファイルの編集を忘れることがあり、エラーや時間の浪費につながりました。(非常に迅速に)それに飽きたら、DevOpsに電話して支援することにしました。しかし、それでも時間がかかり、手動で構成を編集する必要はありませんでした。次に、かなり迅速なソリューションを考え出し、実装しました。これについては、この記事で説明します。



初期条件は次のとおりです。



  1. 私たちのサービスはコンソールアプリケーションであり、ASP.NET Core Webアプリケーションとは異なり、すぐに使用できるソリューションはありませんでした。
  2. アプリケーションは、ドッカーコンテナから起動されます。


さて、コンソールアプリケーションでマルチ構成を使用する方法を見てみましょう。まず、開発環境とテスト環境の構成ファイルを作成しましょう。





コンソールアプリケーションにはデフォルトのネストはありません。したがって、.csprojプロジェクトファイルを開いて、以下を追加します。



<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>

      
      





開発環境の名前が付いた添付ファイルがappsettings.jsonファイルに表示されました。







ファイルappsettings.Dev.jsonおよびappsettings.Testing.jsonに、環境に応じて変化する構成の部分を追加します。appsettings.Testing.jsonに必要なパラメーターを追加して、負荷テストループのKafkaトピックの名前を変更しましょう。



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

      
      





サービスの開始時に目的のappsettings.jsonファイルを選択するだけです。これを行うには、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();
}

      
      





これで、すべてがドッカーコンテナでサービスを開始する準備が整いました。



コンテナの環境変数を指定する必要があります。これを行うにはいくつかの方法があります。



  • コマンドライン
  • テキストファイル
  • ドッカー作曲


コマンドラインで変数を指定するのをやめました。イメージを作成してコンテナを実行するスクリプトの例を次に示します。



# Build image
# docker build . -t consoleapp

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

      
      





展開用のパイプラインを作成するためのより洗練されたソリューションがありますが、この方法は短時間で実装できます。これは、プロジェクト作成の初期段階で非常に重要です。 プロジェクトでGitHubに



リンクし ます



あなたの注意と楽しいコーディングに感謝します!



All Articles