# Basis Image das für die Build Umgebung verwendet wird FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build-env # Wechseln ins Arbeitsverzeichnis WORKDIR /app # Kopieren der Projektdatei in Arbeitsverzeichnis COPY *.csproj ./ # Laden der Abhängigkeiten RUN dotnet restore # Kopieren des restlichen Quellcodes COPY . ./ # Kompilieren eds Quellcodes (Projektdatei muss nicht zwingend angegeben werden) RUN dotnet publish "SecDevOpsLab.csproj" -c Release -o out # Noch schlangere Basis Image für die Runtime Umgebung FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine # Wechseln ins Arbeitsverzeichnis WORKDIR /app # Öffnen des Ports für die Web-App (Standard bei .NET 8 Web-Apps ist 8080) EXPOSE 8080 # Konfigurieren des integrierten Kestrel-Webserver einer ASP.NET Core App ENV ASPNETCORE_URLS=http://+:8080 # Wechseln auf root (nur kurz) USER root # OS patchen RUN apk update && apk upgrade --no-cache # Ändern des File Owner (wichtig dass die Sqlite DB geschrieben werden kann) RUN mkdir -p /app/data && chown -R app:app /app/data && chmod -R 775 /app/data # Wechsel auf non-root User (app ist ein vorinstallierter User von Microsoft) USER app # Kopieren der fertigen Binärdateien aus der Build Umgebung COPY --from=build-env /app/out . # Definieren eines Arguments, das dann beim kaniko Aufruf mitübergeben wird ARG JENKINS_BUILD=unknown # Schreiben des Inhalts des übergebenen Werts des Arguments als Label in das Image # kubectl get pods --show-labels # kubectl get pod -n bookmanager-apps -o jsonpath='{.status.containerStatuses[*].imageID}' # kubectl get pods -L jenkins.build.number LABEL org.opencontainers.image.version=${JENKINS_BUILD} \ managed-by="Jenkins" # Festlegen des Start Befehls ENTRYPOINT ["dotnet", "SecDevOpsLab.dll"]