← 所有工作經歷

案例研究 03 · 實作內容

自架 GitHub Actions Runner 平台

建置自架 Runner 與共用開發主機,透過共用入口和資料服務,將工程師導向各自分支的獨立站台。

已實作,部分驗證完成 · 正式環境驗證尚未完成
GitHub ActionsActions Runner ControllerKubernetesTerraformDockerNginxPostgreSQLRedisGoogle Compute Engine

工程挑戰

多位工程師需要各自獨立的開發站台,但不希望每人都配置一套主機與資料服務。同時,自架 Runner 平台也需要更清楚的環境邊界、更容易診斷的排程問題、更快的映像建置,以及從映像追溯回 CI 執行紀錄的能力。

架構與設計

  • 透過 Terraform 與 GitOps 管理 Kubernetes Runner 資源,並區隔開發與正式環境的 Runner 範圍。
  • 將可獨立建置的映像拆成可排程的 Runner 工作,並在產出物附上 CI 執行中繼資料以利追溯。
CI Runner 工作流程
  1. 01GitHub Actions 工作流程
  2. 02Kubernetes Runner Scale Set
  3. 03平行建置工作
  4. 04容器映像
  5. 05OCI 執行中繼資料

共用開發環境

共用一台 Docker 主機可降低每位工程師的基礎設施成本;再以主機名稱路由搭配各分支專屬的容器堆疊,讓開發站台彼此區隔。

  • 共用一台開發主機及 HTTPS 入口與反向代理;依各工程師的主機名稱,將請求導向對應分支的容器堆疊。
  • 每個分支堆疊使用各自的服務容器與發布連接埠,讓多個站台共用主機時不會發生連接埠衝突或跨站請求路由。
  • 共用 PostgreSQL 服務,但依分支區隔資料庫。拓樸圖雖顯示共用 Redis,卻未記載每位工程師的 keyspace 或 ACL 邊界,因此不宣稱快取資料已完整隔離。
  • 工程師僅透過應用程式與部署流程存取環境;具高權限的主機管理則走獨立的維運人員專用路徑,不開放工程師直接 SSH。
共用開發站的請求路徑
  1. 01工程師專屬主機名稱
  2. 02共用 HTTPS 入口
  3. 03依主機名稱進行反向代理
  4. 04分支專屬容器與連接埠
  5. 05共用 PostgreSQL/Redis 服務

實作內容

  • 使用 Terraform 與 GitOps 管理 GitHub Actions Runner 資源。
  • 分開設定開發與正式環境的 Runner namespace。
  • 檢視 ARC controller、listener、Runner Scale Set、Runner group 與 workflow label,診斷工作無法排程的原因。
  • 確認閒置 Runner 縮減至零的行為,並調查 label 與 Runner group 的配對設定。
  • 將 Docker 元件建置拆成多個 GitHub Actions 工作,同時保留既有工作流程條件。
  • 在 OCI 映像標籤加入 GitHub Run ID 與 Run Attempt,追溯映像建置紀錄。
  • 透過依主機名稱設定的 Nginx 路由,將服務請求導向共用開發主機上各分支專屬的容器連接埠。
  • 共用 PostgreSQL 服務,並為各分支建立獨立資料庫;現有拓樸無法證明 Redis 也具備同等的工程師間隔離。
  • 直接管理主機的權限保留給基礎設施維運人員;工程師則使用應用程式與 CI 部署流程。
  • 使用 YAML parser、Actionlint 與差異檢視檢查工作流程變更。

驗證與影響

  • 開發環境 Runner 的 Terraform plan 僅顯示預期新增 namespace,且沒有資源銷毀操作。
  • 工作流程語法與靜態檢查都有成功驗證的紀錄。
  • 部分正式環境 Runner 規劃因缺少本機 Kubernetes context 而受阻,因此不列為已完整驗證。

限制與後續工作

  • 自動化 Beta 部署、映像更新器、Git 回寫與復原仍屬後續設計工作,不包含在已完成的 Runner 變更中。
  • 正式環境 Runner 變更仍須依環境完成驗證。
  • 共用主機拓樸透過主機路由、分支容器與資料庫提供站台層級的區隔,但並未為每位工程師配置獨立 VM 或網路邊界。
  • 拓樸中多個站台共用執行環境與資料網路,也沒有記載每位工程師各自的 Redis ACL 或 keyspace 隔離;在取得更多證據前,不應宣稱快取資料已隔離。
  • 現有紀錄將 Runner 平台與共用開發主機架構描述為互補的工作流程元件,沒有證據顯示 Runner 平台會直接佈建或部署每個站台。