本週先依序確認 Mac 主機可達、Runner 服務狀態與 GitHub 連線,再檢查標籤和群組權限;不要一開始就刪除 Runner 並重新註冊。適用於主機重啟後 Runner 顯示 Offline,或雖已在線、工作流程仍無法接單的情況;只有代表性工作流程完成接單、建置及結果回傳驗收,才恢復生產派送。

負責 GitHub Actions 自托管 Runner 的平台工程師:用分層方式定位服務未啟動或無法連線的原因。
負責企業 Mac CI 的 IT 團隊:建立可重複執行的故障檢查與恢復驗收。
維護 iOS/macOS 發布流程的技術負責人:確認 Runner 在線不等於建置或發布已恢復。

01

主機無法連線,還是 Runner 應用離線?

GitHub 顯示 Offline 只表示 Runner 目前不能接單,不能單憑這個狀態判定是註冊故障。GitHub 列出的可能原因包括主機離線、Runner 應用未執行,或 Runner 無法與 GitHub 通訊。先把主機狀態和 Runner 狀態分開確認,才不會在主機根本無法連線時反覆處理 Runner 設定。GitHub 官方排障說明

依序核對:

  • [ ] 在 GitHub 的 Runner 清單確認狀態及最後回報資訊。
  • [ ] 透過團隊既有的遠端管理方式連線 Mac;同時查看主機監控、電源或機房紀錄。
  • [ ] 若遠端連線也失敗,先處理主機啟動、網路路徑或遠端存取,不要直接刪除 Runner 記錄。
  • [ ] 若主機可達,再進入 Runner 服務檢查;把主機正常與 Runner 正常分別記錄。

提醒:遠端桌面或 SSH 可連線,只能證明相應的主機存取路徑可用,不能證明 Runner 已啟動,更不能證明工作流程能成功建置。

02

使用者登入後才啟動,還是無人值守服務?

Mac 已重新啟動但 Runner 仍離線時,先確認 Runner 服務是否安裝、是否正在執行,以及服務採用哪種啟動上下文。macOS 的 LaunchAgent 與 LaunchDaemon 適用的執行上下文不同;若團隊的服務依賴使用者登入才載入,就不能把它當成無人登入時也會自動恢復的系統服務。Apple Service Management 文件

在 Runner 安裝目錄依 GitHub 的 macOS 服務說明檢查狀態:

./svc.sh status

如需啟動服務,先確認目前服務狀態與團隊維護流程,再依官方文件使用相應的服務命令;不要同時以多種方式啟動同一個 Runner。GitHub Runner 服務配置說明

若服務不存在或狀態與 GitHub 頁面不一致,檢查服務是否曾安裝、載入設定是否指向目前的 Runner 目錄,以及主機重啟後服務管理程序是否有錯誤紀錄。LaunchAgent 與 LaunchDaemon 的選擇應符合團隊的登入及服務管理設計;不要只為了讓狀態變綠,就把原本的使用者工作階段服務改成系統服務。

macOS launchd 的執行上下文如何核對?

先確認服務由誰啟動、是否依賴互動式登入,以及服務標籤對應的設定是否仍指向現有 Runner。再把服務管理紀錄與 GitHub Runner 狀態對照。若 Runner 以使用者工作階段執行,登出或重啟後的行為可能不同於系統層級服務;此時應修正服務部署方式或明確安排登入條件,而非把重新註冊當成通用解法。

03

進程已執行,為何 GitHub 仍顯示離線?

本機看到 Runner 進程,不代表它能連上 GitHub。接著確認 DNS 解析、出站網路路徑、代理設定及 TLS 握手;瀏覽器可以上網,也不能單獨證明 Runner 所需的端點都可用。若企業網路採用代理,需依 GitHub 文件確認 Runner 的代理設定與實際網路政策相符。GitHub 自托管 Runner 代理設定說明

Runner 進程在執行,排查從哪裡開始?

先從 Runner 的診斷紀錄找連線失敗原因,再由網路管理端確認 DNS、代理及 TLS 路徑。需要更詳細線索時,依 GitHub 指引啟用 Runner 診斷記錄,並把記錄時間與服務重啟時間、網路變更時間對照。GitHub 診斷記錄設定說明

檢查時不要關閉 TLS 驗證來「測試修復」。這會掩蓋憑證鏈或代理設定問題,並把原本的連線故障轉成安全風險。若紀錄指出連線問題,修正 DNS、代理政策或信任鏈後,再觀察 Runner 是否重新回報 Online。

若服務狀態正常、網路檢查仍失敗,保留診斷記錄與相關設定變更紀錄,再交由網路及平台負責人一起判讀;不要僅憑一次重新啟動就結案。

04

Runner 在線,工作流程為何仍留在佇列?

Runner 上線後,工作流程仍要符合排程條件才會派送。核對工作流程 runs-on 指定的標籤、Runner 實際標籤,以及 Runner group 的存取範圍;標籤不匹配或群組不允許該儲存庫使用時,這台 Runner 即使在線也不會承接該工作。GitHub Runner 工作流程選擇說明

  • [ ] 對照工作流程中的 runs-on 與 Runner 頁面顯示的標籤。
  • [ ] 確認工作流程所屬儲存庫有權使用目標 Runner group。
  • [ ] 若近期更動過標籤或存取政策,查看變更後的設定是否仍符合工作流程條件。GitHub Runner 標籤管理說明 GitHub Runner group 存取管理說明
  • [ ] 對照 Runner 狀態、工作流程佇列與派送目標,確認問題屬於路由而非主機或連線。

若 Runner 記錄、Mac 上的服務設定與目前 Runner 名稱互相矛盾,再調查是否有舊記錄、重複服務或設定指向錯誤目錄。只有證據顯示 Runner 註冊本身異常時,才依官方流程移除並重新配置;先保留舊設定與診斷資料,避免把可修復的服務或網路問題變成新的註冊問題。GitHub Runner 配置說明

恢復在線後,怎樣確認工作流程可以接單?

不要把 Online 當作生產恢復的驗收結果。先挑選不會接觸正式簽名資產的代表性工作流程,逐項核對 Runner 是否接單、工作區是否可讀寫、必要工具是否可呼叫,以及工作結果是否回傳。通過後再依團隊發布門禁決定是否恢復正式派送;若只完成接單而建置或結果回傳失敗,仍應維持非生產狀態。

用哪個結果決定下一步?

現象 優先判斷 下一步
Mac 無法遠端連線,Runner 顯示 Offline 主機或遠端存取路徑 查主機啟動、網路及運維紀錄
Mac 可連線,Runner 服務不存在或未執行 服務部署或啟動上下文 查服務安裝、launchd 設定與服務紀錄
服務執行,但 GitHub 仍顯示 Offline 網路連線或 Runner 通訊 查診斷記錄、DNS、代理及 TLS
Runner Online,工作流程仍排隊 標籤或存取條件 比對 runs-on、Runner 標籤及群組權限
工作流程已接單但建置或回傳失敗 流水線本身尚未恢復 維持非生產派送,查工作區、工具及結果紀錄
launchd 服務型態 核對重點 適用的判斷方式
LaunchAgent 是否依賴特定使用者工作階段 確認登入條件與服務載入狀態
LaunchDaemon 是否以系統層級服務方式管理 確認服務設定、啟動狀態及維護紀錄
驗收階段 必須取得的證據 未通過時的處置
主機可達 遠端連線結果與主機紀錄一致 先修復主機或存取路徑
Runner 可通訊 Runner 狀態與診斷記錄顯示連線恢復 繼續查 DNS、代理、TLS 或服務
工作流程可派送 目標標籤、群組權限及接單紀錄相符 修正路由條件,不重複註冊
建置與結果回傳成功 代表性任務完成,且結果可供團隊核驗 保持生產派送暫停,定位流水線故障
05

按故障範圍選擇修復路徑

  • 若 Mac 本身不可達:先處理主機啟動、電源或遠端網路;否則回頭檢查 Runner 沒有實際意義。
  • 若 Mac 可達但服務未運行:查服務安裝與 launchd 執行上下文;只有服務設定損壞或指向錯誤時,才重建服務。
  • 若服務運行但 GitHub 顯示離線:查診斷記錄、DNS、代理與 TLS;不要略過憑證驗證。
  • 若 Runner 在線但無法接單:先核對標籤和 Runner group 權限,不要刪除 Runner 記錄。
  • 若工作流程接單但建置未通過:按流水線故障處理;Online 不是發布驗收。
  • 若主機、服務和連線均正常,只有註冊資訊不一致:保存證據後,再評估是否重新配置 Runner。

對長期自行維護的 Mac 打包節點,團隊需自行承擔硬體採購與折舊、重啟後的值班處置,以及服務設定和網路政策的持續維護。若需求是短期增加遠端 Mac CI 容量,租用遠端 Mac 可讓團隊評估按需取得環境的方式,不必為短期需求先購置專用硬體;若工作負載長期固定且持續繁重,或必須直接使用特定實體介面,自購並管理本地 Mac 可能更合適。評估承載方式時,可先從MESHLAUNCH 的遠端 Mac 服務資訊確認可核對的交付與運維內容,再比較是否符合團隊的安全及恢復流程。評估 MESHLAUNCH 的遠端 Mac 方案時,也可查看遠端 Mac 方案頁面,並核對實際交付與運維資訊。