Files
git.stella-ops.org/ops/orchestrator/Dockerfile
StellaOps Bot 7e7be4d2fd
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
devportal-offline / build-offline (push) Has been cancelled
Mirror Thin Bundle Sign & Verify / mirror-sign (push) Has been cancelled
up
2025-11-29 02:40:21 +02:00

125 lines
5.0 KiB
Docker

# syntax=docker/dockerfile:1.7-labs
# Orchestrator Service Dockerfile
# Multi-stage build for deterministic, reproducible container images.
# Supports air-gapped deployment via digest-pinned base images.
ARG SDK_IMAGE=mcr.microsoft.com/dotnet/nightly/sdk:10.0
ARG RUNTIME_IMAGE=mcr.microsoft.com/dotnet/nightly/aspnet:10.0
ARG VERSION=0.0.0
ARG CHANNEL=dev
ARG GIT_SHA=0000000
ARG SOURCE_DATE_EPOCH=0
# ==============================================================================
# Stage 1: Build
# ==============================================================================
FROM ${SDK_IMAGE} AS build
ARG GIT_SHA
ARG SOURCE_DATE_EPOCH
WORKDIR /src
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1 \
DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 \
NUGET_XMLDOC_MODE=skip \
SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH}
# Copy solution and project files for restore
COPY src/Orchestrator/StellaOps.Orchestrator/StellaOps.Orchestrator.sln ./
COPY src/Orchestrator/StellaOps.Orchestrator/StellaOps.Orchestrator.Core/StellaOps.Orchestrator.Core.csproj StellaOps.Orchestrator.Core/
COPY src/Orchestrator/StellaOps.Orchestrator/StellaOps.Orchestrator.Infrastructure/StellaOps.Orchestrator.Infrastructure.csproj StellaOps.Orchestrator.Infrastructure/
COPY src/Orchestrator/StellaOps.Orchestrator/StellaOps.Orchestrator.WebService/StellaOps.Orchestrator.WebService.csproj StellaOps.Orchestrator.WebService/
COPY src/Orchestrator/StellaOps.Orchestrator/StellaOps.Orchestrator.Worker/StellaOps.Orchestrator.Worker.csproj StellaOps.Orchestrator.Worker/
COPY Directory.Build.props Directory.Packages.props ./
# Restore dependencies with cache mount
RUN --mount=type=cache,target=/root/.nuget/packages \
dotnet restore StellaOps.Orchestrator.sln
# Copy source files
COPY src/Orchestrator/StellaOps.Orchestrator/ ./
# Publish WebService
RUN --mount=type=cache,target=/root/.nuget/packages \
dotnet publish StellaOps.Orchestrator.WebService/StellaOps.Orchestrator.WebService.csproj \
-c Release \
-o /app/publish/webservice \
/p:UseAppHost=false \
/p:ContinuousIntegrationBuild=true \
/p:SourceRevisionId=${GIT_SHA} \
/p:Deterministic=true \
/p:TreatWarningsAsErrors=true
# Publish Worker (optional, for hybrid deployments)
RUN --mount=type=cache,target=/root/.nuget/packages \
dotnet publish StellaOps.Orchestrator.Worker/StellaOps.Orchestrator.Worker.csproj \
-c Release \
-o /app/publish/worker \
/p:UseAppHost=false \
/p:ContinuousIntegrationBuild=true \
/p:SourceRevisionId=${GIT_SHA} \
/p:Deterministic=true \
/p:TreatWarningsAsErrors=true
# ==============================================================================
# Stage 2: Runtime (WebService)
# ==============================================================================
FROM ${RUNTIME_IMAGE} AS orchestrator-web
WORKDIR /app
ARG VERSION
ARG CHANNEL
ARG GIT_SHA
ENV DOTNET_EnableDiagnostics=0 \
ASPNETCORE_URLS=http://0.0.0.0:8080 \
ASPNETCORE_ENVIRONMENT=Production \
ORCHESTRATOR__TELEMETRY__MINIMUMLOGLEVEL=Information
COPY --from=build /app/publish/webservice/ ./
# Health check endpoints
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/healthz || exit 1
EXPOSE 8080
LABEL org.opencontainers.image.title="StellaOps Orchestrator WebService" \
org.opencontainers.image.description="Job scheduling, DAG planning, and worker coordination service" \
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.revision="${GIT_SHA}" \
org.opencontainers.image.source="https://git.stella-ops.org/stella-ops/stellaops" \
org.opencontainers.image.vendor="StellaOps" \
org.opencontainers.image.licenses="AGPL-3.0-or-later" \
org.stellaops.release.channel="${CHANNEL}" \
org.stellaops.component="orchestrator-web"
ENTRYPOINT ["dotnet", "StellaOps.Orchestrator.WebService.dll"]
# ==============================================================================
# Stage 3: Runtime (Worker)
# ==============================================================================
FROM ${RUNTIME_IMAGE} AS orchestrator-worker
WORKDIR /app
ARG VERSION
ARG CHANNEL
ARG GIT_SHA
ENV DOTNET_EnableDiagnostics=0 \
ASPNETCORE_ENVIRONMENT=Production \
ORCHESTRATOR__TELEMETRY__MINIMUMLOGLEVEL=Information
COPY --from=build /app/publish/worker/ ./
LABEL org.opencontainers.image.title="StellaOps Orchestrator Worker" \
org.opencontainers.image.description="Background worker for job execution and orchestration tasks" \
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.revision="${GIT_SHA}" \
org.opencontainers.image.source="https://git.stella-ops.org/stella-ops/stellaops" \
org.opencontainers.image.vendor="StellaOps" \
org.opencontainers.image.licenses="AGPL-3.0-or-later" \
org.stellaops.release.channel="${CHANNEL}" \
org.stellaops.component="orchestrator-worker"
ENTRYPOINT ["dotnet", "StellaOps.Orchestrator.Worker.dll"]