@ -1,13 +0,0 @@ | |||||
namespace Ordering.BackgroundTasks.Configuration | |||||
{ | |||||
public class BackgroundTaskSettings | |||||
{ | |||||
public string ConnectionString { get; set; } | |||||
public string EventBusConnection { get; set; } | |||||
public int GracePeriodTime { get; set; } | |||||
public int CheckUpdateTime { get; set; } | |||||
} | |||||
} |
@ -1,25 +0,0 @@ | |||||
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base | |||||
WORKDIR /app | |||||
EXPOSE 80 | |||||
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build | |||||
WORKDIR /src | |||||
COPY scripts scripts/ | |||||
COPY src/ApiGateways/*/*.csproj /src/csproj-files/ | |||||
COPY src/ApiGateways/*/*/*.csproj /src/csproj-files/ | |||||
COPY src/BuildingBlocks/*/*/*.csproj /src/csproj-files/ | |||||
COPY src/Services/*/*/*.csproj /src/csproj-files/ | |||||
COPY src/Web/*/*.csproj /src/csproj-files/ | |||||
COPY . . | |||||
WORKDIR /src/src/Services/Ordering/Ordering.BackgroundTasks | |||||
RUN dotnet publish -c Release -o /app | |||||
FROM build AS publish | |||||
FROM base AS final | |||||
WORKDIR /app | |||||
COPY --from=publish /app . | |||||
ENTRYPOINT ["dotnet", "Ordering.BackgroundTasks.dll"] |
@ -1,18 +0,0 @@ | |||||
FROM microsoft/dotnet:2.2-sdk | |||||
ARG BUILD_CONFIGURATION=Debug | |||||
ENV ASPNETCORE_ENVIRONMENT=Development | |||||
ENV DOTNET_USE_POLLING_FILE_WATCHER=true | |||||
EXPOSE 80 | |||||
WORKDIR /src | |||||
COPY ["src/BuildingBlocks/EventBus/EventBus/EventBus.csproj", "src/BuildingBlocks/EventBus/EventBus/"] | |||||
COPY ["src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj", "src/BuildingBlocks/EventBus/EventBusRabbitMQ/"] | |||||
COPY ["src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj", "src/BuildingBlocks/EventBus/EventBusServiceBus/"] | |||||
COPY ["src/Services/Ordering/Ordering.BackgroundTasks/Ordering.BackgroundTasks.csproj", "src/Services/Ordering/Ordering.BackgroundTasks/"] | |||||
RUN dotnet restore src/Services/Ordering/Ordering.BackgroundTasks/Ordering.BackgroundTasks.csproj | |||||
COPY . . | |||||
WORKDIR /src/src/Services/Ordering/Ordering.BackgroundTasks | |||||
RUN dotnet build --no-restore -c $BUILD_CONFIGURATION | |||||
ENTRYPOINT ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"] |
@ -1,12 +0,0 @@ | |||||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | |||||
namespace Ordering.BackgroundTasks.IntegrationEvents | |||||
{ | |||||
public class GracePeriodConfirmedIntegrationEvent : IntegrationEvent | |||||
{ | |||||
public int OrderId { get; } | |||||
public GracePeriodConfirmedIntegrationEvent(int orderId) => | |||||
OrderId = orderId; | |||||
} | |||||
} |
@ -1,42 +0,0 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk.Web"> | |||||
<PropertyGroup> | |||||
<TargetFramework>$(NetCoreTargetVersion)</TargetFramework> | |||||
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> | |||||
<DockerComposeProjectPath>..\..\..\..\docker-compose.dcproj</DockerComposeProjectPath> | |||||
<GenerateErrorForMissingTargetingPacks>false</GenerateErrorForMissingTargetingPacks> | |||||
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled> | |||||
<LangVersion>$(LangVersion)</LangVersion> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<Compile Remove="wwwroot\**" /> | |||||
<Content Remove="wwwroot\**" /> | |||||
<EmbeddedResource Remove="wwwroot\**" /> | |||||
<None Remove="wwwroot\**" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="$(AspNetCore_HealthChecks_UI_Client)" /> | |||||
<PackageReference Include="AspNetCore.HealthChecks.AzureServiceBus" Version="$(AspNetCore_HealthChecks_AzureServiceBus)" /> | |||||
<PackageReference Include="AspNetCore.HealthChecks.Rabbitmq" Version="$(AspNetCore_HealthChecks_Rabbitmq)" /> | |||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="$(Autofac_Extensions_DependencyInjection)" /> | |||||
<PackageReference Include="Dapper" Version="$(Dapper)" /> | |||||
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.HealthChecks" Version="$(Microsoft_AspNetCore_Diagnostics_HealthChecks)" /> | |||||
<PackageReference Include="Microsoft.AspNetCore.HealthChecks" Version="$(Microsoft_AspNetCore_HealthChecks)" /> | |||||
<PackageReference Include="AspNetCore.HealthChecks.SqlServer" Version="$(AspNetCore_HealthChecks_SqlServer)" /> | |||||
<PackageReference Include="Serilog.AspNetCore" Version="$(Serilog_AspNetCore)" /> | |||||
<PackageReference Include="Serilog.Enrichers.Environment" Version="$(Serilog_Enrichers_Environment)" /> | |||||
<PackageReference Include="Serilog.Settings.Configuration" Version="$(Serilog_Settings_Configuration)" /> | |||||
<PackageReference Include="Serilog.Sinks.Console" Version="$(Serilog_Sinks_Console)" /> | |||||
<PackageReference Include="Serilog.Sinks.Seq" Version="$(Serilog_Sinks_Seq)" /> | |||||
<PackageReference Include="Serilog.Sinks.Http" Version="$(Serilog_Sinks_Http)" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBusRabbitMQ\EventBusRabbitMQ.csproj" /> | |||||
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBusServiceBus\EventBusServiceBus.csproj" /> | |||||
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBus\EventBus.csproj" /> | |||||
</ItemGroup> | |||||
</Project> |
@ -1,76 +0,0 @@ | |||||
using Microsoft.AspNetCore; | |||||
using Microsoft.AspNetCore.Hosting; | |||||
using Microsoft.Extensions.Configuration; | |||||
using Microsoft.Extensions.Logging; | |||||
using Serilog; | |||||
using System; | |||||
using System.IO; | |||||
namespace Ordering.BackgroundTasks | |||||
{ | |||||
public class Program | |||||
{ | |||||
public static readonly string Namespace = typeof(Program).Namespace; | |||||
public static readonly string AppName = Namespace; | |||||
public static int Main(string[] args) | |||||
{ | |||||
var configuration = GetConfiguration(); | |||||
Log.Logger = CreateSerilogLogger(configuration); | |||||
try | |||||
{ | |||||
Log.Information("Configuring web host ({ApplicationContext})...", AppName); | |||||
var host = BuildWebHost(configuration, args); | |||||
Log.Information("Starting web host ({ApplicationContext})...", AppName); | |||||
host.Run(); | |||||
return 0; | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
Log.Fatal(ex, "Program terminated unexpectedly ({ApplicationContext})!", AppName); | |||||
return 1; | |||||
} | |||||
finally | |||||
{ | |||||
Log.CloseAndFlush(); | |||||
} | |||||
} | |||||
private static IWebHost BuildWebHost(IConfiguration configuration, string[] args) => | |||||
WebHost.CreateDefaultBuilder(args) | |||||
.CaptureStartupErrors(false) | |||||
.UseStartup<Startup>() | |||||
.UseConfiguration(configuration) | |||||
.UseSerilog() | |||||
.Build(); | |||||
private static Serilog.ILogger CreateSerilogLogger(IConfiguration configuration) | |||||
{ | |||||
var seqServerUrl = configuration["Serilog:SeqServerUrl"]; | |||||
var logstashUrl = configuration["Serilog:LogstashgUrl"]; | |||||
return new LoggerConfiguration() | |||||
.MinimumLevel.Verbose() | |||||
.Enrich.WithProperty("ApplicationContext", AppName) | |||||
.Enrich.FromLogContext() | |||||
.WriteTo.Console() | |||||
.WriteTo.Seq(string.IsNullOrWhiteSpace(seqServerUrl) ? "http://seq" : seqServerUrl) | |||||
.WriteTo.Http(string.IsNullOrWhiteSpace(logstashUrl) ? "http://logstash:8080" : logstashUrl) | |||||
.ReadFrom.Configuration(configuration) | |||||
.CreateLogger(); | |||||
} | |||||
private static IConfiguration GetConfiguration() | |||||
{ | |||||
var builder = new ConfigurationBuilder() | |||||
.SetBasePath(Directory.GetCurrentDirectory()) | |||||
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) | |||||
.AddEnvironmentVariables(); | |||||
return builder.Build(); | |||||
} | |||||
} | |||||
} |
@ -1,29 +0,0 @@ | |||||
{ | |||||
"iisSettings": { | |||||
"windowsAuthentication": false, | |||||
"anonymousAuthentication": true, | |||||
"iisExpress": { | |||||
"applicationUrl": "http://localhost:5161/", | |||||
"sslPort": 0 | |||||
} | |||||
}, | |||||
"profiles": { | |||||
"IIS Express": { | |||||
"commandName": "IISExpress", | |||||
"launchBrowser": true, | |||||
"launchUrl": "api/values", | |||||
"environmentVariables": { | |||||
"ASPNETCORE_ENVIRONMENT": "Development" | |||||
} | |||||
}, | |||||
"Ordering.BackgroundTasks": { | |||||
"commandName": "Project", | |||||
"launchBrowser": true, | |||||
"launchUrl": "api/values", | |||||
"environmentVariables": { | |||||
"ASPNETCORE_ENVIRONMENT": "Development" | |||||
}, | |||||
"applicationUrl": "http://localhost:5162/" | |||||
} | |||||
} | |||||
} |
@ -1,199 +0,0 @@ | |||||
using Autofac; | |||||
using Autofac.Extensions.DependencyInjection; | |||||
using HealthChecks.UI.Client; | |||||
using Microsoft.AspNetCore.Builder; | |||||
using Microsoft.AspNetCore.Diagnostics.HealthChecks; | |||||
using Microsoft.Azure.ServiceBus; | |||||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus; | |||||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ; | |||||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBusServiceBus; | |||||
using Microsoft.Extensions.Configuration; | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using Microsoft.Extensions.Diagnostics.HealthChecks; | |||||
using Microsoft.Extensions.Hosting; | |||||
using Microsoft.Extensions.Logging; | |||||
using Ordering.BackgroundTasks.Configuration; | |||||
using Ordering.BackgroundTasks.Tasks; | |||||
using RabbitMQ.Client; | |||||
using System; | |||||
namespace Ordering.BackgroundTasks | |||||
{ | |||||
public class Startup | |||||
{ | |||||
public Startup(IConfiguration configuration) | |||||
{ | |||||
Configuration = configuration; | |||||
} | |||||
public IConfiguration Configuration { get; } | |||||
// This method gets called by the runtime. Use this method to add services to the container. | |||||
public IServiceProvider ConfigureServices(IServiceCollection services) | |||||
{ | |||||
//add health check for this service | |||||
services.AddCustomHealthCheck(Configuration); | |||||
//configure settings | |||||
services.Configure<BackgroundTaskSettings>(Configuration); | |||||
services.AddOptions(); | |||||
//configure background task | |||||
services.AddSingleton<IHostedService, GracePeriodManagerService>(); | |||||
//configure event bus related services | |||||
if (Configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||||
{ | |||||
services.AddSingleton<IServiceBusPersisterConnection>(sp => | |||||
{ | |||||
var logger = sp.GetRequiredService<ILogger<DefaultServiceBusPersisterConnection>>(); | |||||
var serviceBusConnectionString = Configuration["EventBusConnection"]; | |||||
var serviceBusConnection = new ServiceBusConnectionStringBuilder(serviceBusConnectionString); | |||||
return new DefaultServiceBusPersisterConnection(serviceBusConnection, logger); | |||||
}); | |||||
} | |||||
else | |||||
{ | |||||
services.AddSingleton<IRabbitMQPersistentConnection>(sp => | |||||
{ | |||||
var logger = sp.GetRequiredService<ILogger<DefaultRabbitMQPersistentConnection>>(); | |||||
var factory = new ConnectionFactory() | |||||
{ | |||||
HostName = Configuration["EventBusConnection"], | |||||
DispatchConsumersAsync = true | |||||
}; | |||||
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"])) | |||||
{ | |||||
factory.UserName = Configuration["EventBusUserName"]; | |||||
} | |||||
if (!string.IsNullOrEmpty(Configuration["EventBusPassword"])) | |||||
{ | |||||
factory.Password = Configuration["EventBusPassword"]; | |||||
} | |||||
var retryCount = 5; | |||||
if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) | |||||
{ | |||||
retryCount = int.Parse(Configuration["EventBusRetryCount"]); | |||||
} | |||||
return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); | |||||
}); | |||||
} | |||||
RegisterEventBus(services); | |||||
//create autofac based service provider | |||||
var container = new ContainerBuilder(); | |||||
container.Populate(services); | |||||
return new AutofacServiceProvider(container.Build()); | |||||
} | |||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. | |||||
public void Configure(IApplicationBuilder app) | |||||
{ | |||||
app.UseRouting(); | |||||
app.UseEndpoints(endpoints => | |||||
{ | |||||
endpoints.MapHealthChecks("/hc", new HealthCheckOptions() | |||||
{ | |||||
Predicate = _ => true, | |||||
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse | |||||
}); | |||||
endpoints.MapHealthChecks("/liveness", new HealthCheckOptions | |||||
{ | |||||
Predicate = r => r.Name.Contains("self") | |||||
}); | |||||
}); | |||||
} | |||||
private void RegisterEventBus(IServiceCollection services) | |||||
{ | |||||
var subscriptionClientName = Configuration["SubscriptionClientName"]; | |||||
if (Configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||||
{ | |||||
services.AddSingleton<IEventBus, EventBusServiceBus>(sp => | |||||
{ | |||||
var serviceBusPersisterConnection = sp.GetRequiredService<IServiceBusPersisterConnection>(); | |||||
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>(); | |||||
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>(); | |||||
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>(); | |||||
return new EventBusServiceBus(serviceBusPersisterConnection, logger, | |||||
eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope); | |||||
}); | |||||
} | |||||
else | |||||
{ | |||||
services.AddSingleton<IEventBus, EventBusRabbitMQ>(sp => | |||||
{ | |||||
var rabbitMQPersistentConnection = sp.GetRequiredService<IRabbitMQPersistentConnection>(); | |||||
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>(); | |||||
var logger = sp.GetRequiredService<ILogger<EventBusRabbitMQ>>(); | |||||
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>(); | |||||
var retryCount = 5; | |||||
if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) | |||||
{ | |||||
retryCount = int.Parse(Configuration["EventBusRetryCount"]); | |||||
} | |||||
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount); | |||||
}); | |||||
} | |||||
services.AddSingleton<IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>(); | |||||
} | |||||
} | |||||
public static class CustomExtensionMethods | |||||
{ | |||||
public static IServiceCollection AddCustomHealthCheck(this IServiceCollection services, IConfiguration configuration) | |||||
{ | |||||
var hcBuilder = services.AddHealthChecks(); | |||||
hcBuilder.AddCheck("self", () => HealthCheckResult.Healthy()); | |||||
hcBuilder | |||||
.AddSqlServer( | |||||
configuration["ConnectionString"], | |||||
name: "OrderingTaskDB-check", | |||||
tags: new string[] { "orderingtaskdb" }); | |||||
if (configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||||
{ | |||||
hcBuilder | |||||
.AddAzureServiceBusTopic( | |||||
configuration["EventBusConnection"], | |||||
topicName: "eshop_event_bus", | |||||
name: "orderingtask-servicebus-check", | |||||
tags: new string[] { "servicebus" }); | |||||
} | |||||
else | |||||
{ | |||||
hcBuilder | |||||
.AddRabbitMQ( | |||||
$"amqp://{configuration["EventBusConnection"]}", | |||||
name: "orderingtask-rabbitmqbus-check", | |||||
tags: new string[] { "rabbitmqbus" }); | |||||
} | |||||
return services; | |||||
} | |||||
} | |||||
} |
@ -1,95 +0,0 @@ | |||||
using Dapper; | |||||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||||
using Microsoft.Extensions.Hosting; | |||||
using Microsoft.Extensions.Logging; | |||||
using Microsoft.Extensions.Options; | |||||
using Ordering.BackgroundTasks.Configuration; | |||||
using Ordering.BackgroundTasks.IntegrationEvents; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Data.SqlClient; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
namespace Ordering.BackgroundTasks.Tasks | |||||
{ | |||||
public class GracePeriodManagerService | |||||
: BackgroundService | |||||
{ | |||||
private readonly ILogger<GracePeriodManagerService> _logger; | |||||
private readonly BackgroundTaskSettings _settings; | |||||
private readonly IEventBus _eventBus; | |||||
public GracePeriodManagerService( | |||||
IOptions<BackgroundTaskSettings> settings, | |||||
IEventBus eventBus, | |||||
ILogger<GracePeriodManagerService> logger) | |||||
{ | |||||
_settings = settings?.Value ?? throw new ArgumentNullException(nameof(settings)); | |||||
_eventBus = eventBus ?? throw new ArgumentNullException(nameof(eventBus)); | |||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||||
} | |||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken) | |||||
{ | |||||
_logger.LogDebug("GracePeriodManagerService is starting."); | |||||
stoppingToken.Register(() => _logger.LogDebug("#1 GracePeriodManagerService background task is stopping.")); | |||||
while (!stoppingToken.IsCancellationRequested) | |||||
{ | |||||
_logger.LogDebug("GracePeriodManagerService background task is doing background work."); | |||||
CheckConfirmedGracePeriodOrders(); | |||||
await Task.Delay(_settings.CheckUpdateTime, stoppingToken); | |||||
} | |||||
_logger.LogDebug("GracePeriodManagerService background task is stopping."); | |||||
await Task.CompletedTask; | |||||
} | |||||
private void CheckConfirmedGracePeriodOrders() | |||||
{ | |||||
_logger.LogDebug("Checking confirmed grace period orders"); | |||||
var orderIds = GetConfirmedGracePeriodOrders(); | |||||
foreach (var orderId in orderIds) | |||||
{ | |||||
var confirmGracePeriodEvent = new GracePeriodConfirmedIntegrationEvent(orderId); | |||||
_logger.LogInformation("----- Publishing integration event: {IntegrationEventId} from {AppName} - ({@IntegrationEvent})", confirmGracePeriodEvent.Id, Program.AppName, confirmGracePeriodEvent); | |||||
_eventBus.Publish(confirmGracePeriodEvent); | |||||
} | |||||
} | |||||
private IEnumerable<int> GetConfirmedGracePeriodOrders() | |||||
{ | |||||
IEnumerable<int> orderIds = new List<int>(); | |||||
using (var conn = new SqlConnection(_settings.ConnectionString)) | |||||
{ | |||||
try | |||||
{ | |||||
conn.Open(); | |||||
orderIds = conn.Query<int>( | |||||
@"SELECT Id FROM [ordering].[orders] | |||||
WHERE DATEDIFF(minute, [OrderDate], GETDATE()) >= @GracePeriodTime | |||||
AND [OrderStatusId] = 1", | |||||
new { GracePeriodTime = _settings.GracePeriodTime }); | |||||
} | |||||
catch (SqlException exception) | |||||
{ | |||||
_logger.LogCritical(exception, "FATAL ERROR: Database connections could not be opened: {Message}", exception.Message); | |||||
} | |||||
} | |||||
return orderIds; | |||||
} | |||||
} | |||||
} |
@ -1,10 +0,0 @@ | |||||
{ | |||||
"Logging": { | |||||
"IncludeScopes": false, | |||||
"LogLevel": { | |||||
"Default": "Debug", | |||||
"System": "Information", | |||||
"Microsoft": "Information" | |||||
} | |||||
} | |||||
} |
@ -1,26 +0,0 @@ | |||||
{ | |||||
"ConnectionString": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word;", | |||||
"Serilog": { | |||||
"SeqServerUrl": null, | |||||
"LogstashgUrl": null, | |||||
"MinimumLevel": { | |||||
"Default": "Information", | |||||
"Override": { | |||||
"Microsoft": "Warning", | |||||
"Microsoft.eShopOnContainers": "Information", | |||||
"System": "Warning" | |||||
} | |||||
} | |||||
}, | |||||
"SubscriptionClientName": "BackgroundTasks", | |||||
"GracePeriodTime": "1", | |||||
"CheckUpdateTime": "1000", | |||||
"ApplicationInsights": { | |||||
"InstrumentationKey": "" | |||||
}, | |||||
"AzureServiceBusEnabled": false, | |||||
"EventBusRetryCount": 5, | |||||
"EventBusConnection": "", | |||||
"EventBusUserName": "", | |||||
"EventBusPassword": "" | |||||
} |
@ -1,56 +0,0 @@ | |||||
kind: helm-release | |||||
apiVersion: 1.1 | |||||
build: | |||||
context: ..\..\..\.. | |||||
dockerfile: Dockerfile | |||||
install: | |||||
chart: ../../../../k8s/helm/ordering-backgroundtasks | |||||
set: | |||||
replicaCount: 1 | |||||
image: | |||||
tag: $(tag) | |||||
pullPolicy: Never | |||||
ingress: | |||||
annotations: | |||||
kubernetes.io/ingress.class: traefik-azds | |||||
hosts: | |||||
- $(spacePrefix)eshop$(hostSuffix) | |||||
inf: | |||||
k8s: | |||||
dns: $(spacePrefix)eshop$(hostSuffix) | |||||
values: | |||||
- values.dev.yaml? | |||||
- secrets.dev.yaml? | |||||
- inf.yaml | |||||
- app.yaml | |||||
configurations: | |||||
develop: | |||||
build: | |||||
useGitIgnore: true | |||||
dockerfile: Dockerfile.develop | |||||
args: | |||||
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION:-Debug} | |||||
container: | |||||
sync: | |||||
- '**/Pages/**' | |||||
- '**/Views/**' | |||||
- '**/wwwroot/**' | |||||
- '!**/*.{sln,csproj}' | |||||
command: | |||||
- dotnet | |||||
- run | |||||
- --no-restore | |||||
- --no-build | |||||
- --no-launch-profile | |||||
- -c | |||||
- ${BUILD_CONFIGURATION:-Debug} | |||||
iterate: | |||||
processesToKill: | |||||
- dotnet | |||||
- vsdbg | |||||
buildCommands: | |||||
- - dotnet | |||||
- build | |||||
- --no-restore | |||||
- -c | |||||
- ${BUILD_CONFIGURATION:-Debug} |