CrestVPS

self hosted github runner

CI 和构建运行器

构建在您切换标签页之前完成。

我们会部署什么

€44.03/月

€62.9030% 年付

托管的 CI 分钟数按量计费、排队且缓慢,团队一有生产力,成本曲线就会变得难看。一对专用核心实例加上快速 NVMe 将超越大多数托管层级,且无论您推送的频率如何,每月成本固定。包含嵌套虚拟化,因此 Docker-in-Docker 和基于 KVM 的测试套件无需变通即可运行。

为什么这个配置

TORQUE 提供核心数,Gen5 NVMe 提供工件吞吐量,嵌套虚拟化则是免费的。将运行器注册到您的代码托管平台,然后删除托管计划。

我们会部署什么

PlanTORQUE T2
vCPU8 (dedicated)
内存32 GB
存储400 GB
镜像Ubuntu Server 24.04 LTS

规模确定

两个专用核心和每个并发任务 4 GB 是底线;编译型语言需要 4 核和 8 GB。因此,一个 32 核 TORQUE 节点可运行 8 个重任务或约 14 个轻任务,而不是 32 个。临时磁盘比两者都重要——为镜像层、依赖树和构建输出在 NVMe 上为每个并发任务预留 30-50 GB。如果任务需要嵌套虚拟化,则为每个节点添加一个核心。队列等待时间(而非任务持续时间)会告诉您何时添加节点。

嵌套虚拟化及其适用场景

大多数 CI 在容器内运行良好。有三种情况需要在客户机内部使用真正的虚拟机监控程序:测试 VM 镜像和 cloud-init、运行带有 KVM 加速的 Android 或嵌入式模拟器,以及任何不受信任的拉取请求执行代码且不得访问运行器的任务。TORQUE 向客户机公开 SVM,因此 KVM 在您的 VPS 内部运行,模拟器以原生速度运行,而不是通过软件模拟,这在 Android 测试套件上大约相差一个数量级。代价是外部虚拟机监控程序的一个核心开销,以及内部客户机的磁盘稍慢。为两者做好预算。

工件路径通常是瓶颈

对缓慢的流水线进行性能分析,编译步骤很少是最长的部分。拉取基础镜像、恢复缓存、上传工件和推送结果占用了典型构建的大部分墙钟时间。按回报顺序有三个修复方法:在同一个私有 VLAN 上保留一个 registry 拉取缓存,使层通过本地网络而不是公共互联网到达;将临时目录放在 NVMe 上,使层解包不受查找限制;使缓存键精确,以便恢复所需内容,而不是巨型归档。Dense Bergamo 核心很便宜。等待网络则不然。

常见问题

  • 在 overlayfs 上叠加 overlayfs 以实现 Docker-in-Docker。嵌套的 overlay 驱动很慢,偶尔会损坏层。在任务内部使用专用的块设备,或者通过嵌套 KVM 运行构建器。
  • 从不清理。悬空镜像、构建缓存和过时的卷会在数周内填满临时 NVMe,第一个症状就是构建在运行了一年多的步骤上失败。按定时器清理,而不是在失败时清理。
  • 让缓存传输超过构建时间。每个任务拉取和推送 3 GB 的依赖缓存可能比从头编译花费更多。测量两者,并将缓存放在与运行器相同的私有 VLAN 上。

调整配置

  • 其他所有选项嵌套虚拟化 · 包含
  • CPU调度锁定物理核心 · €9
  • 存储和加密ZFS with hourly snapshots · €7