從症狀開始定位

將連線與建置問題拆解為可驗證的步驟

不需要先讀完整本手冊。先依連線、環境、自動化、網路或儲存找到入口,再依序驗證地址、權限、工具版本與日誌。每一步都提供預期結果,方便判斷應繼續自行排查,還是提交工單。

6 類 文件入口
2 種 遠端連線方式
5 條 症狀決策路徑
遠端連線

SSH 與 VNC 採用不同的驗證路徑

SSH 適合命令列、自動化與檔案傳輸;VNC 適合需要 macOS 圖形介面的工作。兩者都應先核對節點地址,再驗證憑證。

命令列路徑

SSH 連線檢查

  1. 01
    準備連線資訊

    從訂單交付資訊核對主機地址、連接埠、使用者名稱與臨時存取方式。不要從舊終端機歷史記錄複製可能已變更的地址。

  2. 02
    執行首次驗證

    先在可信任的網路中以詳細模式連線,核對主機指紋後再繼續。若指紋與交付資訊不一致,請立即停止。

  3. 03
    替換臨時憑證

    將自己的 SSH 公開金鑰寫入授權檔案,確認新工作階段可以登入後,再移除不再使用的臨時存取項目。

  4. 04
    正確結束工作階段

    先停止前景工作並確認日誌已寫入,再使用 exit 退出。不要直接關閉仍在執行發布工作的終端機。

  5. 05
    檢查存取異常

    逾時先檢查網路與連接埠;拒絕連線則檢查地址與服務狀態;驗證失敗則檢查使用者名稱、金鑰權限與授權檔案。

圖形介面路徑

VNC 連線檢查

  1. 01
    準備用戶端與地址

    使用可信任的 VNC 用戶端,依交付資訊填寫節點地址與連接埠。連線前關閉用戶端中不必要的憑證記憶功能。

  2. 02
    完成首次畫面驗證

    確認顯示的是預期的 macOS 圖形介面,並核對地區與裝置設定。畫面異常時不要立即匯入程式碼或憑證。

  3. 03
    更新存取憑證

    替換臨時密碼後重新建立連線,驗證新憑證有效。不要在團隊聊天記錄或建置腳本中儲存完整憑證。

  4. 04
    結束閒置工作階段

    儲存工作、關閉敏感視窗並退出工作階段。多人協作時記錄目前使用者與正在執行的圖形工作。

  5. 05
    定位畫面異常

    黑畫面先重新連線並檢查工作階段狀態;畫面卡頓先降低顯示品質;無法建立連線則回到地址、連接埠與本地網路檢查。

連線診斷記錄

讀懂 SSH 詳細日誌,不要反覆重試

詳細模式會告訴你連線停在網路、指紋還是驗證階段。以下地址僅供示例,實際連線資訊以訂單交付內容為準。

support-check · ssh diagnostic
$ ssh -v -p 22 build@203.0.113.24
OpenSSH: reading configuration data
debug1: Connecting to 203.0.113.24 port 22
debug1: Connection established
debug1: identity file ~/.ssh/id_ed25519 type 3

The authenticity of host cannot be established.
ED25519 key fingerprint is SHA256:verify-with-delivery-record
僅在核對指紋後繼續連線。

debug1: Server host key accepted
debug1: Offering public key: ~/.ssh/id_ed25519
debug1: Authentication succeeded (publickey)
已連線至獨享實體 Mac 節點

$ sw_vers
ProductName: macOS

$ exit
Connection closed.
TIMEOUT

長時間停留在 Connecting

先切換到可確認正常的網路,再檢查地址與連接埠是否正確。若多個網路都逾時,請記錄發生時間、本地出口環境與完整日誌。

FINGERPRINT

主機指紋與記錄不一致

停止連線,不要直接刪除本地已知主機記錄後重試。先核對訂單節點與交付資訊,再透過工單確認變更原因。

AUTH

網路已連通但驗證失敗

檢查使用者名稱、私密金鑰路徑、檔案權限,以及公開金鑰是否完整寫入授權檔案。提交日誌時隱藏金鑰內容,只保留驗證階段資訊。

開發工具鏈

先固定 Xcode 選擇,再處理專案層級錯誤

建置機最常見的環境漂移來自命令列工具路徑、目標名稱、相依性狀態與簽名變數不一致。先驗證機器層,再進入專案層。

XCODE

確認命令列工具選擇

執行 xcode-select -p 查看目前路徑,再使用 xcodebuild -version 核對版本。切換版本後重新開啟終端機,讓後續工作使用一致的環境。

預期:路徑與版本相符
TARGET

列出實際可用目標

先執行 xcodebuild -list,確認 workspace、project、scheme 與 configuration 名稱,再將正確名稱寫入自動化指令。

預期:可列舉目標
SIGNING

分離簽名變數與專案設定

檢查建置所需變數是否存在於目前工作階段,避免將敏感值寫入儲存庫。只輸出變數是否存在,不要在日誌中回顯完整內容。

預期:變數存在且未洩漏
LOGS

封存完整建置記錄

為每次工作保留指令、開始時間、結束代碼、建置日誌與產物路徑。失敗時同時保留首次錯誤附近的內容,不要只複製結尾摘要。

預期:可重現失敗
自動化建置

讓 self-hosted runner 可識別、可隔離、可註銷

runner 接入的重點不只是讓第一個工作成功,而是讓後續工作知道應落在哪個節點、使用哪個目錄,並在停用時清理註冊關係。

  1. 01

    註冊前核對執行身分

    建立專用執行身分與工作目錄,確認該身分可以讀取儲存庫、寫入建置目錄,但不預設擁有與建置無關的管理權限。

    驗證:手動工作可在同一身分下完成
  2. 02

    用標籤表達實際能力

    標籤應描述地區、晶片系列、Xcode 主版本與用途,不要使用「最新」「最快」等會隨時間失真的標籤。

    驗證:排程條件可唯一匹配目標節點
  3. 03

    隔離工作目錄

    不同儲存庫或流水線使用獨立子目錄,並單獨管理快取目錄。工作結束後清理暫存檔案,但保留仍需重用且來源明確的快取。

    驗證:兩個工作不會覆寫彼此產物
  4. 04

    限制並行與資源爭用

    先從單一工作執行開始,觀察 CPU、記憶體、磁碟與建置耗時,再決定是否增加並行數。圖形工作與大型建置不應在無記錄的情況下同時執行。

    驗證:尖峰期間交換空間沒有持續增加
  5. 05

    停用時完整註銷

    先停止接收新工作,等待目前工作完成,再從自動化平台註銷 runner,移除註冊權杖與不再需要的工作目錄。

    驗證:舊標籤不再接受工作
不要將同一個工作目錄交給多個並行工作。 相依性快取、DerivedData、封存檔與暫存簽名檔案可能互相覆寫,造成看似隨機的建置失敗。
術語對照

先統一八個詞的含義

工單與團隊文件使用同一組術語,可以減少將網路、裝置、工作階段與建置工具混在一起描述的情況。

實體節點
實際執行 macOS 的硬體裝置。BookaMac 的訂單對應實體 Mac mini,而非抽象的共享運算執行個體。
獨享
租用期間該裝置依訂單交付給單一客戶使用,不與其他客戶的工作負載共享同一台實體電腦。
雲端 Mac
位於遠端節點、可透過網路存取的 Mac。這描述使用位置與存取方式,不代表虛擬機器。
VNC
遠端檢視並操作 macOS 圖形介面的連線方式,適合需要視窗、顯示與互動操作的工作。
SSH
加密的命令列連線方式,適合執行腳本、傳輸檔案、管理建置工作與收集診斷日誌。
self-hosted runner
由團隊自行註冊與管理的自動化工作執行器,工作會在指定的獨享實體 Mac 節點上執行。
建置快取
為減少重複下載與編譯而保留的中間資料。快取可加速工作,也可能因版本變更導致環境漂移。
描述檔
發布與測試流程使用的簽名設定材料之一,應依專案權限管理,並在環境交接或離場時清理。
症狀決策樹

從你看到的現象進入下一個檢查項目

先展開最接近的症狀。完成一個檢查點後再進入下一個,不要在沒有記錄結果的情況下跳過中間步驟。

無法連線至節點:應先檢查什麼?
  1. 確認地址:從目前訂單交付資訊重新複製主機地址、連接埠與使用者名稱。
  2. 區分逾時與拒絕:逾時通常先檢查本地網路或鏈路;立即拒絕則檢查地址、連接埠與連線方式。
  3. 開啟詳細日誌:使用 ssh -v 判斷是否已建立網路連線、是否通過指紋檢查,以及驗證停在哪個步驟。
  4. 切換到另一個可信任網路重新測試:若結果改變,請記錄兩種網路環境,不要只提交「偶爾可以連線」。
  5. 升級支援:多個網路都失敗時,附上訂單識別碼、地區、時間點與去識別化詳細日誌提交工單。
建置失敗:是 Xcode、專案還是相依性問題?
  1. 固定版本:記錄 xcode-select -pxcodebuild -version 輸出。
  2. 列出目標:確認 scheme、configuration、workspace 或 project 名稱確實存在。
  3. 找出第一個錯誤:從日誌中定位第一個明確錯誤,不要根據最後的失敗摘要反向猜測。
  4. 驗證相依性:在不修改專案檔案的前提下,依照鎖定檔案重新解析相依性並比較結果。
  5. 縮小範圍:單獨建置最小目標,判斷失敗屬於環境、專案設定還是特定模組。
磁碟空間不足:哪些目錄應優先檢查?
  1. 確認整體使用量:使用 df -h 查看磁碟區層級的空間,不要只查看單一專案目錄。
  2. 找出大型目錄:檢查 DerivedData、封存檔、模擬器資料、相依性快取與 runner 工作目錄。
  3. 區分快取與產物:快取可重新建立,交付產物與診斷日誌應先封存再清理。
  4. 停止進行中的工作:清理前確認沒有建置正在寫入目標目錄,避免產生損壞的中間狀態。
  5. 重新檢查增長來源:清理後觀察下一次工作新增的空間,找出持續增長的真正目錄。
憑證或描述檔異常:如何避免盲目重裝?
  1. 記錄原始錯誤:區分找不到、已過期、權限不足與設定不相符。
  2. 核對建置目標:確認目前的 scheme、configuration 與簽名設定屬於預期專案。
  3. 檢查鑰匙圈權限:驗證執行建置的身分可以存取所需材料,不要擴大無關權限。
  4. 核對描述檔:確認檔案與目前工作要求一致,避免同時保留多個難以區分的舊版本。
  5. 保護敏感材料:工單只提交錯誤、名稱與必要中繼資料,不要傳送私密金鑰或完整憑證。
連線或建置速度波動:如何判斷問題位置?
  1. 提供時間範圍:記錄開始時間、結束時間與是否持續,不要只用「最近很慢」描述。
  2. 分開測量:分別觀察遠端畫面、檔案傳輸、相依性下載與本地建置,不要將它們合併成單一速度結論。
  3. 檢查並行工作:查看是否有其他建置、索引、轉碼或模型工作同時佔用資源。
  4. 比較網路:在不同可信任網路下重新測試相同動作,區分本地鏈路與遠端工作負載。
  5. 保留樣本:提交地區、時間點、指令耗時與去識別化日誌,方便在相同條件下重新檢查。
支援升級途徑

一份可直接進入排查的工單應包含哪些內容?

先整理事實,再透過控制台提交。完整的上下文通常比多次補充零散截圖更快定位問題。

01

訂單識別碼

提供必要的訂單識別碼即可,不要傳送付款憑證或其他無關資訊。

02

節點地區

註明新加坡、日本(東京)、韓國(首爾)或香港,以及實際連線方式。

03

發生時間點

寫明時區、首次出現時間、持續時間,以及是否可以穩定重現。

04

去識別化日誌

保留指令、結束代碼與錯誤上下文,隱藏權杖、密碼、私密金鑰與完整憑證。

先依文件重現,再將證據帶入工單

控制台可用於查看現有訂單並提交技術工單。如果仍在選擇設定,可先比較兩種獨享實體 Mac mini 的規格與適用工作流程。