5.8 KiB
5.8 KiB
PikaOA
配置真相
- PikaOA 平台配置唯一真相是
config/pikaoa.yaml。 - 测试运行面固定使用:
- Target:
NC01; - route:
NC01:k3s; - namespace:
pikaoa-test; - NodePort:
32080。
- Target:
- 测试 namespace 不根据 commit、instance 或任务动态生成。
pikaoa与pikaoa-ci是正式交付保护 namespace。- 测试入口不得渲染、覆盖或删除保护 namespace 中的对象。
数据库边界
- 测试数据库固定使用 PK01 host PostgreSQL。
config/platform-db/postgres-pk01.yaml声明独立的:- role:
pikaoa_test; - database:
pikaoa_test; - schema:
pikaoa; DATABASE_URLexport:platform-infra/pikaoa-test.env。
- role:
pikaoa-testnamespace 不创建 PostgreSQL StatefulSet、Service 或临时数据库。- 数据库生命周期独立于 namespace 和业务 workload。
- 测试数据清理由 PK01 PostgreSQL 受控入口负责,不依赖删除 namespace。
Secret 初始化
config/secrets-distribution.yaml声明:- source:
platform-infra/pikaoa-test.env; - target:
pikaoa-test-nc01; - scope:
pikaoa-test; - Kubernetes Secret:
pikaoa-test-runtime。
- source:
platform-infra/pikaoa-test.env必须包含:DATABASE_URL;PIKAOA_SESSION_SECRET。
DATABASE_URL由platform-db postgres export-secrets写入并保留。createIfMissing只为PIKAOA_SESSION_SECRET生成值,不覆盖已有DATABASE_URL。- 管理员和员工密码继续使用既有 external raw sources:
~/.unidesk/.env/pikaoa-admin-password.txt;~/.unidesk/.env/pikaoa-employee-password.txt。
- Secret 输出只披露对象、key、presence、fingerprint 和摘要,不读取或打印值。
Test Target CLI
- 受控入口是
bun scripts/cli.ts pikaoa test-target。 config/pikaoa.yaml#testRuntime声明固定 namespace、镜像、PVC、Secret 引用、迁移、工作负载、探针和暴露端口。- 所有创建对象都带以下所有权标签:
app.kubernetes.io/managed-by=unidesk-pikaoa-test-target;pikaoa.unidesk.io/test-runtime=true;pikaoa.unidesk.io/target=<target-id>;pikaoa.unidesk.io/instance=<instance-id>。
stop只允许删除同时匹配固定 namespace 和全部所有权标签的运行面。- CLI 使用异步任务状态目录记录有界状态和事件,不建立第二数据库、控制器、租约或锁服务。
初始化顺序
-
使用
platform-db postgres受控入口准备 PK01pikaoa_testrole/database,并 exportDATABASE_URL。 -
执行 foundation:
bun scripts/cli.ts pikaoa test-target start \ --target NC01 \ --instance default \ --step foundation \ --confirm -
foundation 只创建带所有权标签的固定
pikaoa-testNamespace 和附件 PVC,不要求业务 Secret 已存在。 -
执行 Secret 下发:
bun scripts/cli.ts secrets sync \ --config config/secrets-distribution.yaml \ --scope pikaoa-test \ --confirm -
secrets sync按 YAML 声明补齐允许生成的本地来源,并下发pikaoa-test-runtime。 -
使用同一 commit 依次执行:
--step migration;--step api;--step worker;--step web。
-
Web 固定通过
152.53.229.148:32080的 NodePort 入口验收。
单步运行
- foundation 不需要
--commit,也不检查业务 Secret。 - migration、api、worker、web 和 all 必须显式提供
--commit。 - 每个
start立即返回任务 ID;使用同一 target、instance 和 step 的status查询终态。 - request identity 包含:
- target;
- instance;
- 产品 commit;
- step;
- 当前 step 的稳定 structural manifest fingerprint。
- request fingerprint 对 Secret
stringData只保留 key 结构和脱敏占位,不包含 Secret 原值。 - request fingerprint 排除
pikaoa.unidesk.io/expires-at等每次渲染变化的易变字段。 - 完全相同 request 重复提交只返回已有任务状态,不并行创建第二任务。
- 不同 request 遇旧任务处于 queued/running 且 worker 存活时返回
start-instance-conflict。 - 不同 request 遇旧任务已 succeeded/failed/canceled,或 queued/running 但 worker 明确缺失时:
- 原子退役该 step 的旧有界状态目录;
- 继续使用同一
target/instance/step状态路径提交新任务; status只读取该 step 的最新任务。
- foundation 也遵循相同规则。
- foundation 需要显式形成新 request 时,可以:
- 提供新的
--commit修订标识; - 修改 foundation 的稳定 manifest 结构。
- 提供新的
- 不为重跑引入第二状态库、控制器、租约或长期历史存储。
- 迁移、rollout 或运行面查询失败返回具名失败码,不静默进入下一阶段。
- OTel exporter、配置版本和 commit 对齐漂移只产生
blocking=falsewarning,不恢复 dedicated 门禁。
交付阶段
- 当前阶段先稳定 YAML-first CLI 原入口和固定 NC01 测试运行面。
- CLI 闭环通过后,再建设独立 test CI/CD:
- 复用同一 owning YAML;
- 按 foundation、Secret sync、migration、api、worker、web 顺序编排;
- 不创建专用测试集群;
- 不生成动态 namespace;
- 不创建 namespace-local PostgreSQL;
- 不把测试 CI/CD 变成生产交付或用户业务的阻塞门禁。
- PR、构建或单测不能替代固定 NodePort 原入口验收。
本地验证
config/fixtures/pikaoa-test-target.yaml只用于 renderer 和 CLI 测试。- fixture target 固定为
validationOnly=true,不得连接真实 route。 - 最小验证包括:
bun --check scripts/src/pikaoa-test-target.ts;bun test scripts/src/pikaoa-test-target-async.test.ts;bun scripts/cli.ts check --syntax-only;pikaoa test-target plan --step foundation;git diff --check。