From eebbb09325c078e1d554a8163b84663026c354e3 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Mon, 23 Oct 2023 09:56:36 +1000 Subject: [PATCH] =?UTF-8?q?feat(esppOrderManager):=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D1=8B=20=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8,=20docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 54 ++++++++++++++++++- .../PARR.EsppOrderManager.csproj | 1 + .../ParrEsppOrderManagerInstaller.cs | 39 ++++++++++++++ PARR.EsppOrderManagerWorker/Dockerfile | 26 +++++++++ .../PARR.EsppOrderManagerWorker.csproj | 7 +++ PARR.EsppOrderManagerWorker/Program.cs | 34 +++++++++--- .../Properties/launchSettings.json | 11 ++-- PARR.EsppOrderManagerWorker/Worker.cs | 12 +++-- PARR.EsppOrderManagerWorker/appsettings.json | 21 ++++++++ docker-compose.espp-order-manager.yml | 23 ++++++++ 10 files changed, 211 insertions(+), 17 deletions(-) create mode 100644 PARR.EsppOrderManager/ParrEsppOrderManagerInstaller.cs create mode 100644 PARR.EsppOrderManagerWorker/Dockerfile create mode 100644 docker-compose.espp-order-manager.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 830b5d6a..815d3c88 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,6 +5,7 @@ variables: PROD_NAME_ESPP_TEMPLATE: "parr/parr-espp-template-sync" PROD_NAME_GENERATOR_TEMPLATES: "parr/parr-generator-templates" PROD_NAME_ESPP_ORDER_LOADER: "parr/parr-espp-order-loader" + PROD_NAME_ESPP_ORDER_MANAGER: "parr/parr-espp-order-manager" stages: - build @@ -214,8 +215,7 @@ prod_generator_templates_deploy: - ${RUNNER} -### ESPP ORDER LOADER ### -#PROD_NAME_ESPP_ORDER_LOADER +### ESPP ORDER LOADER PROD ### prod_espp_order_loader_build: stage: build only: @@ -259,5 +259,55 @@ prod_espp_order_loader_deploy: parallel: matrix: - RUNNER: shell-api-swarm-01 + tags: + - ${RUNNER} + + +### ESPP ORDER MANAGER PROD ### + +#PROD_NAME_ESPP_ORDER_MANAGER +prod_espp_order_manager_build: + stage: build + only: + - /^om[0-9]+\.[0-9]+\.[0-9]+$/ + except: + - branches + services: + - name: docker:20.10.21-dind + command: [ + "--insecure-registry=10.99.253.167:8090", + "--registry-mirror=http://10.99.253.167:8090", + "--insecure-registry=harbor.dvgd.rzd", + "--tls=false" + ] + variables: + DOCKER_HOST: tcp://docker:2375 + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + script: + - APP_VERSION=$(echo $CI_COMMIT_TAG | tr -d om) + - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/om/v/g') + - docker build -t $REPO/$PROD_NAME_ESPP_ORDER_MANAGER:$IMAGE_VERSION -t $REPO/$PROD_NAME_ESPP_ORDER_MANAGER:latest -t $PROD_NAME_ESPP_ORDER_MANAGER:$IMAGE_VERSION -t $PROD_NAME_ESPP_ORDER_MANAGER:latest --build-arg app_version=$APP_VERSION -f PARR.EsppOrderManagerWorker/Dockerfile . + - docker login -u $HARBOR_PUSH_USER -p $HARBOR_PUSH_PASS $REPO + - docker push --all-tags $REPO/$PROD_NAME_ESPP_ORDER_MANAGER + tags: + - docker + + +prod_espp_order_manager_deploy: + stage: deploy + environment: + name: parr-espp-order-manager + only: + - /^om[0-9]+\.[0-9]+\.[0-9]+$/ + except: + - branches + script: + - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/om/v/g') + - docker login -u $HARBOR_PULL_USER -p $HARBOR_PULL_PASS $REPO + - tag=$IMAGE_VERSION docker stack deploy -c docker-compose.espp-order-manager.yml parr-espp-order-manager --with-registry-auth + parallel: + matrix: + - RUNNER: shell-api-swarm-01 tags: - ${RUNNER} \ No newline at end of file diff --git a/PARR.EsppOrderManager/PARR.EsppOrderManager.csproj b/PARR.EsppOrderManager/PARR.EsppOrderManager.csproj index 0acb0120..74361878 100644 --- a/PARR.EsppOrderManager/PARR.EsppOrderManager.csproj +++ b/PARR.EsppOrderManager/PARR.EsppOrderManager.csproj @@ -7,6 +7,7 @@ + diff --git a/PARR.EsppOrderManager/ParrEsppOrderManagerInstaller.cs b/PARR.EsppOrderManager/ParrEsppOrderManagerInstaller.cs new file mode 100644 index 00000000..e372403c --- /dev/null +++ b/PARR.EsppOrderManager/ParrEsppOrderManagerInstaller.cs @@ -0,0 +1,39 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using PARR.BLL; +using PARR.DAL; +using PARR.EsppApi; + +namespace PARR.EsppOrderManager +{ + public static class ParrEsppOrderManagerInstaller + { + public static void InstallEsppOrderManagerServices(this IServiceCollection services, IConfiguration configuration) + { + services.InstallBllServices(configuration); + services.InstallDalServices(configuration); + services.InstallEsppApiServices(configuration); + + // settings + //SettingsFromDb configuration + //var settingsFromDb = new SettingsFromDb(); + //configuration.GetSection(nameof(SettingsFromDb)).Bind(settingsFromDb); + //services.AddSingleton(settingsFromDb); + + //add other services + //services.AddTransient(); + } + + public static IConfigurationBuilder AddEsppOrderManagerConfigurations(this IConfigurationBuilder builder, IServiceCollection services) + { + builder.AddDalConfigurations(services); + + return builder; + } + + public static void AddEsppOrderManagerSettings(this IServiceCollection services, IConfiguration configuration) + { + services.AddDallSettings(configuration); + } + } +} diff --git a/PARR.EsppOrderManagerWorker/Dockerfile b/PARR.EsppOrderManagerWorker/Dockerfile new file mode 100644 index 00000000..6fc09ca3 --- /dev/null +++ b/PARR.EsppOrderManagerWorker/Dockerfile @@ -0,0 +1,26 @@ +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM 10.99.253.167:8090/dotnet/runtime:7.0 AS base +WORKDIR /app + +FROM 10.99.253.167:8090/dotnet/sdk:7.0 AS build +WORKDIR /src +COPY ["NuGet.config", "."] +COPY ["PARR.EsppOrderManagerWorker/PARR.EsppOrderManagerWorker.csproj", "PARR.EsppOrderManagerWorker/"] +COPY ["PARR.EsppOrderManager/PARR.EsppOrderManager.csproj", "PARR.EsppOrderManager/"] +COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] +COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] +COPY ["PARR.EsppApi/PARR.EsppApi.csproj", "PARR.EsppApi/"] +RUN dotnet restore "PARR.EsppOrderManagerWorker/PARR.EsppOrderManagerWorker.csproj" +COPY . . +WORKDIR "/src/PARR.EsppOrderManagerWorker" +RUN dotnet build "PARR.EsppOrderManagerWorker.csproj" -c Release -o /app/build + +FROM build AS publish +ARG app_version=0.0.0-default +RUN dotnet publish "PARR.EsppOrderManagerWorker.csproj" -c Release -o /app/publish /p:UseAppHost=false /p:Version=$app_version + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "PARR.EsppOrderManagerWorker.dll"] \ No newline at end of file diff --git a/PARR.EsppOrderManagerWorker/PARR.EsppOrderManagerWorker.csproj b/PARR.EsppOrderManagerWorker/PARR.EsppOrderManagerWorker.csproj index ecc4640a..aa93487f 100644 --- a/PARR.EsppOrderManagerWorker/PARR.EsppOrderManagerWorker.csproj +++ b/PARR.EsppOrderManagerWorker/PARR.EsppOrderManagerWorker.csproj @@ -5,10 +5,17 @@ enable enable dotnet-PARR.EsppOrderManagerWorker-a4ce7a82-5723-4e74-87e1-eca04735f524 + Linux + + + + + + diff --git a/PARR.EsppOrderManagerWorker/Program.cs b/PARR.EsppOrderManagerWorker/Program.cs index ae6cd33c..271e8644 100644 --- a/PARR.EsppOrderManagerWorker/Program.cs +++ b/PARR.EsppOrderManagerWorker/Program.cs @@ -1,10 +1,32 @@ +using Elastic.CommonSchema.Serilog; +using PARR.EsppOrderManager; using PARR.EsppOrderManagerWorker; +using Serilog; -IHost host = Host.CreateDefaultBuilder(args) - .ConfigureServices(services => - { - services.AddHostedService(); - }) - .Build(); +var builder = Host.CreateApplicationBuilder(); +builder.Services.AddLogging(config => +{ + config.ClearProviders(); + + var logger = new LoggerConfiguration(); + + if (builder.Environment.IsProduction()) + logger.WriteTo.Console(new EcsTextFormatter()); + else + logger.WriteTo.Console(); + + logger.ReadFrom.Configuration(builder.Configuration); + + config.AddSerilog(logger.CreateLogger()); +}); + +builder.Services.InstallEsppOrderManagerServices(builder.Configuration); +builder.Configuration.AddEsppOrderManagerConfigurations(builder.Services); +builder.Services.AddEsppOrderManagerSettings(builder.Configuration); + +builder.Services.AddHostedService(); + +var host = builder.Build(); host.Run(); + diff --git a/PARR.EsppOrderManagerWorker/Properties/launchSettings.json b/PARR.EsppOrderManagerWorker/Properties/launchSettings.json index 1911ed6e..a5b81ada 100644 --- a/PARR.EsppOrderManagerWorker/Properties/launchSettings.json +++ b/PARR.EsppOrderManagerWorker/Properties/launchSettings.json @@ -1,11 +1,14 @@ -{ +{ "profiles": { "PARR.EsppOrderManagerWorker": { "commandName": "Project", - "dotnetRunMessages": true, "environmentVariables": { "DOTNET_ENVIRONMENT": "Development" - } + }, + "dotnetRunMessages": true + }, + "Docker": { + "commandName": "Docker" } } -} +} \ No newline at end of file diff --git a/PARR.EsppOrderManagerWorker/Worker.cs b/PARR.EsppOrderManagerWorker/Worker.cs index e14edb02..50c29b5e 100644 --- a/PARR.EsppOrderManagerWorker/Worker.cs +++ b/PARR.EsppOrderManagerWorker/Worker.cs @@ -11,11 +11,13 @@ namespace PARR.EsppOrderManagerWorker protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - while (!stoppingToken.IsCancellationRequested) - { - _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); - await Task.Delay(1000, stoppingToken); - } + _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); + + //while (!stoppingToken.IsCancellationRequested) + //{ + // _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); + // await Task.Delay(1000, stoppingToken); + //} } } } \ No newline at end of file diff --git a/PARR.EsppOrderManagerWorker/appsettings.json b/PARR.EsppOrderManagerWorker/appsettings.json index b2dcdb67..96a98cc3 100644 --- a/PARR.EsppOrderManagerWorker/appsettings.json +++ b/PARR.EsppOrderManagerWorker/appsettings.json @@ -1,8 +1,29 @@ { + "ConnectionStrings": { + "DefaultConnection": "Server=10.99.253.184;Database=parr;User Id=app_parr; Password=PosdfkhT&)%sdfligL&%5546;" + }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.Hosting.Lifetime": "Information" } + }, + "Serilog": { + "MinimumLevel": { + "Default": "Debug", + "Override": { + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Debug" + } + }, + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "log/log-.txt", + "rollingInterval": "Day" + } + } + ] } } diff --git a/docker-compose.espp-order-manager.yml b/docker-compose.espp-order-manager.yml new file mode 100644 index 00000000..4b0be2c5 --- /dev/null +++ b/docker-compose.espp-order-manager.yml @@ -0,0 +1,23 @@ +version: '3.4' + +# ESPP ORDER MANAGER +services: + parr-espp-order-manager: + image: harbor.dvgd.rzd/parr/parr-espp-order-manager:${tag:-latest} + environment: + - ASPNETCORE_ENVIRONMENT=Production + - TZ=Europe/Moscow + logging: + driver: fluentd + options: + fluentd-address: dvgd-mng-02.dvgd.oao.rzd:24224 + tag: parr.espp-order-manager.serilog + deploy: + replicas: 1 + networks: + - parr-network + +networks: + parr-network: + driver: overlay + external: true