关于魔改 forgejo runner以支持VM模式的想法


修改点

  1. 修改 act/pkg/runner/run_context.go:L312 VM模式下改为退出runner
  2. 搞个proxy,在runner提交了最后更新后如果task.Status.IsDone()则回滚vm快照
  3. proxy给vm签发一次性的token,使用qmguestagent下发,保证恶意任务无法重用token来冒充runner(重用了也只能冒充自己,没有意义)
  4. proxy同时负责处理并发执行
    • 默认情况下runner有个runner.capacity配置
    • vm里设置为1
    • proxy将任务分发给多个vm
  5. proxy还负责在超时后强制停止vm

可能的优化

  1. proxy负责预先启动部分vm

pve 设置 hookscript 示例

qm set 100 --hookscript local:snippets/destroy.sh

PVE API

克隆VM

打快照

快照回滚

检查是否允许快照

VM关机

QEMU Guest Agent exec

QEMU Guest Agent exec-status

proxy所需协议

协议定义