实现兼容 Gitea Runner 协议的动态调度器 #7

Open
opened 2026-09-16 14:52:24 +00:00 by panxiao81 · 0 comments
Owner

背景

当前 workflow_job webhook → NATS → 临时 act_runner 的实现用于快速验证 Pod/VM 生命周期。它依赖 webhook 时序,而且 queued 事件创建的 runner 不保证领取同一个 task,因此不是长期调度接口。

目标

controller 直接作为 Gitea Runner 协议客户端注册并声明 self-hosted、pod、vm labels,只在 backend 有容量时通过 RunnerService 领取 task,再将已领取 task 交给一次性 Pod 或 microVM executor。

必须覆盖

  • RunnerService Register/Declare/FetchTask 与版本兼容测试
  • task 心跳、日志、状态、取消、超时和最终结果上报
  • scheduler 重启后的 lease 恢复与防重复执行
  • scheduler 到 Pod/VM executor 的单任务 handoff 协议
  • registration credential 不进入 executor
  • SPIFFE 身份直接由实际领取 task 的 repository/job name 派生
  • 保持 [self-hosted, pod]、[self-hosted, vm] workflow 接口不变
  • 完成双轨验证后删除 webhook、临时 runner 注册和 binding subject

详细路线见 PR #6 新增的 docs/runner-protocol-roadmap.md。

## 背景 当前 `workflow_job` webhook → NATS → 临时 act_runner 的实现用于快速验证 Pod/VM 生命周期。它依赖 webhook 时序,而且 queued 事件创建的 runner 不保证领取同一个 task,因此不是长期调度接口。 ## 目标 controller 直接作为 Gitea Runner 协议客户端注册并声明 `self-hosted`、`pod`、`vm` labels,只在 backend 有容量时通过 RunnerService 领取 task,再将已领取 task 交给一次性 Pod 或 microVM executor。 ## 必须覆盖 - RunnerService Register/Declare/FetchTask 与版本兼容测试 - task 心跳、日志、状态、取消、超时和最终结果上报 - scheduler 重启后的 lease 恢复与防重复执行 - scheduler 到 Pod/VM executor 的单任务 handoff 协议 - registration credential 不进入 executor - SPIFFE 身份直接由实际领取 task 的 repository/job name 派生 - 保持 `[self-hosted, pod]`、`[self-hosted, vm]` workflow 接口不变 - 完成双轨验证后删除 webhook、临时 runner 注册和 binding subject 详细路线见 PR #6 新增的 `docs/runner-protocol-roadmap.md`。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: panxiao81/gitea-dynamic-runner#7