图例
侧载接入(设备 → 控制面)
任务派发 / 心跳(Pull)
文件通道(附件 / 产物)
侧载边界(外部系统)
① 持有侧载令牌→
② 提交任务→
③ 校验 scope→
④ 调度机排队 / 派发→
⑤ 开发机执行→
⑥ 收集文件→
⑦ 客户端下载产物
只有两个内建角色
平台内部只有调度机和至少一台开发机。开发人员、测试人员、CI 任务、脚本和其他任何系统都通过侧载令牌进入,因此不需要为它们新增角色、容器或派发规则。
固定的调用链
设备只调用控制面;控制面校验令牌、解析主机及其根调度机,再转发请求。设备看不到调度机地址,也不持有实例凭据——与后台管理端走的是同一条路径。
侧载不是 Agent
它没有容器、不注册、不发心跳、不占租约。由于复用常规的任务 / 租约 / fencing 路径,它无法绕过调度、准入和审计。
权限天生最小
scope 是封闭集合:tasks:read、tasks:write、builders:read、queue:read、console:run。其中 console:run 需在 tasks:write 之上单独授予;未知 scope 会被拒绝而不是忽略。
文件双向流动
输入以附件形式上传,落到 <workspace>/attachments/。输出通过调度机的产物通道收集:任意格式,校验 SHA-256,逐字节返回,而不是塞进标准输出。
生命周期与审计
last_seen_at 最多每 30 秒更新一次,令牌在 120 秒内视为在线。删除或过期在下次请求时以 403 生效。令牌的创建与删除进入审计;令牌及其哈希永不写日志。