diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3566ace3..c3ec7ee9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,6 +10,7 @@ variables: PROD_NAME_ESPP_ORDER_MANAGER: "parr/parr-espp-order-manager" PROD_NAME_MASTER: "parr/parr-master" PROD_NAME_NEXT_RUN: "parr/parr-next-run" + PROD_TEMPLATE_DISTRIBOTOR: "parr/parr-template-distributor" stages: - build @@ -508,3 +509,52 @@ prod_next_run_deploy: tags: - ${RUNNER} + + +### TEMPLATE DISTRIBUTOR PROD ### +prod_template_distributor_build: + stage: build + only: + - /^td[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 td) + - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/td/v/g') + - docker build -t $REPO/$PROD_TEMPLATE_DISTRIBOTOR:$IMAGE_VERSION -t $REPO/$PROD_TEMPLATE_DISTRIBOTOR:latest -t $PROD_TEMPLATE_DISTRIBOTOR:$IMAGE_VERSION -t $PROD_TEMPLATE_DISTRIBOTOR:latest --build-arg app_version=$APP_VERSION -f PARR.TemplateDistributorWorker/Dockerfile . + - docker login -u $HARBOR_PUSH_USER -p $HARBOR_PUSH_PASS $REPO + - docker push --all-tags $REPO/$PROD_TEMPLATE_DISTRIBOTOR + tags: + - docker + + +prod_template_distributor_deploy: + stage: deploy + environment: + name: parr-template-distributor + only: + - /^td[0-9]+\.[0-9]+\.[0-9]+$/ + except: + - branches + script: + - IMAGE_VERSION=$(echo $CI_COMMIT_TAG | sed 's/td/v/g') + - docker login -u $HARBOR_PULL_USER -p $HARBOR_PULL_PASS $REPO + - tag=$IMAGE_VERSION docker stack deploy -c docker-compose.template-distributor.yml parr-template-distributor --with-registry-auth + parallel: + matrix: + - RUNNER: shell-api-swarm-01 + tags: + - ${RUNNER} + diff --git a/PARR.API.sln b/PARR.API.sln index cacc7524..e20e76d7 100644 --- a/PARR.API.sln +++ b/PARR.API.sln @@ -68,6 +68,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.NextRun", "PARR.NextRu EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.NextRunWorker", "PARR.NextRunWorker\PARR.NextRunWorker.csproj", "{47C6E193-257A-4001-84D7-11B640E3D1A0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.TemplateDistributor", "PARR.TemplateDistributor\PARR.TemplateDistributor.csproj", "{9A8D1E97-1508-4A6E-9782-C7438224D435}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PARR.TemplateDistributorWorker", "PARR.TemplateDistributorWorker\PARR.TemplateDistributorWorker.csproj", "{89155CAB-295D-4937-8B7A-05170587A2BC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -184,6 +188,14 @@ Global {47C6E193-257A-4001-84D7-11B640E3D1A0}.Debug|Any CPU.Build.0 = Debug|Any CPU {47C6E193-257A-4001-84D7-11B640E3D1A0}.Release|Any CPU.ActiveCfg = Release|Any CPU {47C6E193-257A-4001-84D7-11B640E3D1A0}.Release|Any CPU.Build.0 = Release|Any CPU + {9A8D1E97-1508-4A6E-9782-C7438224D435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A8D1E97-1508-4A6E-9782-C7438224D435}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A8D1E97-1508-4A6E-9782-C7438224D435}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A8D1E97-1508-4A6E-9782-C7438224D435}.Release|Any CPU.Build.0 = Release|Any CPU + {89155CAB-295D-4937-8B7A-05170587A2BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {89155CAB-295D-4937-8B7A-05170587A2BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {89155CAB-295D-4937-8B7A-05170587A2BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {89155CAB-295D-4937-8B7A-05170587A2BC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PARR.TemplateDistributor/PARR.TemplateDistributor.csproj b/PARR.TemplateDistributor/PARR.TemplateDistributor.csproj new file mode 100644 index 00000000..4d002e29 --- /dev/null +++ b/PARR.TemplateDistributor/PARR.TemplateDistributor.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + enable + enable + + + + + + + + + diff --git a/PARR.TemplateDistributor/Settings/MqSettings.cs b/PARR.TemplateDistributor/Settings/MqSettings.cs new file mode 100644 index 00000000..80c9a3b4 --- /dev/null +++ b/PARR.TemplateDistributor/Settings/MqSettings.cs @@ -0,0 +1,12 @@ +using PARR.BLL.Contracts.Interfaces; + +namespace PARR.TemplateDistributor.Settings +{ + internal class MqSettings : IMqSettings + { + public string HostName { get; set; } = string.Empty; + public string QueueName { get; set; } = string.Empty; + public string User { get; set; } = string.Empty; + public string Password { get; set; } = string.Empty; + } +} diff --git a/PARR.TemplateDistributor/TemplateDistributorInstaller.cs b/PARR.TemplateDistributor/TemplateDistributorInstaller.cs new file mode 100644 index 00000000..9a6577ac --- /dev/null +++ b/PARR.TemplateDistributor/TemplateDistributorInstaller.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using PARR.BLL; +using PARR.DAL; +using PARR.TemplateDistributor.Settings; + +namespace PARR.TemplateDistributor +{ + public static class TemplateDistributorInstaller + { + public static void InstallTemplateDistributorSerivces(this IServiceCollection services, IConfiguration configuration) + { + services.InstallBllServices(configuration); + services.InstallDalServices(configuration); + + var mqSettings = new MqSettings(); + configuration.GetSection(nameof(MqSettings)).Bind(mqSettings); + services.AddSingleton(mqSettings); + + //services.AddTransient(); + } + } +} diff --git a/PARR.TemplateDistributorWorker/Dockerfile b/PARR.TemplateDistributorWorker/Dockerfile new file mode 100644 index 00000000..92ed10e5 --- /dev/null +++ b/PARR.TemplateDistributorWorker/Dockerfile @@ -0,0 +1,28 @@ +#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 +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["NuGet.config", "."] +COPY ["PARR.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj", "PARR.TemplateDistributorWorker/"] +COPY ["PARR.TemplateDistributor/PARR.TemplateDistributor.csproj", "PARR.TemplateDistributor/"] +COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"] +COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"] +COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"] +RUN dotnet restore "./PARR.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj" +COPY . . +WORKDIR "/src/PARR.TemplateDistributorWorker" +RUN dotnet build "./PARR.TemplateDistributorWorker.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG app_version=0.0.0-default +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./PARR.TemplateDistributorWorker.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false /p:Version=$app_version + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "PARR.TemplateDistributorWorker.dll"] \ No newline at end of file diff --git a/PARR.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj b/PARR.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj new file mode 100644 index 00000000..2f098384 --- /dev/null +++ b/PARR.TemplateDistributorWorker/PARR.TemplateDistributorWorker.csproj @@ -0,0 +1,24 @@ + + + + net7.0 + enable + enable + dotnet-PARR.TemplateDistributorWorker-ec6016b0-eb25-4847-b0cf-a0ca10a6f6e2 + Linux + + + + + + + + + + + + + + + + diff --git a/PARR.TemplateDistributorWorker/Program.cs b/PARR.TemplateDistributorWorker/Program.cs new file mode 100644 index 00000000..937eb77a --- /dev/null +++ b/PARR.TemplateDistributorWorker/Program.cs @@ -0,0 +1,30 @@ +using PARR.TemplateDistributorWorker; +using PARR.TemplateDistributor; +using Serilog; +using Elastic.CommonSchema.Serilog; + +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.InstallTemplateDistributorSerivces(builder.Configuration); + +builder.Services.AddHostedService(); + +var host = builder.Build(); +host.Run(); + diff --git a/PARR.TemplateDistributorWorker/Properties/launchSettings.json b/PARR.TemplateDistributorWorker/Properties/launchSettings.json new file mode 100644 index 00000000..798a1edc --- /dev/null +++ b/PARR.TemplateDistributorWorker/Properties/launchSettings.json @@ -0,0 +1,14 @@ +{ + "profiles": { + "PARR.TemplateDistributorWorker": { + "commandName": "Project", + "environmentVariables": { + "DOTNET_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true + }, + "Container (Dockerfile)": { + "commandName": "Docker" + } + } +} \ No newline at end of file diff --git a/PARR.TemplateDistributorWorker/Worker.cs b/PARR.TemplateDistributorWorker/Worker.cs new file mode 100644 index 00000000..c09abb44 --- /dev/null +++ b/PARR.TemplateDistributorWorker/Worker.cs @@ -0,0 +1,21 @@ +namespace PARR.TemplateDistributorWorker +{ + public class Worker : BackgroundService + { + private readonly ILogger _logger; + + public Worker(ILogger logger) + { + _logger = logger; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + //while (!stoppingToken.IsCancellationRequested) + //{ + // _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); + // await Task.Delay(1000, stoppingToken); + //} + } + } +} diff --git a/PARR.TemplateDistributorWorker/appsettings.Development.json b/PARR.TemplateDistributorWorker/appsettings.Development.json new file mode 100644 index 00000000..992d2719 --- /dev/null +++ b/PARR.TemplateDistributorWorker/appsettings.Development.json @@ -0,0 +1,11 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "MqSettings": { + "HostName": "10.99.253.216" + } +} diff --git a/PARR.TemplateDistributorWorker/appsettings.json b/PARR.TemplateDistributorWorker/appsettings.json new file mode 100644 index 00000000..81cc4cb2 --- /dev/null +++ b/PARR.TemplateDistributorWorker/appsettings.json @@ -0,0 +1,35 @@ +{ + "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" + } + } + ] + }, + "MqSettings": { + "HostName": "parr-rabbitmq", + "QueueName": "parr-template-distributor", + "User": "espp_template_distributor_reader", + "Password": "P@ss@3441gfgkjuyy" + } +} diff --git a/README.md b/README.md index ca09c06b..c65969da 100644 --- a/README.md +++ b/README.md @@ -34,4 +34,6 @@ - PARR.MockData - загрузка тестовых данных - PARR.NextRun - рассчет следующей даты генерации наряда/запуска агента - PARR.NextRunWorker +- PARR.TemplateDistributor - автораспределение РР +- PARR.TemplateDistributorWorker - PARR.Test - тестирование функций ПАРР diff --git a/docker-compose.dcproj b/docker-compose.dcproj index c4ac204d..bebd743d 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -18,6 +18,7 @@ + diff --git a/docker-compose.template-distributor.yml b/docker-compose.template-distributor.yml new file mode 100644 index 00000000..368c8297 --- /dev/null +++ b/docker-compose.template-distributor.yml @@ -0,0 +1,25 @@ +version: '3.4' + +#PARR TEMPLATE DISTRIBUTOR +services: + parr-template-distributor: + image: harbor.dvgd.rzd/parr/parr-template-distributor:${tag-latest} + environment: + - ASPNETCORE_ENVIRONMENT=Production + - TZ=Europe/Moscow + logging: + driver: fluentd + options: + fluentd-address: dvgd-efk-01.dvgd.oao.rzd:24224 + fluentd-retry-wait: '30s' + fluentd-max-retries: '30' + tag: parr.template-distributor.serilog + deploy: + replicas: 2 + networks: + parr-network: + +networks: + parr-network: + driver: overlay + external: true \ No newline at end of file