From ac189a55f698a7b1a894b5b8aeec7c917f3e1432 Mon Sep 17 00:00:00 2001 From: warringtond Date: Sun, 28 Jun 2026 05:32:02 -0400 Subject: [PATCH] deployment files added --- Dockerfile | 28 +++++++++++++++++++++++++ Jenkinsfile | 52 ++++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 18 ++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 Dockerfile create mode 100644 Jenkinsfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..186075b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build + +WORKDIR /src + +EXPOSE 80 + +# Copy project files and restore dependencies +COPY src/SportsDivision.Domain/SportsDivision.Domain.csproj src/SportsDivision.Domain/ +COPY src/SportsDivision.Application/SportsDivision.Application.csproj src/SportsDivision.Application/ +COPY src/SportsDivision.Infrastructure/SportsDivision.Infrastructure.csproj src/SportsDivision.Infrastructure/ +COPY src/SportsDivision.Web/SportsDivision.Web.csproj src/SportsDivision.Web/ +RUN dotnet restore src/SportsDivision.Web/SportsDivision.Web.csproj + +COPY . ./ + +RUN dotnet publish src/SportsDivision.Web/SportsDivision.Web.csproj -c Release -o /app/out + +# Runtime Stage +FROM mcr.microsoft.com/dotnet/aspnet:10.0 + +WORKDIR /app + +ENV ASPNETCORE_ENVIRONMENT=Production +ENV ASPNETCORE_URLS=http://+:80 + +COPY --from=build /app/out . + +ENTRYPOINT ["dotnet", "SportsDivision.dll"] diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..c2ced5d --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,52 @@ +pipeline { + agent any + + environment { + REGISTRY = 'registry.dwarrington.com' + IMAGE_WEB = 'sportsdivision' + IMAGE_TAG = "${env.BUILD_NUMBER}" + CREDENTIALS_ID = 'registry-creds' + COMPOSE_FILE = 'docker-compose.yml' + } + + stages { + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Build & Push') { + steps { + script { + docker.withRegistry("https://${REGISTRY}", CREDENTIALS_ID) { + def img = docker.build("${REGISTRY}/${IMAGE_WEB}:${IMAGE_TAG}", "-f Dockerfile .") + img.push() + img.push('latest') + } + } + } + } + + stage('Deploy') { + steps { + withCredentials([usernamePassword( + credentialsId: CREDENTIALS_ID, + usernameVariable: 'DOCKER_USER', + passwordVariable: 'DOCKER_PASS' + )]) { + sh ''' + export PATH=$PATH:/usr/libexec/docker/cli-plugins:/usr/bin:/usr/local/bin + + echo "$DOCKER_PASS" | docker login ${REGISTRY} -u "$DOCKER_USER" --password-stdin + + sed -i "/sportsdivision:/,/image:/s|image:.*|image: ${REGISTRY}/${IMAGE_WEB}:${IMAGE_TAG}|" ${COMPOSE_FILE} + + docker compose -f ${COMPOSE_FILE} pull sportsdivision + docker compose -f ${COMPOSE_FILE} up -d --force-recreate --remove-orphans + ''' + } + } + } + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ffeaa1e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +services: + sportsdivision: + build: + context: . + dockerfile: Dockerfile + image: registry.dwarrington.com/sportsdivision:${IMAGE_TAG} + container_name: sportsdivision + restart: always + ports: + - "5036:80" + volumes: + - ./data:/app/data + networks: + - caddy_network + +networks: + caddy_network: + external: true