WorkBuddy
f63e579a8d
ci(e2e): 落地「活栈供给方式」决策 — Compose in CI,并修掉 6 处真实缺陷
决策:E2E 活栈在 runner 内用 docker compose 起全栈(postgres + redis + minio + backend),
与本地验证路径完全一致;未采纳「service containers + runner 上 mvn package 后 java -jar」——
那需要为后端另写一套 host 网络配置,等于制造第二条与本地不一致的路径。
本机实测(与 CI 同一序列):中间件三项 healthcheck 全 Healthy(pg_isready / redis-cli ping /
mc ready local)→ backend /api/v1/health/live 返回 200 → seed 幂等可执行(INSERT 0 0)
→ pytest tests/e2e → 49 passed。
(本机限制:Docker Hub 不可达且无 temurin 基础镜像,未复现 --build;改用本地既有镜像为底座、
挂载当日 16:24 构建的 jar,使被验证的代码版本与 CI 一致 —— 否则是拿 09-09 的旧代码验 09-18 的用例。)
修掉的 6 处缺陷:
1. minio/minio:latest 是滚动 tag → pin RELEASE.2025-09-07T16-13-09Z(否则 CI 拉到的镜像
与本地验证时不同,表现为不可复现的偶发失败)
2. up 未显式列出 minio(靠 depends_on 隐式拉起),而 minio 的 healthcheck 正是 backend
能否启动的前置条件
3. up --build 把构建与起栈耦合,失败日志混杂 → 拆为 build / up 两步
4. 就绪窗口 5min 偏紧(首次构建后仍需 Spring 启动 + Flyway 46 个迁移)→ 7.5min
5. 缺 down -v 前置清卷:seed 用 ON CONFLICT (username) DO NOTHING,残留卷会让账号口令
停留在上一轮 → 登录 401,并伪装成业务失败
6. job 无 timeout(GH Actions 默认 360 分钟)→ timeout-minutes: 30
另:pytest -v → pytest tests/e2e -v。原以为从仓库根收集会误收 tests/*_test.py
(其在 import 期依赖 psycopg2 与 E2E_DB_PASSWORD),实测否定:pytest.ini 的
testpaths = tests/e2e 已限定范围,从根收集正是 49 个用例且无 error。显式传参作为兜底保留。
计划 Task 2.3 由「依赖基础设施决策」改为「已决策并落地」,仅余 Step 3(CI 上实测一次绿)。
2026-09-18 21:58:56 +08:00
..
2026-09-18 16:37:47 +08:00
2026-09-18 20:25:58 +08:00
2026-09-18 21:15:29 +08:00
2026-09-16 14:37:44 +08:00
2026-09-14 11:44:02 +08:00
2026-09-09 22:05:00 +08:00
2026-09-09 22:05:00 +08:00
2026-09-18 21:58:56 +08:00
2026-09-13 22:09:15 +08:00
2026-09-17 23:25:31 +08:00
2026-09-16 14:37:44 +08:00
2026-09-09 22:05:00 +08:00
2026-09-18 16:37:47 +08:00
2026-09-18 21:15:29 +08:00
2026-09-09 22:05:00 +08:00
2026-09-15 22:29:26 +08:00
2026-09-18 21:15:29 +08:00
2026-09-18 21:34:33 +08:00
2026-09-10 10:58:43 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-14 10:01:41 +08:00
2026-09-14 10:01:41 +08:00
2026-09-16 12:54:39 +08:00
2026-09-16 15:11:38 +08:00
2026-09-16 16:42:48 +08:00
2026-09-16 21:00:52 +08:00
2026-09-16 21:50:56 +08:00
2026-09-16 23:01:13 +08:00
2026-09-17 00:01:53 +08:00
2026-09-18 21:34:33 +08:00
2026-09-17 01:25:12 +08:00
2026-09-17 14:02:00 +08:00
2026-09-17 15:07:52 +08:00
2026-09-17 16:47:10 +08:00
2026-09-17 20:42:09 +08:00
2026-09-17 21:07:25 +08:00
2026-09-17 22:25:10 +08:00
2026-09-17 23:25:31 +08:00
2026-09-18 10:12:34 +08:00
2026-09-18 11:00:08 +08:00
2026-09-18 11:49:18 +08:00
2026-09-18 13:50:19 +08:00
2026-09-18 21:34:33 +08:00
2026-09-18 21:34:47 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 12:54:39 +08:00
2026-09-16 14:37:44 +08:00
2026-09-09 22:05:00 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-18 21:15:29 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-18 16:40:09 +08:00
2026-09-18 21:34:47 +08:00