Merge pull request #2080 from pikasTech/feat/pikaoa-test-nc01-anchor
Pipelines as Code CI / hwlab-web-probe-sentinel-nc01- Success
Pipelines as Code CI / platform-infra-gitea-nc01- Success
Pipelines as Code CI / unidesk-host- Success

docs: 定锚 PikaOA NC01 测试运行面
This commit is contained in:
Lyon
2026-07-15 09:00:28 +08:00
committed by GitHub
3 changed files with 66 additions and 20 deletions
@@ -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 对象尚未落地,测试对象将通过独立声明创建。
+11 -1
View File
@@ -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 明确声明的专用测试 targetcommit-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 endpointPrometheus 抓取;
- PK01 host PostgreSQL 中独立测试 database、role、Secret export 和受控连接来源;
- namespace-local 附件存储、健康探针、OTel endpointPrometheus 抓取和 Web 工作负载
- hostIP、空闲端口和 Kubernetes Service 暴露方式;
- 跟随产品 `master` 的独立测试交付 consumer 与 source authority
- 正式 namespace 保护集合和对象所有权标签。
接受标准包括:
- `plan` 只读渲染目标、实例 namespace、镜像提交、Secret presence、可观测性和保护集合;
- `start` 只在显式确认后创建实例 namespace,并在 APIWorker ready 前完成数据库迁移;
- `status` 返回迁移、API、Worker、PostgreSQL、OTel 和 Prometheus 的有界状态;
- `stop` 只删除 target、instance 和 managed-by 标签同时匹配的精确 namespace
- 临时运行面连接正式 PostgreSQL,不复用正式 Secret,不进入正式公网入口,也不改变正式发布 source authority
- `plan` 只读渲染目标、测试 namespace、镜像提交、数据库/Secret presence、hostIP 端口、可观测性和保护集合;
- `start` 只在显式确认后创建或更新固定测试 namespace,并在 APIWorker 和 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` warningSecret 缺失或 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 tracePrometheus 抓取 API/Worker 指标;