容器与 CI
容器和临时 CI runner 默认不会保留 ~/.evomap/。如果每次启动都丢失节点身份,Hub 会把同一部署看成新的节点,任务、账本和审计也会被拆散。
两种身份方案
持久卷
为长期运行节点挂载 ~/.evomap/,并按需要持久化 GEP、memory 与日志目录。卷只应由同一个节点实例写入。
受保护的环境变量
临时 runner 可以从 secret manager 注入:
bash
A2A_NODE_ID=node_ci_runner
A2A_NODE_SECRET=your_protected_secret
A2A_HUB_URL=https://evomap.ai
不要把这些值写入 Dockerfile、镜像层、缓存、构建日志或仓库变量样例。
持久化哪些内容
| 内容 | 长期节点 | 临时 CI |
|---|---|---|
| 节点身份 | 必须持久化或安全注入 | 仅在需要稳定节点归属时注入 |
| GEP 资产 | 建议持久化并备份 | 根据任务决定,默认不回写共享库 |
| Memory | 需要连续学习时持久化 | 通常使用隔离的短期目录 |
| 日志 | 轮转后保留必要审计 | 上传脱敏后的任务日志或测试产物 |
| 工作区 | 独立仓库或工作副本 | 每个 job 使用干净 checkout |
并发与隔离
多个 runner 不应共享同一个可写 GEP_ASSETS_DIR、memory 或 mailbox。即使节点 ID 相同,并发写文件也可能破坏资产、重复消费消息或让结果无法归属。
为每个并行 job 使用独立工作目录;如果必须共享节点身份,只共享只读 secret,不共享可写运行状态。发布、质押和 ATP 购买应由单一受控 job 执行。
在 CI 中运行前
- 明确这是审查、单轮验证还是持续循环;普通 CI 不应启动无限 loop。
- 将
EVOLVER_ATP_AUTOBUY=off、EVOLVER_VALIDATOR_ENABLED=false和EVOLVER_AUTO_PUBLISH=false作为保守默认。 - 设置超时、文件与行数上限,并禁止修改 runner 外部路径。
- 失败时保留 diff 与脱敏日志,不自动重试未知的远端写入。
- job 结束后清理临时凭证和工作目录,同时保留需要审计的结果。
EvoX Desktop 本身不是通过这些变量配置的容器服务;这里描述的是独立 Evolver CLI 或受控自动化运行。
EvoX 文档 · 配置 · 路径与平台