Cloudflare 於2024年第四季推出了 Workers Builds 公開測試版 – 這是一個整合式的持續整合與部署(CI/CD)工作流程系統。不論是使用主流框架開發的全端應用程式,或是簡單的靜態網站,都能透過這個系統部署至 Workers 平台上。透過 Workers Builds,開發者可以將 GitHub 或 GitLab 與 Worker 連結,Cloudflare 會在每次提交程式碼時自動建置並部署更新。

系統架構設計

Workers Builds 的核心問題是如何取得 GitHub 或 GitLab 的提交,並啟動一個容器化的工作來複製儲存庫、建置專案並部署 Worker。雖然 Pages 已經解決了類似的問題,但考量到 Workers 生態系統在過去四年的發展,團隊決定充分運用 Workers 平台的現有工具,建立一個全新的架構。

系統主要包含兩個部分:

使用者設定面板

設定面板由一個簡單的用戶端 Worker 實作,它提供 RESTful API 並連接到 PostgreSQL 資料庫。資料庫儲存使用者的建置設定,透過這個 Worker 使用者可以檢視和管理他們的建置。系統使用 Hyperdrive 綁定來安全地連接資料庫,並透過 Cloudflare Access 進行存取控制。

建置管理系統

建置管理系統是一個更具挑戰性的問題,主要負責執行和監控整個建置過程。團隊希望達到以下目標:

  • 最小化建置啟動延遲
  • 全程追蹤並顯示建置狀態
  • 安全且長期儲存客戶建置紀錄

為此,系統大量使用了 Durable Objects (DO) 技術,包含:

  • Scheduler 類別:負責管理建置排程
  • BuildBuddy 類別:負責管理個別建置

Scheduler DO

Scheduler DO 相對簡單,它透過 Durable Objects Alarms 每秒觸發一次,檢查準備開始的使用者建置設定清單。對於每個建置,Scheduler 會建立一個 BuildBuddy 實例。

BuildBuddy DO

每個建置都有一個專屬的 BuildBuddy 實例,從初始化到結束全程負責管理該建置。BuildBuddy 的主要職責包括:

  • 取得執行建置所需的中繼資料和金鑰
  • 在 Cloudflare 的容器平台上啟動建置
  • 處理建置狀態更新
  • 管理建置紀錄

技術特色

系統還運用了 Workers 平台的多項進階特性:

  1. Smart Placement 和位置提示: 為降低延遲,系統使用 Smart Placement 確保請求在靠近主資料庫的位置處理。
  2. Workers Logs: 團隊採用 Workers Logs 進行紀錄彙整和搜尋,方便識別和除錯問題。透過新增中繼資料標籤,可以依照部署版本篩選紀錄。
  3. R2 儲存: 即將推出的建置快取功能將使用 R2 儲存建置成品,如套件相依性和建置輸出,以加快後續建置速度。
  4. JavaScript 原生 RPC: 2024 年 4 月新增的 JavaScript 原生 RPC 功能大幅簡化了元件間的通訊,無需撰寫額外的路由處理程式碼。

透過使用 Workers 和 Durable Objects, 我們可以透過輕鬆易懂的方式來建立一個複雜的分散式系統。作為 Cloudflare 自家平台的「第一位客戶」,團隊在開發過程中發現並改善了多個痛點,這些改善最終也讓所有開發者受益。隨著開發者平台的不斷成熟,建立複雜應用的機會越來越多。Workers Builds 的推出將為開發者提供更多工具,讓他們能夠將時間專注於撰寫程式碼,而非繁瑣的設定上。

想了解更多Cloudflare應用:立即與我們聯繫

原文改寫自Cloudflare Blog