工程支持路径

先定位故障发生在哪一拍,再决定要不要升级处理

VMRunner 提供独享 Apple Silicon 物理节点。连接失败、构建异常、签名中断、磁盘需求、节点切换咨询与账单核对,都应从可复测信息开始,而不是反复重启或重复提交工单。

  • 连接失败
  • 构建异常
  • 磁盘需求
  • 节点咨询
  • 账单核对
RUN DIAGNOSTIC

构建节拍诊断板

节点可响应
  1. 01
    连接握手 核对节点地址、端口、主机指纹与凭据
    CHECK
  2. 02
    环境基线 记录系统时间、磁盘余量与工具版本
    CHECK
  3. 03
    任务复现 使用同一分支、命令与参数再次执行
    RUN
  4. 04
    日志收束 保留首个错误及其前后相关输出
    CAPTURE
  5. 05
    升级处理 提交订单标识、节点、时间与预期结果
    TICKET
物理节点占用 1 个订单 = 1 台独享节点
首次排查顺序

六项基线检查,比直接清空环境更快

先保留现场,再逐项缩小范围。每完成一项都记录结果,避免在连接、系统与项目配置之间来回猜测。

  1. 01

    核对连接凭据

    确认节点地址、用户名、端口和密钥文件来自当前订单。若主机指纹变化,先核对节点信息,不要直接忽略校验。

    ssh -v vmrunner-node
  2. 02

    检查网络可达性

    分别验证 DNS、目标端口和本地网络。切换网络后复测,可区分本地出口、路由与节点连接问题。

    nc -vz node.example 22
  3. 03

    查看磁盘余量

    同时查看系统卷、工作目录和缓存目录。构建失败不一定发生在磁盘写满之后,低余量也可能触发依赖解压或归档异常。

    df -h
  4. 04

    核对系统时间

    时间偏差会影响证书校验、令牌有效期和依赖下载。记录系统时区与当前时间,再与任务日志中的时间戳对照。

    date && systemsetup -gettimezone
  5. 05

    固定开发工具版本

    记录 Xcode、Command Line Tools、Ruby、Fastlane 与包管理器版本。不要在复现过程中同时升级多个组件。

    xcodebuild -version
  6. 06

    保留首个有效错误

    从任务开始位置向后查找首个错误,不要只截取最后一行。最后出现的失败通常是上游错误的结果。

    tee build.log
命令行复测

用同一组命令留下可比较的输出

以下命令分别覆盖 SSH 连接、Xcode 构建与 Fastlane 流程。复制后按项目实际的 scheme 与 lane 调整,不要在公开工单中附带密钥或完整令牌。

build-session · ssh / xcodebuild / fastlane
连接与环境基线
ssh -v vmrunner-node
sw_vers
date
df -h
xcode-select -p
xcodebuild -version
Xcode 构建复现
set -o pipefail
xcodebuild \
  -workspace App.xcworkspace \
  -scheme App \
  -configuration Release \
  clean build | tee xcodebuild.log
Fastlane 输出节选
bundle exec fastlane beta --verbose | tee fastlane.log
grep -n -E "error:|failed|Exit status" fastlane.log
Xcode 与签名

先分清编译失败、归档失败还是签名失败

同一条流水线可能依次经过依赖解析、编译、测试、归档和导出。先确认失败阶段,再检查对应配置。

证书

证书有效性

检查证书是否在当前 Keychain 中可见、是否处于有效期内,以及私钥是否能与证书正确配对。仅看到证书名称并不代表签名链完整。

security find-identity -v -p codesigning
Keychain

钥匙串解锁

非交互式任务需要在 Runner 会话中显式解锁指定 Keychain,并确认签名工具可访问私钥。不要把密码直接写进仓库或构建日志。

security list-keychains -d user
描述文件

描述文件匹配

核对 Bundle Identifier、证书类型、目标环境与描述文件覆盖范围。自动签名与手动签名不要在同一 target 中交叉覆盖。

xcodebuild -showBuildSettings
缓存

DerivedData 清理

只有在错误指向旧索引、模块缓存或中间产物时才清理 DerivedData。先记录路径和现象,避免把稳定可复现的问题清成偶发问题。

xcodebuild clean
命令行工具路径也要纳入记录

同时执行 xcode-select -pxcrun xcodebuild -version。若图形界面与 Runner 使用了不同的 Xcode 路径,同一项目可能出现不同结果。

CI/CD 排查

Runner 能启动,不等于任务环境已经一致

持续集成问题通常来自账号权限、环境变量作用域、缓存归属、并发竞争或产物回传路径。逐项核对比反复注册 Runner 更有效。

AUTH

Runner 权限

确认运行账号可读取仓库、写入工作目录、访问所需 Keychain,并能执行构建脚本。比较交互式终端与服务进程的用户身份。

whoami
ENV

环境变量

核对变量是否注入当前 job,而不是只存在于登录 shell。输出变量名清单即可,不要把变量值写进日志。

env
CACHE

缓存目录

检查依赖缓存、DerivedData 和构建目录是否由当前账号拥有。缓存键应包含工具版本与锁文件摘要,避免跨版本复用。

du -sh
JOBS

并发任务

确认多个任务没有共享同一工作目录、模拟器、输出文件名或 Keychain 状态。先以单并发复测,再逐步恢复并发。

ps aux
ARTIFACT

构建产物回传

核对归档实际路径、上传步骤退出码、文件权限和保留规则。构建成功但没有产物时,应先检查路径是否被脚本重写。

find
远程会话

画面卡顿与节点计算性能要分开判断

远程画面受本地网络、编码、分辨率和会话状态影响。先确认命令行任务是否正常运行,再判断问题是否只发生在图形会话。

01 · 延迟

建立本地网络基线

记录有线与无线网络下的往返延迟、抖动和丢包。关闭占用上行带宽的同步任务后复测,避免把本地拥塞误判为节点故障。

02 · 画面

降低分辨率再比较

先降低分辨率与刷新需求,观察输入延迟是否改善。若命令行构建耗时稳定而画面仍卡顿,优先排查远程会话链路。

03 · 输入

核对键盘映射

确认本地键盘布局、修饰键映射与远端输入法状态。快捷键异常时先在纯文本编辑器中测试,不要直接在开发工具里判断。

04 · 会话

检查锁定与重连

确认原会话是否仍处于锁定或断开状态。先安全断开旧会话,再重新连接;不要同时建立多个图形会话争用同一桌面。

提交支持请求

一次给全六类信息,工单才能直接进入排查

支持请求不需要私钥。请提供能关联订单、定位时间与复现错误的信息,并在提交前完成必要脱敏。

订单标识
控制台内可核对的订单编号
节点城市
新加坡、日本(东京)、韩国(首尔)或香港
发生时间
包含时区的故障开始时间与最近一次复现时间
复现步骤
从哪个命令或操作开始,按顺序列出关键步骤
日志片段
首个错误、退出码及其前后相关输出,完成脱敏
预期结果
说明原本应生成的构建、签名、会话或账单结果
升级处理

什么时候应该停止自查并联系支持

连接入口持续不可达

已核对当前订单凭据,并从另一网络复测,目标端口仍无法建立连接。

同一任务稳定复现

已固定代码版本、命令与工具版本,错误仍在相同步骤出现。

节点或磁盘需求变化

需要核对节点选择、存储扩展或任务资源边界,且现有订单信息不足以判断。

账单信息无法对应

订单标识、计费周期或支付记录与控制台展示无法对应,需要人工核对。

开始运行

需要新的独享物理节点,直接选择机型与周期

三档 Apple Silicon 配置均可按天、周、月、季租用。新加坡、日本(东京)、韩国(首尔)与香港四个机房可选,实际可用状态以控制台实时返回为准。