forked from diggsweden/reusable-ci
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContainerfile.multi-artifact
More file actions
39 lines (32 loc) · 1.21 KB
/
Containerfile.multi-artifact
File metadata and controls
39 lines (32 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Example multi-stage Containerfile for combined-app container
# This Containerfile builds all artifacts in separate stages, then combines them
# Stage 1: Build API (Maven)
FROM maven:3.9-eclipse-temurin-21 AS build-api
WORKDIR /build
COPY services/api/pom.xml services/api/
COPY services/api/src services/api/src/
RUN cd services/api && mvn clean package -DskipTests
# Stage 2: Build Worker (Maven)
FROM maven:3.9-eclipse-temurin-21 AS build-worker
WORKDIR /build
COPY services/worker/pom.xml services/worker/
COPY services/worker/src services/worker/src/
RUN cd services/worker && mvn clean package -DskipTests
# Stage 3: Build Frontend (NPM)
FROM node:22 AS build-web
WORKDIR /build
COPY apps/web/package*.json apps/web/
RUN cd apps/web && npm ci
COPY apps/web/ apps/web/
RUN cd apps/web && npm run build
# Final stage: Runtime with all artifacts
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
# Copy built artifacts from each stage
COPY --from=build-api /build/services/api/target/*.jar /app/api.jar
COPY --from=build-worker /build/services/worker/target/*.jar /app/worker.jar
COPY --from=build-web /build/apps/web/dist /app/static/
# Expose ports
EXPOSE 8080
# Run the main API service
CMD ["java", "-jar", "/app/api.jar"]