容器與 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_ATP_AUTODELIVER=off與EVOLVER_TASK_RECEIVER=0,不啓動發佈流程;舊 Validator 與自動發佈變量不能作為 v2 安全開關。 - 設置超時、文件與行數上限,並禁止修改 runner 外部路徑。
- 失敗時保留 diff 與脱敏日誌,不自動重試未知的遠端寫入。
- job 結束後清理臨時憑證和工作目錄,同時保留需要審計的結果。
EvoX Desktop 本身不是通過這些變量配置的容器服務;這裏描述的是獨立 Evolver CLI 或受控自動化運行。
EvoX 文檔 · 配置 · 路徑與平台