保留一份機器可讀清單
記錄 macOS 版本、晶片架構、Xcode 版本、Homebrew 軟體清單、Git 版本與語言執行環境。每次升級只變更一個主要元件,並在升級前後各儲存一次清單。
先判斷故障屬於連線、開發環境、CI/CD、儲存空間、網路或帳戶管理,再依固定順序驗證狀態、參數與日誌。Oakmini 提供的是獨享 Mac mini 實體節點,而非虛擬機;排查時應分開驗證本地連線條件、節點狀態與專案工具鏈。
$ uname -m
arm64
$ sw_vers -productVersion
macOS ready
$ ssh -v oak-node
debug1: Authentication succeeded
$ df -h /
Filesystem status: available
不要同時變更網路、憑證與工具版本。先選擇最接近的症狀,每次只驗證一個變數,並記錄發生時間、執行動作與結果。這樣可避免一次變更掩蓋另一個問題。
適用於 SSH 逾時、VNC 黑畫面、憑證遭拒或連線後立即中斷的情況。
從主機狀態開始檢查適用於 Xcode 路徑、Homebrew 套件、Git 設定、Fastlane 或語言執行環境版本不一致。
核對路徑與版本清單適用於 runner 離線、標籤不符、工作排隊、快取異常或建置輸出不完整。
從 runner 註冊狀態開始適用於磁碟空間不足、快取持續增長、工作目錄混亂或建置產物無法匯出。
核對容量、目錄與使用量適用於互動延遲升高、偶發封包遺失、檔案傳輸緩慢或只有特定本地網路無法存取。
比較不同連線與時段適用於訂單識別、主機管理權限、續用狀態或控制台操作結果未更新。
先核對訂單與操作記錄使用 df -h 查看磁碟區容量,再使用 du -sh 檢查專案、建置快取與匯出目錄。刪除前確認產物已備份,不要直接清空未知的系統目錄。
分別記錄 SSH 建立連線、VNC 操作、程式碼拉取與本地建置所需時間。若只有圖形介面反應遲緩,應先調整 VNC 畫質;若命令列與傳輸同時異常,再檢查本地連線與節點可達性。
確認目前登入帳戶、訂單識別碼、所選區域與最近一次操作時間。主機狀態、訂單與管理操作統一在控制台完成,支援請求中只提供訂單識別碼,不要傳送登入憑證。
連線失敗通常發生在主機狀態、本地網路、連線參數、防火牆或憑證其中一層。請依順序驗證,前一層未通過前不要修改後一層。
確認訂單對應的雲端 Mac 處於可連線狀態,核對節點區域與連線資訊是否屬於同一台實體節點。若剛完成管理操作,請記錄操作時間與目前狀態,不要重複提交相同動作。
通過條件:主機狀態正常,訂單識別碼、節點區域與連線目標一致。先確認本地網路可以存取目標位址與連接埠,再與另一條可信任網路比較。僅在辦公室網路失敗時檢查出口策略;所有網路都失敗時,保留測試時間、目標連接埠與錯誤類型。
nc -vz HOST PORT
ssh -vvv USER@HOST
通過條件:連接埠可達,連線不會在交握前逾時。
確認主機位址、連接埠、使用者名稱與連線方式來自目前訂單。SSH 設定別名可能覆寫連接埠或金鑰路徑,可使用詳細日誌查看最終採用的參數;VNC 則應核對目標位址、顯示設定與用戶端儲存的舊記錄。
ssh -G oak-node
ssh -v USER@HOST -p PORT
通過條件:用戶端實際參數與控制台提供的資訊完全一致。
臨時測試前先記錄現有規則。檢查終端機、SSH 用戶端或 VNC 用戶端是否允許發起連線,以及企業網路是否限制目標連接埠。不要為了排查而長期關閉整套本地防護。
通過條件:目標程式與連接埠擁有明確的輸出權限,替代網路測試結果一致。區分「網路逾時」與「驗證遭拒」。前者不應透過更換密碼解決;後者需要確認使用者名稱、金鑰檔案、檔案權限,以及最近是否變更過憑證。支援請求只能附上驗證錯誤文字,不得附上密碼或私密金鑰內容。
chmod 600 ~/.ssh/id_ed25519
ssh-add -l
通過條件:交握完成、驗證成功,連線進入 macOS 命令列或圖形介面。
「已安裝」不等於「流水線正在使用」。工具鏈排查需要同時記錄可執行檔路徑、版本、目前 shell 環境與專案實際呼叫結果。
| 工具 | 先核對 | 建議指令 | 常見差異 |
|---|---|---|---|
| Xcode | 目前開發者目錄、版本、SDK 清單 | xcode-select -pxcodebuild -version |
命令列指向另一套 Xcode,專案要求的 SDK 不在目前版本中 |
| Homebrew | 二進位檔路徑、軟體清單、診斷結果 | brew --prefixbrew doctor |
shell 未載入正確路徑,遷移後套件清單與本地環境不一致 |
| Git | 版本、遠端位址、儲存庫權限與使用者設定 | git --versiongit remote -v |
runner 與互動式 shell 使用不同憑證或不同工作目錄 |
| Fastlane | 呼叫來源、依賴鎖定、lane 與環境變數名稱 | bundle exec fastlane --version |
直接呼叫全域版本,未依專案依賴檔案執行 |
| 語言執行環境 | 直譯器路徑、版本管理器與專案鎖定版本 | which rubywhich node |
互動式 shell 與非互動工作載入不同初始化檔案 |
記錄 macOS 版本、晶片架構、Xcode 版本、Homebrew 軟體清單、Git 版本與語言執行環境。每次升級只變更一個主要元件,並在升級前後各儲存一次清單。
在本地終端機可執行但 runner 失敗時,將 echo "$PATH"、which 與版本指令寫入臨時診斷步驟。確認後刪除不必要的環境輸出,避免日誌帶出敏感變數。
先執行依賴解析,再執行一次乾淨建置,最後確認產物路徑與結束碼。若最小專案成功而業務專案失敗,應回到專案設定、依賴鎖定與指令碼權限繼續定位。
以下輸出足以建立基礎版本記錄。提交支援請求前,請刪除目錄中的專案名稱與任何敏感參數。
uname -m
sw_vers
xcode-select -p
xcodebuild -version
brew --prefix
git --version
which ruby
which node
df -h /
CI/CD 問題應依「是否接收工作、是否進入工作目錄、是否取得權限、是否命中依賴、是否完成建置」逐層判斷。不要只根據最終失敗提示下結論。
確認 runner 服務正在執行、註冊關係仍有效,且控制台顯示線上。重新啟動前記錄最後上線時間與最近一次成功工作。
工作長時間排隊但 runner 上線時,比較工作要求的標籤與 runner 實際標籤。標籤包含大小寫、空格或架構差異時,工作可能不會被領取。
確認 runner 使用者對儲存庫目錄、快取目錄與產物目錄擁有所需權限。不要用擴大所有目錄權限的方式掩蓋單一路徑設定錯誤。
快取失效時,先執行一次不讀取舊快取的對照工作。並行工作互相覆寫檔案時,為每個工作分配獨立工作目錄,並檢查 Oak Core 或 Oak Forge 的記憶體與儲存空間是否符合工作規模。
保留工作開始時間、runner 名稱、提交識別碼、關鍵工具版本、失敗步驟、結束碼與末段日誌。若失敗可重現,記錄最短重現步驟;若為偶發問題,至少保留一次成功與一次失敗的對照。
優先檢查 runner 上線狀態、專案授權與標籤。此時先不要清理快取,因為工作尚未進入建置階段。
優先檢查工作目錄、指令碼權限、shell 初始化與工具路徑。比較互動式終端機與 runner 環境變數。
核對鎖定檔、快取鍵、磁碟剩餘空間與網路下載日誌。使用一次乾淨快取工作建立對照,不要連續覆寫原始證據。
檢查記憶體使用量、共用目錄寫入衝突、連接埠占用與暫存檔命名。先降低並行數進行驗證,再決定調整工作拆分或設定。
使用一致的術語可以減少來回確認。描述問題時,請盡量指出具體物件,例如「東京節點的 SSH 連線逾時」,而不要只寫「伺服器無法使用」。
Oakmini 僅提供兩種聯絡管道:登入控制台提交工單,或寄送電子郵件至 support@oakmini.com。涉及現有訂單、主機狀態與持續排查記錄時,優先使用工單;售前或無法進入控制台時可使用電子郵件。
逐項填寫,未知項目請寫「未確認」,不要猜測。若問題涉及多次嘗試,請按時間順序列出。
主旨:訂單識別碼 / 問題類別 / 節點區域
發生時間與時區:
連線方式或工作類型:
預期結果:
實際結果:
重現步驟:
1.
2.
3.
已完成的排查:
錯誤原文與結束碼:
去識別化日誌附件說明: