From d9d501faa2611bd5c51262d573988464ce313216 Mon Sep 17 00:00:00 2001 From: Leon Hoppe Date: Sun, 19 Jan 2025 19:41:25 +0100 Subject: [PATCH] Setup docker and ci pipelines --- .gitlab-ci.yml | 42 ++++++++++++++++++++++++++++ src/Portfolio.Api/Dockerfile | 15 +++++++--- src/Portfolio.Api/Portfolio.Api.http | 6 ---- src/Portfolio.Web/Dockerfile | 15 +++++++--- 4 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 .gitlab-ci.yml delete mode 100644 src/Portfolio.Api/Portfolio.Api.http diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..df7ee90 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,42 @@ +stages: + - build + - test + - publish + +variables: + DOCKER_IMAGE: registry.leon-hoppe.de/leon.hoppe/portfolio + +build: + stage: build + image: mcr.microsoft.com/dotnet/sdk:9.0 + script: + - dotnet restore + - dotnet build --configuration Release --no-restore + artifacts: + paths: + - "**/bin/Release" + expire_in: 10 minutes + +test: + stage: test + image: mcr.microsoft.com/dotnet/sdk:9.0 + script: + - dotnet test --verbosity normal + dependencies: + - build + +publish: + stage: publish + image: docker:latest + services: + - name: docker:dind + alias: docker + script: + - export VERSION=$(echo $CI_COMMIT_TAG | sed 's/^v//') + - docker login -u leon.hoppe -p ${CI_REGISTRY_PASSWORD} registry.leon-hoppe.de + - docker build -t $DOCKER_IMAGE/api:$VERSION -f src/Portfolio.Api/Dockerfile . + - docker build -t $DOCKER_IMAGE/web:$VERSION -f src/Portfolio.Web/Dockerfile . + - docker push $DOCKER_IMAGE/api:$VERSION + - docker push $DOCKER_IMAGE/web:$VERSION + only: + - tags diff --git a/src/Portfolio.Api/Dockerfile b/src/Portfolio.Api/Dockerfile index 8979e8e..70e4d47 100644 --- a/src/Portfolio.Api/Dockerfile +++ b/src/Portfolio.Api/Dockerfile @@ -7,10 +7,17 @@ EXPOSE 8081 FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src -COPY ["src/Portfolio.Api/Portfolio.Api.csproj", "src/Portfolio.Api/"] -RUN dotnet restore "src/Portfolio.Api/Portfolio.Api.csproj" -COPY . . -WORKDIR "/src/src/Portfolio.Api" + +COPY ["src/Portfolio.Shared/Portfolio.Shared.csproj", "./Portfolio.Shared/"] +RUN dotnet restore "Portfolio.Shared/Portfolio.Shared.csproj" + +COPY ["src/Portfolio.Api/Portfolio.Api.csproj", "./Portfolio.Api/"] +RUN dotnet restore "Portfolio.Api/Portfolio.Api.csproj" + +COPY ["src/Portfolio.Shared/", "./Portfolio.Shared/"] +COPY ["src/Portfolio.Api", "./Portfolio.Api/"] + +WORKDIR "/src/Portfolio.Api" RUN dotnet build "Portfolio.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish diff --git a/src/Portfolio.Api/Portfolio.Api.http b/src/Portfolio.Api/Portfolio.Api.http deleted file mode 100644 index 084acd9..0000000 --- a/src/Portfolio.Api/Portfolio.Api.http +++ /dev/null @@ -1,6 +0,0 @@ -@Portfolio.Api_HostAddress = http://localhost:5129 - -GET {{Portfolio.Api_HostAddress}}/weatherforecast/ -Accept: application/json - -### diff --git a/src/Portfolio.Web/Dockerfile b/src/Portfolio.Web/Dockerfile index e4a7f63..a857689 100644 --- a/src/Portfolio.Web/Dockerfile +++ b/src/Portfolio.Web/Dockerfile @@ -7,10 +7,17 @@ EXPOSE 8081 FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src -COPY ["src/Portfolio.Web/Portfolio.Web.csproj", "src/Portfolio.Web/"] -RUN dotnet restore "src/Portfolio.Web/Portfolio.Web.csproj" -COPY . . -WORKDIR "/src/src/Portfolio.Web" + +COPY ["src/Portfolio.Shared/Portfolio.Shared.csproj", "./Portfolio.Shared/"] +RUN dotnet restore "Portfolio.Shared/Portfolio.Shared.csproj" + +COPY ["src/Portfolio.Web/Portfolio.Web.csproj", "./Portfolio.Web/"] +RUN dotnet restore "Portfolio.Web/Portfolio.Web.csproj" + +COPY ["src/Portfolio.Shared/", "./Portfolio.Shared/"] +COPY ["src/Portfolio.Web", "./Portfolio.Web/"] + +WORKDIR "/src/Portfolio.Web" RUN dotnet build "Portfolio.Web.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish