Files
secdevops-csharp-app/Dockerfile
Achim H. 72a891887e
All checks were successful
Tests / Declarative: Post Actions No test results found
csharp-secdevops-pipeline-pod/pipeline/head This commit looks good
added functionality to add Jenkins Build Number as Label to Image
2026-05-13 10:39:04 +02:00

47 lines
1.7 KiB
Docker

# 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
# Ä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 <pod-name> -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"]