CI Runner 主機
回答
自架 CI runner 會在您控制的伺服器上執行建置流程,而非供應商共用的集區。每月 14 美元的 Incognito VPS VECTOR 方案通常表現優於託管 runner,同時完全免除按分鐘計費與排隊等待。
| 情境 | 最低 |
|---|---|
| 小型專案 | 2 vCPU、4 GB RAM |
| 典型 monorepo | 6 vCPU、16 GB RAM |
| 大量編譯(Rust、C++) | 16 vCPU、64 GB RAM |
| Docker 層快取 | 140 GB 以上 NVMe |
算術往往就是決定性因素
託管 CI 分鐘數看似便宜,直到您真的去算。一個團隊每個月在 2 核心託管 runner 上跑數百次建置,花費往往超過一台 6 核心專屬 VPS,而且因為託管 runner 是負載競爭下的低階機器,花同樣的錢建置速度反而更慢。
省下的另一項是時間而非金錢。自架 runner 沒有佇列——您一推送工作就開始。在忙碌的託管集區,等待數分鐘才取得 runner 是常態,而這份延遲落在每一位開發者、每一次推送上。
快取才是真正加速的關鍵
持續存在的本機 NVMe 對 CI 經濟效益的影響,比單純的核心數更大。Docker 層、Cargo 暫存區、node_modules、Gradle 快取與 ccache 在自架 runner 上都能跨次執行保存,而託管 runner 每次從乾淨狀態開始,重新下載一切。
對大型 Rust 或 C++ 專案而言,這通常能將實際建置時間縮短五到十倍,而且完全免費。
隔離,因為 runner 會執行任意程式碼
自架 runner 會執行 pipeline 中的任何內容;對公開儲存庫而言,這代表任何貢獻者放進 pull request 的內容。切勿在沒有暫時性隔離執行的情況下,將自架 runner 連接到公開儲存庫。
使用容器或短命 VM 中的暫時性 runner,只給予 runner 必要的憑證,並將其放在沒有其他東西的伺服器上。每個專案一台 14 美元的機器,是防止 pipeline 被入侵影響其餘基礎設施的便宜保險。
常見問題
01 CI runner 該選哪個方案?
典型專案選 VECTOR(4 vCPU、8 GB);monorepo 或大量編譯選 BASTION(6 vCPU、16 GB)。對大多數 pipeline 而言,持續存在的 NVMe 快取比核心數更重要。
02 能搭配 GitHub Actions 使用嗎?
可以。將機器註冊為自架 runner,並用 runs-on 指定它。GitLab、Forgejo、Woodpecker 與 Drone 也都以相同方式運作。
03 自架 runner 對公開儲存庫安全嗎?
沒有暫時性隔離就不安全。pull request 可以在 runner 上執行任意程式碼。請使用暫時性容器或一次性 VM,且切勿授予 pipeline 不需要的憑證。
04 速度會快多少?
原始運算通常快兩到四倍;重度依賴快取的 pipeline 則快五到十倍,因為 Docker 層與相依套件快取會跨次保存,而非重新下載。
相關