Merge pull request #2080 from pikasTech/feat/pikaoa-test-nc01-anchor
docs: 定锚 PikaOA NC01 测试运行面
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# R1.5.9.3 任务报告
|
||||
|
||||
## 结论
|
||||
|
||||
PikaOA 测试架构已按用户确认方案定锚:
|
||||
|
||||
- 复用现有 `NC01:k3s`,不新增节点或 k3s 集群。
|
||||
- 使用固定独立 namespace `pikaoa-test`。
|
||||
- 复用 PK01 host PostgreSQL,但使用独立 `pikaoa_test` database 和 role,不复用生产数据身份。
|
||||
- 测试 Web 由 owning YAML 在 NC01 hostIP `152.53.229.148` 声明端口 `32080`。
|
||||
- 先通过 YAML-first 受控 CLI 单步部署和调试;通过后再接入跟随产品 `master` 的独立测试 consumer。
|
||||
- OTel、Tempo 与 Prometheus 复用 NC01 `platform-infra`。
|
||||
|
||||
## 治理证据
|
||||
|
||||
- SPEC:`project-management/PJ2026-03/specs/PJ2026-03-pikaoa.md` v0.6。
|
||||
- 父 issue:<https://github.com/pikasTech/unidesk/issues/2058>。
|
||||
- PK01 测试数据库子 issue:<https://github.com/pikasTech/unidesk/issues/2078>。
|
||||
- NC01 测试运行面子 issue:<https://github.com/pikasTech/unidesk/issues/2079>。
|
||||
|
||||
## 运行面只读证据
|
||||
|
||||
- NC01 hostIP:`152.53.229.148`。
|
||||
- 已用 NodePort:`31199`、`31389`、`32676`。
|
||||
- `32080` 未被 Kubernetes Service 或 host listener 占用。
|
||||
- PK01 PostgreSQL 服务 active、TLS/5432/连接探针正常;生产 PikaOA 对象尚未落地,测试对象将通过独立声明创建。
|
||||
@@ -91,13 +91,23 @@
|
||||
修复 `pikaoa test-target` 临时运行面缺失附件配置与数据库迁移启动链,使 fixture 能渲染当前产品可启动的 namespace-local 后端运行面,保持未声明 target 与 `validationOnly` 全程无远端变更,执行记录见 [pikasTech/unidesk#2053](https://github.com/pikasTech/unidesk/issues/2053),完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.5.8_Task_Report.md)。
|
||||
#### R1.5.9 [in_progress]
|
||||
|
||||
落实用户最新要求:PikaOA 可不经过 CI/CD,由 YAML-first 在专用测试集群启动临时 Kubernetes 做测试和调试;SPEC 分离正式发布与临时测试,登记并验收真实 target,执行记录见 [pikasTech/unidesk#2058](https://github.com/pikasTech/unidesk/issues/2058),完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.5.9_Task_Report.md)。
|
||||
按用户确认方案在现有 NC01 k3s 的独立 pikaoa-test namespace 建立 YAML-first 测试运行面,使用 PK01 host PostgreSQL 独立测试 database/role 和 YAML hostIP 端口;先通过受控 CLI 单步调通,再接入跟随产品 master 的独立测试 CI/CD,执行记录见 [pikasTech/unidesk#2058](https://github.com/pikasTech/unidesk/issues/2058),完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.5.9_Task_Report.md)。
|
||||
|
||||
##### R1.5.9.1 [completed]
|
||||
|
||||
将 `pikaoa test-target start` 的 PostgreSQL、迁移和 rollout 长等待改为提交即返回与 `status` 短轮询,保持真实失败可见和 Secret 脱敏,执行记录见 [pikasTech/unidesk#2060](https://github.com/pikasTech/unidesk/issues/2060),完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.5.9.1_Task_Report.md)。
|
||||
##### R1.5.9.2 [completed]
|
||||
|
||||
修复 PikaOA 临时测试 target 的数据库 schema/search_path,使迁移 Job、API 和 Worker 通过 YAML 声明的同一 schema 访问业务表,保持 DSN 与 Secret 脱敏,执行记录见 [pikasTech/unidesk#2061](https://github.com/pikasTech/unidesk/issues/2061),完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.5.9.2_Task_Report.md)。
|
||||
##### R1.5.9.3 [completed]
|
||||
|
||||
按用户确认方案将测试架构定锚为现有 NC01 k3s 的 pikaoa-test namespace、PK01 host PostgreSQL 独立测试库与角色、YAML hostIP 端口,并更新 SPEC 与 [pikasTech/unidesk#2058](https://github.com/pikasTech/unidesk/issues/2058),完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.5.9.3_Task_Report.md)。
|
||||
##### R1.5.9.4 [in_progress]
|
||||
|
||||
在 PK01 host PostgreSQL 声明独立 pikaoa_test database/role、Secret export 与 NC01 HBA,执行记录见 [pikasTech/unidesk#2078](https://github.com/pikasTech/unidesk/issues/2078),完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.5.9.4_Task_Report.md)。
|
||||
##### R1.5.9.5 [in_progress]
|
||||
|
||||
在 NC01 pikaoa-test namespace 实现外部 PK01 测试 DSN、API/Worker/Web/迁移/附件 PVC、OTel/Prometheus、YAML hostIP 端口和受控单步 CLI,执行记录见 [pikasTech/unidesk#2079](https://github.com/pikasTech/unidesk/issues/2079),完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.5.9.5_Task_Report.md)。
|
||||
### R1.6
|
||||
|
||||
审核并合并双仓 PR,执行首次受控 PaC bootstrap,由正常 source PR merge 自动发布,依赖 R1.3-R1.5,完成任务后将详细报告写入[任务报告](./details/pikaoa-enterprise-platform/R1.6_Task_Report.md)。
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
| v0.3 | 待本版本提交 | 2026-07-14 | 将审计语义校验收敛为非阻塞 warning 和最小安全归一化,避免开发期复杂审计门禁阻塞业务。 |
|
||||
| v0.4 | 待本版本提交 | 2026-07-14 | 允许 Web 与后端并行开发,最终以同一公开 HTTP API 和 CLI/Web 等价业务流完成集成验收。 |
|
||||
| v0.5 | 待本版本提交 | 2026-07-14 | 增加不经过 CI/CD 的 YAML-first 专用测试集群临时运行面,并与正式自动交付严格隔离。 |
|
||||
| v0.6 | 待本版本提交 | 2026-07-15 | 将测试运行面收敛到现有 NC01 k3s 的独立 namespace,复用 PK01 host PostgreSQL 的独立测试库和角色,并增加 hostIP 暴露与测试自动交付契约。 |
|
||||
|
||||
修改历史只记录规格语义变更,不记录实现进度、阶段基线或一次性证据。
|
||||
|
||||
@@ -84,7 +85,9 @@ PikaOA 终态必须同时具备:
|
||||
- 文件内容通过可替换存储端口管理,元数据与哈希进入业务数据;
|
||||
- 配置、Secret、数据库绑定、运行目标和公网暴露均由 owning YAML 管理;
|
||||
- 正式发布由 GitHub 合并触发自动 CI/CD、GitOps 和运行面收敛;
|
||||
- 后端测试和调试可以不经过 CI/CD,由 owning YAML 在专用测试集群创建临时 Kubernetes 运行面。
|
||||
- 后端测试和调试可以先不经过 CI/CD,由 owning YAML 在现有测试节点的独立 Kubernetes namespace 创建可单步控制的运行面;
|
||||
- 单步调通后,独立测试交付 consumer 跟随产品 `master`,且不改变正式发布 consumer 和正式运行面;
|
||||
- 测试 Web 通过 owning YAML 声明的 hostIP 端口暴露,不进入正式公网域名。
|
||||
- 首版可观测能力:
|
||||
- Web、CLI、API、Worker 和 CI/CD 统一传播 W3C trace context;
|
||||
- Go 服务从第一版接入 OpenTelemetry traces、metrics 和结构化日志关联;
|
||||
@@ -102,7 +105,7 @@ PikaOA 终态必须同时具备:
|
||||
- CLI、Web 工作台、HTTP API、健康接口和异步任务入口。
|
||||
- OpenTelemetry Collector 接入、Prometheus 指标、结构化日志和 trace/metric 关联。
|
||||
- PostgreSQL、Kubernetes namespace、Secret、CI/CD、GitOps 和公网 HTTPS。
|
||||
- 专用测试集群上的 YAML-first 临时后端运行面、临时 PostgreSQL、可观测性和清理入口。
|
||||
- 现有测试节点独立 namespace 内的 YAML-first 后端运行面、PK01 host PostgreSQL 独立测试库、hostIP 暴露、可观测性和清理入口。
|
||||
|
||||
### 2.4 范围外
|
||||
|
||||
@@ -129,7 +132,7 @@ PikaOA 终态必须同时具备:
|
||||
| Typed ID 关联 | 资源只保存关联对象的资源类型和全局唯一 ID,不复制关联对象私有载荷,也不以嵌套路径或表级从属关系定义资源身份。 |
|
||||
| 模块 | 具有独立领域边界、权限、迁移、API、事件和前端入口的可插拔业务能力。 |
|
||||
| 领域事件 | 模块完成业务事务后写入的结构化事实,用于同进程订阅或异步扩展。 |
|
||||
| 临时测试运行面 | 不经过正式 CI/CD,在 YAML 声明的专用测试集群中按源码提交创建并可完整删除的 API、Worker 与测试依赖集合。 |
|
||||
| 测试运行面 | 与正式 namespace 隔离,由 YAML 在现有测试节点上声明并可通过受控 CLI 单步部署、查询和停止的 API、Worker、Web 与测试依赖集合。 |
|
||||
|
||||
## 4. 系统边界和内部模块
|
||||
|
||||
@@ -293,13 +296,16 @@ flowchart LR
|
||||
C --> A[GitOps 与 Argo]
|
||||
A --> P[正式 PikaOA namespace]
|
||||
Y[config/pikaoa.yaml testRuntime] --> T[pikaoa test-target]
|
||||
T --> K[专用测试集群临时 namespace]
|
||||
K --> D[(临时 PostgreSQL)]
|
||||
T --> K[NC01 独立测试 namespace]
|
||||
K --> D[(PK01 host PostgreSQL 独立测试库)]
|
||||
K --> O[OTel 与 Prometheus]
|
||||
T --> X[按实例删除临时 namespace]
|
||||
K --> H[NC01 hostIP YAML 端口]
|
||||
M[产品 master 合并] --> Q[独立测试交付 consumer]
|
||||
Q --> K
|
||||
T --> X[受控停止测试工作负载]
|
||||
```
|
||||
|
||||
正式发布与临时测试是职责隔离的两条路径。正式发布的 source authority、镜像、数据库、Secret、公网入口和运行 namespace 只由正式交付配置管理。临时测试只消费 owning YAML 明确声明的专用测试 target 和 commit-pinned 镜像,在实例 namespace 内创建 API、Worker、迁移、附件存储和临时 PostgreSQL;它不得读取、修改或清理正式交付对象。
|
||||
正式发布与测试运行面是职责隔离的两条路径。正式发布的 source authority、镜像、数据库、Secret、公网入口和运行 namespace 只由正式交付配置管理。测试运行面只消费 owning YAML 明确声明的现有测试 target、独立 namespace、commit-pinned 镜像、PK01 独立测试数据库与角色、测试 Secret 和 hostIP 端口;它不得读取、修改或清理正式交付对象。测试运行面先允许通过受控 CLI 单步调通,随后由独立测试 consumer 跟随产品 `master` 自动更新;两种方式必须共享同一 owning YAML,不得形成第二份运行配置真相。
|
||||
|
||||
## 6. 全局原子需求
|
||||
|
||||
@@ -483,25 +489,28 @@ Prometheus 必须覆盖:
|
||||
|
||||
Web、API、Worker 和 CI/CD 必须输出结构化日志、健康状态和 trace 上下文。源码版本、镜像版本和 API 版本漂移只能形成非阻塞 warning,不得阻塞可安全解释的用户业务。
|
||||
|
||||
### 6.13 PIKAOA-L0-REQ-013 YAML-first 专用测试集群
|
||||
### 6.13 PIKAOA-L0-REQ-013 YAML-first 独立测试运行面
|
||||
|
||||
PikaOA 后端测试和调试必须支持不经过 PaC、Tekton、GitOps、Argo 或正式 CI/CD 的临时 Kubernetes 运行面。该运行面只能部署到 owning YAML 明确声明的专用测试集群 target;未声明、零匹配或多匹配时,受控入口必须在连接远端前返回 `configured=false` 或 typed blocker,并保持 `mutation=false`。
|
||||
PikaOA 后端测试和调试必须支持在接入自动交付前,通过受控 CLI 单步部署 Kubernetes 测试运行面。该运行面只能部署到 owning YAML 明确声明的测试 target 和独立 namespace;未声明、零匹配或多匹配时,受控入口必须在连接远端前返回 `configured=false` 或 typed blocker,并保持 `mutation=false`。测试 target 可以复用现有 k3s 节点,但不得复用正式 namespace、正式数据库角色、正式 Secret 或正式公网暴露。
|
||||
|
||||
测试 target 必须由 owning YAML 声明:
|
||||
|
||||
- 节点、route、namespace 前缀、实例 TTL 和清理策略;
|
||||
- 节点、route、固定测试 namespace、停止与清理策略;
|
||||
- 源码仓库、源码提交和 commit-pinned API、Worker、迁移镜像;
|
||||
- 临时 PostgreSQL、运行 Secret、管理员与普通员工初始凭据来源;
|
||||
- namespace-local 附件存储、健康探针、OTel endpoint 和 Prometheus 抓取;
|
||||
- PK01 host PostgreSQL 中独立测试 database、role、Secret export 和受控连接来源;
|
||||
- namespace-local 附件存储、健康探针、OTel endpoint、Prometheus 抓取和 Web 工作负载;
|
||||
- hostIP、空闲端口和 Kubernetes Service 暴露方式;
|
||||
- 跟随产品 `master` 的独立测试交付 consumer 与 source authority;
|
||||
- 正式 namespace 保护集合和对象所有权标签。
|
||||
|
||||
接受标准包括:
|
||||
|
||||
- `plan` 只读渲染目标、实例 namespace、镜像提交、Secret presence、可观测性和保护集合;
|
||||
- `start` 只在显式确认后创建实例 namespace,并在 API 与 Worker ready 前完成数据库迁移;
|
||||
- `status` 返回迁移、API、Worker、PostgreSQL、OTel 和 Prometheus 的有界状态;
|
||||
- `stop` 只删除 target、instance 和 managed-by 标签同时匹配的精确 namespace;
|
||||
- 临时运行面不连接正式 PostgreSQL,不复用正式 Secret,不进入正式公网入口,也不改变正式发布 source authority;
|
||||
- `plan` 只读渲染目标、测试 namespace、镜像提交、数据库/Secret presence、hostIP 端口、可观测性和保护集合;
|
||||
- `start` 只在显式确认后创建或更新固定测试 namespace,并在 API、Worker 和 Web ready 前完成数据库迁移;
|
||||
- `status` 返回迁移、API、Worker、Web、外部测试 PostgreSQL、hostIP 入口、OTel 和 Prometheus 的有界状态;
|
||||
- `stop` 只停止或删除 target、namespace 和 managed-by 标签同时匹配的测试对象,不触碰其他 namespace;
|
||||
- 测试运行面连接 PK01 中独立测试 database/role,不复用正式数据库凭据、正式 Secret 或正式公网入口,也不改变正式发布 source authority;
|
||||
- 单步验收通过后,测试 consumer 的正常触发只来自产品 `master` 合并,且只更新同一测试 namespace;
|
||||
- 配置一致性、版本漂移和 OTel exporter 失败只产生 `blocking=false` warning,Secret 缺失或 namespace 所有权不安全仍在 mutation 前失败。
|
||||
|
||||
## 7. API、数据与兼容边界
|
||||
@@ -539,8 +548,9 @@ PikaOA 后端测试和调试必须支持不经过 PaC、Tekton、GitOps、Argo
|
||||
### 8.3 运行验收
|
||||
|
||||
- CI/CD 绑定 source commit、PipelineRun、镜像 digest、GitOps revision、Argo 状态和运行面 ready;
|
||||
- 临时测试通过 YAML 声明的专用测试 target 完成 `plan`、`start`、`status`、CLI 后端业务验证和 `stop`,不触发正式 CI/CD;
|
||||
- 临时测试结束后实例 namespace 已删除,正式 namespace、正式数据库、正式 Secret 和公网入口保持不变;
|
||||
- 测试运行面通过 YAML 声明的现有测试 target 完成 `plan`、`start`、`status`、CLI 后端业务验证、OTel/Prometheus/Web 验证和 `stop`,不触发正式 CI/CD;
|
||||
- 单步验证通过后,产品 `master` 的正常合并事件可以通过独立测试 consumer 自动更新测试 namespace;
|
||||
- 测试停止后受控对象已停止或删除,正式 namespace、正式数据库、正式 Secret 和公网入口保持不变;
|
||||
- Web、API 和 Worker 运行在 owning YAML 声明的 namespace;
|
||||
- PostgreSQL 连接、迁移、附件存储和健康检查通过;
|
||||
- OTel Collector 接收 Web/CLI/API/Worker trace,Prometheus 抓取 API/Worker 指标;
|
||||
|
||||
Reference in New Issue
Block a user