Храните машиночитаемый список
Записывайте версию 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.
«Установлено» не означает «используется конвейером». При диагностике инструментов одновременно фиксируйте путь к исполняемому файлу, версию, окружение текущей оболочки и фактический результат вызова из проекта.
| Инструмент | Проверить | Рекомендуемая команда | Типичное расхождение |
|---|---|---|---|
| Xcode | Текущий каталог разработчика, версия, список SDK | xcode-select -pxcodebuild -version |
Командная строка указывает на другой Xcode, а требуемого SDK нет в текущей версии |
| Homebrew | Путь к бинарным файлам, список пакетов, результат диагностики | brew --prefixbrew doctor |
Оболочка не загрузила правильный путь; после миграции список пакетов не совпадает с локальной средой |
| Git | Версия, удалённый адрес, права репозитория и настройки пользователя | git --versiongit remote -v |
runner и интерактивная оболочка используют разные учётные данные или рабочие каталоги |
| Fastlane | Источник вызова, фиксация зависимостей, lane и имена переменных окружения | bundle exec fastlane --version |
Напрямую вызывается глобальная версия вместо зависимостей проекта |
| Языковая среда выполнения | Путь интерпретатора, менеджер версий и версия, закреплённая проектом | which rubywhich node |
Интерактивная оболочка и неинтерактивная задача загружают разные файлы инициализации |
Записывайте версию 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 принять задачу.
Убедитесь, что пользователь runner имеет необходимые права на каталоги репозитория, кэша и артефактов. Не скрывайте ошибку настройки отдельного пути, расширяя права на все каталоги.
При сбое кэша сначала выполните контрольную задачу без чтения старого кэша. Если параллельные задачи перезаписывают файлы, выделите каждой отдельный рабочий каталог и проверьте, соответствуют ли объём памяти и хранилища Oak Core или Oak Forge масштабу задачи.
Сохраняйте время начала задачи, имя runner, идентификатор коммита, версии ключевых инструментов, неудачный шаг, код завершения и последний фрагмент лога. При воспроизводимом сбое запишите кратчайшие шаги воспроизведения; при случайном — сохраните хотя бы одно успешное и одно неудачное выполнение для сравнения.
Сначала проверьте статус runner онлайн, авторизацию проекта и метки. Не очищайте кэш, пока задача не перешла к сборке.
Сначала проверьте рабочий каталог, права скриптов, инициализацию оболочки и пути к инструментам. Сравните переменные окружения интерактивного терминала и runner.
Проверьте файл блокировки, ключ кэша, свободное место и логи загрузки из сети. Выполните задачу с чистым кэшем для сравнения, не перезаписывая исходные доказательства.
Проверьте использование памяти, конфликты записи в общих каталогах, занятые порты и имена временных файлов. Сначала снизьте параллелизм для проверки, затем меняйте разбиение или конфигурацию задач.
Единая терминология сокращает число уточнений. Описывайте конкретный объект, например «тайм-аут SSH на узле в Токио», а не просто «сервер недоступен».
У Oakmini есть только два канала связи: отправка тикета после входа в консоль или письмо на support@oakmini.com. Для существующих заказов, состояния хоста и продолжающейся диагностики используйте тикет; перед покупкой или при недоступности консоли можно написать по электронной почте.
Заполните каждый пункт; для неизвестного напишите «не подтверждено», не делайте предположений. Если было несколько попыток, перечислите их по времени.
Тема: идентификатор заказа / категория проблемы / регион узла
Время возникновения и часовой пояс:
Способ подключения или тип задачи:
Ожидаемый результат:
Фактический результат:
Шаги воспроизведения:
1.
2.
3.
Выполненная диагностика:
Исходный текст ошибки и код завершения:
Описание обезличенных вложений логов:
На странице поддержки указаны порядок диагностики, команды и требования к данным; оформление заказа, продление, просмотр заказа, проверка состояния хоста и управление облачным Mac выполняются в консоли. Все узлы работают 365 дней в году. Если состояние не совпадает с фактическим результатом подключения, зафиксируйте время и отправьте тикет.