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
+16 -8
View File
@@ -34,12 +34,19 @@ mvn spring-boot:run -Dspring-boot.run.mainClass=com.svnlog.web.WebApplication
http://localhost:18088
```
## Docker 构建行为
## Docker 构建行为与优化
- `make up` 保持“重新构建并启动”的语义,每次都会执行一次 Maven 打包,确保容器内是最新代码。
- Docker 构建使用 BuildKit 缓存 Maven 本地仓库;首次构建会下载依赖,后续在 `pom.xml` 未变更时会优先命中缓存,不会在每次构建时重复下载全部依赖。
- 如果修改了 `pom.xml`、执行了 `docker builder prune`、或切换到新的 Docker 环境,依赖缓存会失效并重新下载。
- 如果本机 Docker 未启用 BuildKit,可显式设置 `DOCKER_BUILDKIT=1``COMPOSE_DOCKER_CLI_BUILD=1` 后再执行 `make up`
- **Docker 镜像加速**:默认使用 `docker.1ms.run/library` 代理。如果需要切换回 Docker Hub 或使用国内其他镜像(如阿里云镜像,例如 `registry.cn-hangzhou.aliyuncs.com/library`,注意不能带 `https://`),可以通过命令行传递 `DOCKER_REGISTRY_MIRROR` 变量:
```bash
DOCKER_REGISTRY_MIRROR=registry.cn-hangzhou.aliyuncs.com/library make up
```
- **快速开发迭代(可选 Fast Build)**:默认情况下,构建仍会执行 `mvn clean package` 以确保打包的正确性(防旧 class 或资源残留)。如果在本地频繁修改 Java 代码,可以使用 `fast-up` 实现秒级编译与构建重启。**注意:如果修改了前端静态资源,或删除/重命名了 Java 类与资源文件,应使用默认构建(`make up`),不要用 Fast Build。**
```bash
make fast-up
```
该模式下,Docker 会使用 BuildKit 挂载缓存 `/app/target` 目录,并不再执行 `clean` 目标,使 Maven 能进行增量编译。
- **依赖缓存**Docker 构建使用 BuildKit 缓存了 Maven 本地仓库(`.m2`)与 npm 缓存(`.npm`)。在依赖文件未变更时,不会重复下载依赖包。
- 如果本机 Docker 未启用 BuildKit,可显式设置 `DOCKER_BUILDKIT=1` 和 `COMPOSE_DOCKER_CLI_BUILD=1` 后再执行构建。
## 页面说明
@@ -78,8 +85,9 @@ http://localhost:18088
## SVN 凭据读取优先级
1. 单次请求显式传入的 `username/password`(兼容旧接口)
2. 设置页保存的运行时 `svnUsername/svnPassword`
3. 环境变量 `SVN_USERNAME` / `SVN_PASSWORD`
2. 预设凭据
3. 全局设置保存的运行时 `svnUsername/svnPassword`
4. 环境变量 `SVN_USERNAME` / `SVN_PASSWORD`
`GET /api/settings` 不会回显 `openaiApiKey` 或 `svnPassword` 明文,前端通过 `openaiApiKeyConfigured` 和 `svnCredentialsConfigured` 展示配置状态。
@@ -105,7 +113,7 @@ http://localhost:18088
## SVN 预设来源与调用方式
- SVN 地址统一维护在 `application.properties``svn.presets[*]` 中。
- SVN 地址统一通过仓库管理页维护,并持久化到 `outputs/repository-configs.json` 文件中。
- 前端不再传 SVN URL,业务接口统一传 `presetId`,后端按 `presetId` 解析地址。
- `GET /api/svn/presets` 仅返回 `id` 与 `name`(不返回 `url`)。