从症状开始定位

把连接与构建问题拆成可验证的步骤

这里不要求你先读完整本手册。先按连接、环境、自动化、网络或存储找到入口,再依次验证地址、权限、工具版本与日志。每一步都给出预期结果,方便判断应该继续自查还是提交工单。

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
Continue connecting only after fingerprint verification.

debug1: Server host key accepted
debug1: Offering public key: ~/.ssh/id_ed25519
debug1: Authentication succeeded (publickey)
Connected to the dedicated physical Mac node

$ 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 的规格与适用工作流。