feat: add svn preset management and optimize docker builds

This commit is contained in:
liumangmang
2026-06-11 13:57:20 +08:00
parent 409c5a81e4
commit b5c7907c23
24 changed files with 1317 additions and 138 deletions
+23 -11
View File
@@ -1,9 +1,11 @@
# ============================================================
# Docker 镜像仓库加速(默认使用 docker.1ms.run 国内代理)
# 如需切换回 Docker Hub
# docker compose build --build-arg REGISTRY_MIRROR=docker.io/library
# DOCKER_REGISTRY_MIRROR=docker.io/library make up
# ============================================================
ARG REGISTRY_MIRROR=docker.1ms.run/library
# 内部/开发用途,推荐通过 make fast-up 触发快速构建
ARG FAST_BUILD=false
# ============================================================
# Stage 1: 前端构建(Vue 3 + Vite
@@ -14,7 +16,7 @@ WORKDIR /frontend
COPY frontend-vue/package.json frontend-vue/package-lock.json ./
RUN npm ci
RUN --mount=type=cache,target=/root/.npm npm ci
COPY frontend-vue/ ./
@@ -23,20 +25,20 @@ RUN npm run build
# ============================================================
# Stage 2: 后端构建(Maven + Java 8
# ============================================================
FROM ${REGISTRY_MIRROR}/maven:3.9.6-eclipse-temurin-8 AS builder
FROM ${REGISTRY_MIRROR}/maven:3.9.6-eclipse-temurin-8 AS builder-base
# Maven JVM 调优:增大堆内存、启用并行
ENV MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m -Djava.util.concurrent.ForkJoinPool.common.parallelism=4"
WORKDIR /app
# 使用阿里云 Maven 镜像加速依赖下载(替换 Maven Central
COPY maven-settings.xml /root/.m2/settings.xml
# 使用阿里云 Maven 镜像加速依赖下载(避免被 /root/.m2 缓存挂载点隐藏
COPY maven-settings.xml /app/maven-settings.xml
COPY pom.xml .
RUN --mount=type=cache,target=/root/.m2 \
mvn -B -DskipTests -T 1C dependency:go-offline
mvn -s /app/maven-settings.xml -B -DskipTests -T 1C dependency:go-offline
COPY src ./src
@@ -44,11 +46,21 @@ COPY src ./src
# vite.config.js 中 outDir 为相对 __dirname 的路径,容器内 __dirname=/frontend
COPY --from=frontend-builder /src/main/resources/static/v2 /app/src/main/resources/static/v2
# 前端产物已由 frontend-builder 阶段构建并 COPY 进来;
# 此阶段不含 frontend-vue/,且离线模式无法下载 Node,必须跳过前端构建。
# -T 1C: 按 CPU 核数并行; -o: 离线模式(依赖已缓存,跳过元数据检查)
# 默认构建分支(不缓存 /app/target,执行 clean
FROM builder-base AS builder-false
RUN --mount=type=cache,target=/root/.m2 \
mvn -B -DskipTests -T 1C -o clean package -Dskip.frontend.build=true
mvn -s /app/maven-settings.xml -B -DskipTests -T 1C clean package -Dskip.frontend.build=true && \
cp /app/target/svn-log-tool-1.0.0-jar-with-dependencies.jar /app/svn-log-tool-1.0.0-jar-with-dependencies.jar
# 快速开发迭代构建分支(缓存 /app/target,不执行 clean
FROM builder-base AS builder-true
RUN --mount=type=cache,target=/root/.m2 \
--mount=type=cache,target=/app/target \
mvn -s /app/maven-settings.xml -B -DskipTests -T 1C package -Dskip.frontend.build=true && \
cp /app/target/svn-log-tool-1.0.0-jar-with-dependencies.jar /app/svn-log-tool-1.0.0-jar-with-dependencies.jar
# 根据 FAST_BUILD 的值决定最终作为 builder 的阶段
FROM builder-${FAST_BUILD} AS builder
# ============================================================
# Stage 3: 运行镜像(最小化 JRE)
@@ -56,7 +68,7 @@ RUN --mount=type=cache,target=/root/.m2 \
FROM ${REGISTRY_MIRROR}/eclipse-temurin:8-jre-alpine
WORKDIR /app
COPY --from=builder /app/target/svn-log-tool-1.0.0-jar-with-dependencies.jar app.jar
COPY --from=builder /app/svn-log-tool-1.0.0-jar-with-dependencies.jar app.jar
EXPOSE 18088