GitHub Actions 怎麼用遠端 Mac 自動建置?2026 設定指南
GitHub 官方文件列明,自託管 Runner 需要透過 HTTPS 的 443 埠與 GitHub 服務通訊(網路需求)。若專案需要 macOS 工具鏈或自訂且持續的建置環境,遠端 Mac 可配置成 GitHub Actions 自託管 Runner;但主機維護和安全隔離也會落在使用者身上。公開倉庫或不受信任的貢獻程式碼,不應直接接觸存有敏感憑據的常駐 Runner。
適合閱讀的對象
獨立 Apple 平台開發者:希望把重複建置工作交給遠端 macOS 主機。
數位遊民與自由工作者:需要跨裝置觸發建置,並評估遠端 Mac 是否符合專案環境。
小型遠端團隊技術負責人:需要安排 Runner 權限、憑據隔離和維護責任。
開始部署前:遠端 Mac 是否真的需要接手建置
遠端 Mac 是工作流派送後執行指令的主機,不是 GitHub Actions 工作流本身。工作流仍由 GitHub 管理;Runner 接收符合條件的工作,再於主機上執行建置命令。因此,先確認工作對 macOS 的依賴,比先註冊 Runner 更重要。
適合交給遠端 Mac 的任務,通常需要 macOS 專屬工具、專案自訂環境,或需要在主機上保留特定工具與設定。若建置只使用跨平台命令,且 GitHub 託管 Runner 已能提供所需環境,就沒有必要為了「有一台 Mac」而增加維運工作。
還有一種情況適合雙軌:可信任的主分支建置使用遠端 Mac;不可信任的外部貢獻工作流則改用隔離環境,或只派送至符合需求的託管 Runner。若兩邊的工具鏈或建置結果不同,則要分別驗收,不能把「其中一邊成功」視為整條交付流程已完成。
設定前:主機帳戶、網路與權限準備
註冊前先核對主機的 macOS 帳戶、網路連線、工作目錄和倉庫管理權限。Runner 要能連到 GitHub 的服務端點;只確認可以瀏覽一般網站,不能代替確認 Runner 所需的網路連線。若環境有防火牆或代理設定,應先交由網路管理者檢查必要的連線是否被阻擋。
建議使用專供建置的 macOS 帳戶和獨立工作目錄,避免 Runner 直接沿用日常管理帳戶的檔案與權限。建置所需的憑據也應限於必要用途;不需要的個人資料、SSH 金鑰或長期存取權杖,不應放在 Runner 可讀取的位置。
管理者還要確認 Runner 綁定的倉庫或組織範圍。依 GitHub 的自託管 Runner 存取管理文件,Runner 可按管理範圍設定可用對象;不要為了省事就讓不相關的倉庫共用同一台主機。
註冊階段:取得臨時憑據並連接 Runner
GitHub 官方的 Runner 設定流程包含取得設定指示、在主機上設定 Runner,以及啟動 Runner 等階段。實際操作時,應從 GitHub 當下提供的官方指示取得設定資料;註冊用令牌屬於臨時憑據,不要把令牌貼進工作流檔案、文件或長期保存的腳本。完整操作可參照新增自託管 Runner 的官方步驟。
註冊時可為用途設定辨識清楚的標籤,例如 ci-mac,讓工作流能選到預期的主機。標籤只協助派送,不代表已驗證主機內的工具、Xcode 版本或專案相容性;標籤名稱及套用方式可參考Runner 標籤說明。
完成註冊後,先在 GitHub 的 Runner 清單確認狀態,再檢查主機上的 Runner 程序是否仍在執行。畫面顯示已註冊,只能證明設定走到某個階段,不能證明工作流已成功派送,更不能證明建置產物可用。
首次驗收:用最小工作流確認任務落在遠端 Mac
第一次測試先使用可信任分支和手動觸發,避免尚未確認權限邊界,就讓外部事件自動執行程式碼。以下範例列出基本結構;<已核准的版本或提交參照> 應替換成團隊已審核的 action 參照,PROJECT_PATH 和 SCHEME 則需依專案設定。
name: macOS build
on:
workflow_dispatch:
permissions:
contents: read
jobs:
build:
runs-on: [self-hosted, macOS, ARM64, ci-mac]
steps:
- name: 取得原始碼
uses: actions/checkout@<已核准的版本或提交參照>
- name: 確認主機工具
run: |
uname -s
sw_vers
xcodebuild -version
- name: 執行建置
run: |
xcodebuild \
-project "$PROJECT_PATH" \
-scheme "$SCHEME" \
-configuration Release \
build
env:
PROJECT_PATH: ${{ vars.PROJECT_PATH }}
SCHEME: ${{ vars.SCHEME }}
工作流權限應從最低需求開始;例如範例只授予讀取內容的權限。若專案需要寫入權限或發布憑據,應逐項確認必要性,再加入對應設定。GitHub 的工作流語法文件說明了權限及工作流欄位;外部 action 也應納入審核,參照其安全使用建議。
驗收時要同時看三個位置:工作流執行頁面是否顯示工作已開始、主機端是否有相應的 Runner 活動,以及工作日誌中的系統與工具輸出是否符合預期。像 uname -s 回報 Darwin,可以協助確認命令在 macOS 環境執行;真正的專案建置仍要檢查結束狀態與產物,不能以工具資訊輸出代替。
若需要讓後續工作流下載建置結果,還要確認產物路徑和保留方式。GitHub 對工作流產物的用途與操作有獨立說明;建置成功但沒有可取回的產物,仍不是完整交付。
開放自動觸發前:依程式碼來源劃分信任邊界
自託管 Runner 會在主機上執行工作流程式碼。GitHub 特別提醒,自託管 Runner 面對不可信工作流時存在安全風險;因此,外部貢獻程式碼若能在常駐主機上執行,就可能接觸到主機可讀取的檔案、工具或其他資源。部署前應閱讀安全使用 GitHub Actions 的官方說明。
建議按觸發來源分開決策:
- 可信任的內部分支:在確認提交來源、工作流內容及所需憑據後,才派送至自託管 Runner。
- 外部貢獻或公開來源:不讓其直接執行在持有敏感憑據的常駐 Runner;改用隔離環境,或設定人工審批與其他限制。
- 發布和部署工作:將建置與發布憑據分開管理,只在確有需要的工作中授予必要權限。
- 倉庫範圍不明:先收窄 Runner 可服務的倉庫,再開啟自動觸發;不要用全組織共用取代權限規劃。
初期只啟用手動觸發或可信分支事件。待權限與日誌驗收完成,再逐步加入其他事件。事件種類和觸發條件可查看工作流觸發事件參考。如果無法隔離外部程式碼,也無法移除 Runner 可讀取的敏感資料,就先不要讓該類工作流接觸這台主機。
日常運維:Runner 離線、主機重啟與工作積壓
Runner 離線時,先從 GitHub Actions 執行狀態分辨問題位置。工作長時間等待且沒有接手主機,應先檢查 Runner 是否在線、服務程序是否運作及標籤是否匹配;工作已開始但命令失敗,則檢查工作日誌中的路徑、依賴與工具設定。不要因工作排隊就立刻重複提交相同建置,否則可能增加積壓,卻沒有修復原因。
主機重啟後,確認 Runner 是否按預期恢復連線,再以不涉及發布的測試工作驗證派送。若系統更新、帳戶狀態或網路變動後仍無法連線,依官方自託管 Runner 監控與故障排除指引檢查主機和 Runner 記錄。
工作積壓期間,要有明確的備援與暫停條件:相容的工作可切到託管 Runner;依賴本機工具鏈的工作則先停止自動派送,待遠端 Mac 恢復並完成測試後再恢復。若建置涉及發布、簽署或敏感憑據,不能只為清空佇列就略過人工審查。遠端 Mac 是否能在特定時間內恢復,取決於主機、網路和維護安排,沒有實測資料時不應承諾固定恢復時間。
完整交付驗收:自託管、託管 Runner 或雙軌
最後用真實專案走完一次交付,而非只跑系統資訊命令。確認觸發事件符合預期、工作由正確 Runner 接手、建置成功、產物能取回,並演練一次 Runner 離線後的備援或暫停流程。若專案依賴 macOS 專屬工具,還要確認實際環境與依賴;具體 macOS、Xcode 及專案相容性仍須在目標主機上驗證。
| 方案 | 適合條件 | 主要代價 | 驗收重點 |
|---|---|---|---|
| 遠端 Mac 自託管 Runner | 需要自訂 macOS 工具鏈、固定環境,且有人負責維護主機與隔離權限 | 主機、網路、Runner 和安全設定都要自行維護 | 真實建置、產物取回、重新連線及憑據隔離 |
| GitHub 託管 Runner | 工作可在其提供的執行環境完成,且不需要保留自訂主機狀態 | 不適用的工具鏈或環境需求仍須另行處理 | 專案依賴、工作流權限與輸出結果 |
| 雙軌安排 | 可信任的 macOS 建置需要遠端 Mac,但其他工作或不可信程式碼需要不同隔離方式 | 需維護多條工作流並比對結果 | 事件派送規則、兩邊結果一致性與故障切換 |
若只偶爾需要 macOS 建置,先比較短期使用與自行長期維護的責任;若建置持續且有人可管理權限、更新與故障復原,自託管才有合理性。需要估算遠端 Mac 使用成本時,可先查看遠端 Mac 方案與租用資訊,並依專案週期和所需環境核對實際方案,不以未驗證的規格或價格作為決策依據。
若目前以本地 Mac 或通用 Runner 為主,可能仍要處理隨身設備依賴、macOS 環境不一致,以及故障時缺少備援等問題;反過來說,長期高頻且需要固定硬體的建置,也未必適合租用,購置自有主機可能更符合維運方式。完成真實工作流驗收後,再按專案週期與主機維護責任選擇:若只需階段性測試或旅途中維持 Apple 平台建置,可參考 SFTPMAC 的遠端 Mac 服務資訊,評估租用環境是否比攜帶或維護自有 Mac 更合適。