Compare commits

..

2 Commits

Author SHA1 Message Date
lixi 3ac756fa14 docs: 功能清单同步会话清理任务交付(75 测试)
- auth_sessions 清理任务 (patbond-api@6528a06,保留期即重用检测窗口的设计说明随注释入库)
- 门禁:mkdocs build --strict 通过
2026-09-04 15:47:07 +08:00
lixi 2de63f8911 docs: 增加 Gitea Actions CI Runner 部署手册
- 开启 Actions、注册 act_runner、Testcontainers 所需的 docker.sock 挂载、常见问题对照
- 门禁:mkdocs build --strict 通过
2026-09-04 15:01:20 +08:00
3 changed files with 83 additions and 3 deletions
+79
View File
@@ -0,0 +1,79 @@
# Gitea Actions Runner 启用手册
> 目标:让 `patbond-api/.gitea/workflows/ci.yml` 在每次 push(dev)/PR 时自动执行
> `./mvnw -B clean test`(含 Testcontainers,需 Docker)。
> 适用:自建 Giteahttp://132.232.242.77nginx 反代,Ubuntu)。
> 全程在**服务器**上操作,约 10 分钟。
## 第 1 步:Gitea 侧开启 Actions
1. 确认版本 ≥ 1.19(建议 1.21+):Gitea 页面右下角或 `gitea --version`
2. 编辑 `app.ini`(常见位置 `/etc/gitea/app.ini` 或 Gitea 安装目录 `custom/conf/app.ini`),加入/确认:
```ini
[actions]
ENABLED = true
```
3. 重启 Gitea`sudo systemctl restart gitea`(按你的部署方式调整)。
4. 网页版验证:管理后台出现「Actions → Runners」菜单即成功。
## 第 2 步:获取注册令牌
- 全站级(推荐,一台 runner 服务所有仓库):**管理后台 → Actions → Runners → 创建 Runner**,复制注册令牌(REGISTRATION TOKEN)。
- 或仓库级:`patbond-api` 仓库 **Settings → Actions → Runners** 里获取(只服务该仓库)。
## 第 3 步:启动 act_runnerDocker 方式,推荐)
在装有 Docker 的机器上(与 Gitea 同机即可):
```bash
docker run -d --name act_runner --restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v act_runner_data:/data \
-e GITEA_INSTANCE_URL=http://132.232.242.77 \
-e GITEA_RUNNER_REGISTRATION_TOKEN=<第2步的令牌> \
-e GITEA_RUNNER_NAME=patbond-runner \
-e GITEA_RUNNER_LABELS='ubuntu-latest:docker://docker.io/catthehacker/ubuntu:act-latest' \
docker.io/gitea/act_runner:latest
```
要点:
- `-v /var/run/docker.sock`runner 需要控制宿主 Docker 来起 job 容器。
- 标签 `ubuntu-latest` 必须存在——工作流里 `runs-on: ubuntu-latest` 靠它匹配;
`catthehacker/ubuntu:act-latest` 镜像自带 node/git,能跑 `actions/checkout` 等 JS Action。
### 让 job 里的 Testcontainers 拿到 Docker(关键一步)
我们的门禁在 job 容器内还要再起 postgres:18 容器,所以 job 容器也要挂 docker.sock。
生成并修改 runner 配置:
```bash
docker exec act_runner act_runner generate-config > /tmp/config.yaml
# 编辑 /tmp/config.yaml,在 container 段加:
# container:
# options: "-v /var/run/docker.sock:/var/run/docker.sock"
docker cp /tmp/config.yaml act_runner:/data/config.yaml
docker restart act_runner
# 注意:runner 以 CONFIG_FILE=/data/config.yaml 生效,若镜像未自动读取,
# 重新以 -e CONFIG_FILE=/data/config.yaml 运行容器。
```
## 第 4 步:验证
1. 管理后台 → Actions → Runners`patbond-runner` 显示 **Idle**。
2. `patbond-api` 仓库 **Settings → Actions** 确认已启用(默认继承全局)。
3. 推送 `dev` 分支(或手动 re-run),仓库「Actions」页应出现运行记录,
`backend-test` job 全绿(首跑要拉镜像与 Maven 依赖,10 分钟内正常)。
## 常见问题
| 现象 | 处理 |
| --- | --- |
| job 卡在 `actions/checkout` 或 `setup-java` 拉不下来 | runner 访问不了 github.com。两种解法:a) `app.ini` 的 `[actions]` 加 `DEFAULT_ACTIONS_URL = https://gitea.com`(用 gitea.com 上的 Action 镜像仓);b) 把工作流的 setup-java 步骤删掉,改用自带 JDK17 的 job 镜像(ci.yml 头部注释已写明) |
| Testcontainers 报 `Could not find a valid Docker environment` | 第 3 步的 container.options 没生效,job 容器内没有 docker.sock |
| runner 显示 offline | `docker logs act_runner` 看注册错误;令牌只能用一次,重新注册需删 `/data/.runner` |
| Maven 每次全量下载依赖很慢 | 在 config.yaml 的 container.options 追加 `-v act_m2:/root/.m2` 做持久缓存 |
启用完成后,把 `docs/development/feature-checklist.md` 第 6 节「CI 载体」从 🟡 改为 ✅。
+3 -3
View File
@@ -2,7 +2,7 @@
> 目的:直观呈现哪些功能**已完成且有自动化测试**、哪些**部分完成**、哪些**尚未开始**,方便针对性验证与回归。
> 维护约定:每波工单合入后由执行人更新本清单;状态以 `dev` 分支 + 门禁全绿为准。
> 最后更新:2026-09-04(第三波两端合龙 + 工程化补波:patbond-api `3f6e818` 74 测试、patbond-flutter `da25804` 30 测试,均门禁全绿;compose 编排冒烟实测通过)
> 最后更新:2026-09-04(第三波两端合龙 + 工程化补波:patbond-api `6528a06` 75 测试、patbond-flutter `da25804` 30 测试,均门禁全绿;compose 编排冒烟实测通过)
图例:✅ 已完成且已测试 | 🟡 部分完成/有已知限制 | ⬜ 未开始
@@ -44,7 +44,7 @@
| access 过期/伪造 → 40101 | ✅ | `MeEndpointTest``JwtSignerTest`、E2E | |
| `/internal/**` 服务间鉴权(X-Internal-Token | ✅ | `InternalAuthFilterTest`(3 例)+ E2E | 无凭证/错误凭证 401;未配置 fail-closed |
| access token 主动吊销(黑名单) | ⬜ | — | 退出后已签发 access 在剩余 ≤15 分钟内仍有效(jti/sid 已入库备用),见报告 16 §9.1 |
| auth_sessions 过期行清理任务 | | — | 报告 16 §9.3 |
| auth_sessions 过期行清理任务 | | `SessionCleanupIntegrationTest` | `patbond-api@6528a06`@Scheduled 定时删除死亡超过保留期(默认 30d,即重用检测窗口)的行,间隔/保留期均配置项 |
## 4. API 契约与文档
@@ -74,7 +74,7 @@
| 功能 | 状态 | 说明 |
| --- | --- | --- |
| 后端集成测试门禁(本地) | ✅ | `JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./mvnw clean test`74 测试 |
| 后端集成测试门禁(本地) | ✅ | `JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./mvnw clean test`75 测试 |
| 跨服务真实 HTTP E2E | ✅ | `AuthE2eIntegrationTest`(同 JVM 双服务 + 真实 postgres:18 |
| docker compose 最小编排(postgres:18 + 两无状态服务容器) | ✅ | `patbond-api@ab0265c``./deploy/init-secrets.sh``mvnw -DskipTests package``docker compose up -d --build`;完整冒烟实测通过(register→me→refresh→旧 token 重用 40102→internal 401→logout);用法见 `patbond-api/Readme.md` |
| 可执行镜像构建(repackage exec jar、非 root 运行) | ✅ | 同上;顺带修复无 starter-parent 时 package 产物不可执行 |
+1
View File
@@ -7,6 +7,7 @@ nav:
- 开发实施计划: development/development-plan.md
- Git 工作流规范: development/git-workflow.md
- 功能完成清单: development/feature-checklist.md
- CI Runner 部署手册: development/ci-runner-setup.md
- 第一迭代:
- 进展看板: development/iterations/iteration-1/index.md
- 01 任务分解: development/iterations/iteration-1/01-pm-task-breakdown.md