Voici nos conditions initiales:
- Notre service est une application console et, contrairement à l'application Web ASP.NET Core, nous n'avions pas de solution prête à l'emploi.
- L'application est lancée à partir du conteneur docker.
Eh bien, voyons comment utiliser la configuration multiple dans une application console. Commençons par créer des fichiers de configuration pour nos environnements de développement et de test:
Il n'y a pas d'imbrication par défaut dans les applications console. Par conséquent, ouvrez le fichier de projet .csproj et ajoutez:
<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>
Les fichiers joints avec le nom de l'environnement de développement sont apparus dans le fichier appsettings.json:
Dans les fichiers appsettings.Dev.json et appsettings.Testing.json, ajoutez les parties de la configuration qui changent en fonction de l'environnement. Modifions le nom des sujets Kafka dans la boucle de test de charge en ajoutant les paramètres nécessaires à appsettings.Testing.json:
{
"Kafka":
{
"EventMainTopicTitle": "Test_EventMain",
"EventDelayTopicTitle": "Test_EventDelay",
"EventRejectTopicTitle": "Test_EventReject"
}
}
Il ne reste plus qu'à sélectionner le fichier appsettings.json souhaité lors du démarrage du service. Pour ce faire, apportons des modifications à la classe 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();
}
Maintenant, tout est prêt pour démarrer le service dans un conteneur docker.
Il reste à spécifier les variables d'environnement du conteneur. Il y a plusieurs moyens de le faire:
- ligne de commande
- fichier texte
- docker composer
Je me suis arrêté à spécifier des variables sur la ligne de commande. Voici un exemple de script pour créer une image et lancer un conteneur:
# Build image
# docker build . -t consoleapp
# Run container on Dev
# docker run -d <i>--env ASPNETCORE_ENVIRONMENT=Dev</i> --name app consoleapp
Il existe des solutions plus élégantes pour créer un pipeline pour votre déploiement, mais cette méthode peut être mise en œuvre en peu de temps, ce qui est très critique au stade initial de la création du projet.
Lien vers GitHub avec le projet .
Merci pour votre attention et votre codage agréable!