開源工具 Act 承諾讓開發者能夠在本地執行 GitHub Actions 工作流,但這引發了嘗試使用它的開發者們的廣泛討論,因為他們遇到了各種不同的結果。雖然 Act 旨在提供更快的反饋迴圈並取代傳統的任務執行器(如 Make),但許多使用者報告稱在實際場景中實施時遇到了重大挑戰。
Act 的設計有兩個主要目標:為 GitHub Actions 工作流更改提供快速反饋,無需提交和推送程式碼;以及作為本地任務執行器。該工具透過讀取 .github/workflows/
目錄中的工作流檔案,使用 Docker 拉取或構建必要的映象,然後在配置為匹配 GitHub 環境的容器中執行操作。
平臺相容性問題
嘗試在不同硬體架構上執行 Act 的使用者面臨著重大障礙。一位開發者報告稱,在嘗試除錯 M 系列 Mac 上的 CI 問題時遇到持續失敗,這凸顯了本地環境與 CI 執行器之間固有的平臺不匹配問題。即使使用來自 catthehacker 的專用映象——據報道這些映象解壓後佔用超過 60GB——也無法解決相容性問題。
「就在本週,我再次嘗試使用它來除錯一些奇怪的 Ruby 測試 CI 失敗問題。我使用的是 M 系列 Mac,所以存在固有的平臺不匹配問題...我從未能夠讓它執行超過幹執行階段。」
平臺相容性問題不僅限於 Apple Silicon,另一個重要限制是 Act 不支援 Podman(一種替代容器引擎)。使用者報告說,關於 Podman 相容性的討論嘗試很快就被駁回,這在一個開源專案中被一些人認為是不尋常的。
Act 主要特點:
- 在本地執行 GitHub Actions 工作流
- 使用 Docker 模擬 GitHub 的執行環境
- 配置環境變數和檔案系統以匹配 GitHub
- 從原始碼構建需要 Go 工具 1.20+ 版本
常見問題報告:
- 平臺相容性問題(尤其是在 M 系列 Mac 上)
- 不支援 Podman
- 容器映象體積大(解壓後高達 60GB)
- 環境變數和金鑰設定困難
- 工作負載身份聯合的挑戰
- 需要修改工作流以適應本地執行
配置複雜性
即使工具成功執行,開發者也面臨著環境配置方面的挑戰。許多 CI 工作流依賴於特定環境的變數和金鑰,這些必須在本地重新配置。雖然 Act 確實提供了從檔案載入金鑰的解決方案,但在本地實現工作負載身份聯合和其他高階認證機制會帶來額外的複雜性。
使用 GitHub 的 OpenID Connect (OIDC) 令牌訪問 AWS 等雲資源的工作流需要特殊的條件邏輯,以便在 GitHub 和本地環境中都能正常執行。這需要專門修改工作流檔案以適應本地測試。
本地 CI 模擬的現實
許多開發者的共識是,嘗試在本地運行復雜的 CI 工作流可能從根本上就是有問題的。一位評論者將其描述為除了完全容器化的工作流外,這是一項相當無望的工作。即便如此,複製 CI 特定的環境變數和任務之間的構件共享仍然具有挑戰性。
一些開發者建議,與其專注於完美的本地複製,更好的方法可能是開發工具,這些工具可以在不需要 git 推送的情況下促進遠端構建,並結合 SSH 訪問來檢查實際的構建環境。這種方法承認本地和 CI 環境之間的固有差異,同時仍然提供改進的除錯功能。
儘管面臨這些挑戰,一些使用者報告說 Act 幫助他們在開發工作流程中取得了進步,這表明即使有其侷限性,該工具對某些用例和環境仍然提供了價值。
圍繞 Act 的討論突顯了 GitHub Actions 生態系統中的一個更廣泛的問題:雖然 GitHub 已經構建了一個全面的 CI/CD 平臺,但除錯工具在很大程度上被留給社群開發。平臺功能與除錯工具之間的這種差距為 GitHub 或第三方開發者建立更強大的解決方案提供了機會。
參考:act