Устранение неполадок корпоративных миграций в реальном времени (ELM)

Службы Azure DevOps

Используйте эту статью для диагностики и устранения распространенных ошибок, возникающих во время корпоративной динамической миграции (ELM). Для большинства сбоев проверьте поле errorMessage в выводе JSON команды az devops migrations status.

Ошибки при создании

Симптом Вероятно, причина Резолюция
403 Forbidden на migrations create/status, или migrations list ничего не возвращает У вашей учётной записи нет разрешения Управление корпоративными миграциями в реальном времени для этого репозитория. Это разрешение распространяется на каждый репозиторий, поэтому его можно использовать в одном репозитории, а не в другом. Команда list возвращает только миграции, которые можно просмотреть, поэтому отсутствующие разрешения отображаются как пустой результат, а не ошибка. Попросите администратора репозитория предоставить право Manage enterprise live migrations для конкретного репозитория. Интерфейс командной строки передает решение об авторизации сервера без изменений, поэтому повторное выполнение az login не помогает.
Целевой репозиторий уже находится в процессе миграции Другая миграция существует для того же целевого объекта. Дождитесь завершения или отмените операцию, а затем повторите попытку.
TargetRepositoryDoesNotExist Сбой предварительной проверки Целевой GitHub репозиторий уже существует (часто из-за того, что предварительная миграция была прекращена без очистки). Удалите целевой репозиторий GitHub и снова запустите migrations create. Если вы намеренно хотите повторно использовать непустой целевой ресурс, передайте --skip-validation TargetRepositoryDoesNotExist, но только после того, как убедитесь, что имеющееся содержимое можно безопасно перезаписать.
Целевой репозиторий в несовместимом состоянии Целевой объект не пуст или использовался другим исходным репозиторием. Используйте пустой целевой репозиторий. Если вы ранее отменили миграцию, удалите целевой репозиторий и повторите попытку.
migrations create отклоняет --enable-auto-discover-pipelines Вы включили автоматическое обнаружение конвейеров без подключения к службе конвейера. Добавьте --pipeline-service-connection-id <guid>. CLI отклоняет автообнаружение без подключения к службе, поскольку автообнаружение не может выполняться без такого подключения.
Неправильная организация в --org Автоопределение заменило --org. Добавьте --detect false в команду или обновите организацию по умолчанию.
The migrations command is not recognized Azure DevOps расширение CLI не установлено или устарело. Установите или обновите расширение cli Azure DevOps, а затем убедитесь, что команда доступна перед началом работы.

Ошибки проверки

Если миграция находится в состоянии "Сбой" на этапе проверки , обычно это указывает на проблему с соответствием требованиям. Проверьте errorMessage в выводе JSON.

Симптом Вероятно, причина Резолюция
Срок действия проверки истек (24 часа) до начала полной миграции Время ожидания окна проверки истекло. Снова запустите проверку и начните полную миграцию в течение 24 часов.
Слишком большой файл (>400 МБ) Один из файлов в истории превышает лимит. Удалите большой файл из журнала или переместите его в Git LFS (будущее), а затем снова выполните проверку.
Слишком длинное имя ссылки (>255 байт) Имя ветви или тега превышает ограничение GitHub. Переименуйте или удалите ссылку перед миграцией.
Пул агентов не найден Именованный пул агентов не существует. Подтвердите имя пула агентов в Azure DevOps и убедитесь, что оператор миграции может получить к нему доступ.
POLICY_ERROR Временная ошибка в обработчике проверки. Повторите миграцию с помощью az devops migrations resume.

Ошибки синхронизации

Если ваша миграция находится в состоянии Сбой на этапе Синхронизация, проверьте errorMessage в выходных данных JSON.

Симптом Вероятно, причина Резолюция
Синхронизация остановилась (время последней синхронизации устарело) Временные проблемы с подключением или ограничением скорости. ELM автоматически выполняет повторные попытки. Если синхронизация приостановлена более одного часа, возобновляйте работу вручную.az devops migrations resume
Отсутствующие коммиты в GitHub Синхронизация была прервана. Проверьте состояние. Возобновите миграцию, если status: Failed или status: Suspended.
status: Failed С validationIssues: "Migration NN: GitHub migration is no longer active." Срок действия объекта миграции на стороне GitHub истёк (он действует ограниченное время), или синхронизация на стороне GitHub завершилась сбоем на раннем этапе. Отмените миграцию и создайте её заново — новый create инициирует новую миграцию GitHub. Затем очистите все оставшиеся данные о перенастройке конвейера с помощью az devops migrations pipelines delete --repository-id <guid> --migration-id NN.

Предупреждение

Создание новой миграции с migrations create сбрасывает 21-дневное окно переключения. Если вы приближаетесь к концу исходного окна, запланируйте расписание переключения соответствующим образом перед началом новой миграции.

Ошибки при переходе

Если миграция находится в состоянии Сбой на этапе Переключение, проверьте errorMessage в выходных данных JSON.

Симптом Вероятно, причина Резолюция
Репозиторий Azure DevOps застрял в режиме только для чтения Сбой произошёл в процессе переключения. Восстановите доступ на запись, отменив миграцию с помощью флага --remove-read-only: az devops migrations abandon --repository-id <guid> --org <url> --remove-read-only --yes Этот флаг отправляет removeReadOnly=true, который снова переводит исходный репозиторий Azure DevOps в режим чтения и записи и отменяет миграцию. Запустите его только в том случае, если вы планируете остановить миграцию, а не повторить переключение.

Ошибки повторного подключения конвейера

Перенастройка конвейеров перенаправляет конвейеры, ссылающиеся на исходный репозиторий Azure Repos, на перенесённый репозиторий GitHub. Проверьте состояние каждого конвейера с помощью az devops migrations pipelines list --org <url> --repository-id <guid>.

Симптом Вероятно, причина Резолюция
pipelines list отображает 0 зарегистрированных конвейеров после автоматического обнаружения Миграция была создана без --enable-auto-discover-pipelines--pipeline-service-connection-idизменений, поэтому обнаружение выполнялось как no-op. Подключитесь с помощью pipelines update --service-connection-id <guid>, затем зарегистрируйте определения с помощью pipelines submit --pipeline-ids <ids>. Подключение соединения не добавляет конвейеры задним числом.
Состояние конвейера preCheckFailed с UnreadableYaml Файл YAML конвейера отсутствует в ветви репозитория по умолчанию. Предварительная проверка считывает YAML только из ветви по умолчанию. Выполните слияние YAML-файла с ветвью по умолчанию и запустите pipelines retry --pipeline-ids <id>, или исключите конвейер с помощью pipelines update --remove-ids <id>.
Отключённые конвейеры добавлены и не проходят предварительные проверки Автоматическое обнаружение регистрирует отключенные определения, которые часто имеют устаревшие или отсутствующие YAML в ветви по умолчанию. Удалите безвредные или отключённые конвейеры из набора перенастройки с помощью pipelines update --remove-ids <ids>, вместо того чтобы мириться со сбоями. Позже вы сможете снова добавить их с помощью --add-ids.
Сбой переключения: Repository rule violations found. Changes must be made through a pull request. При переключении ELM коммитит каждый YAML-файл клона (.migrations/<name>-<defId>.yml) напрямую в ветку по умолчанию целевого репозитория GitHub, которую блокирует набор правил для веток. Разрешите учётной записи ELM отправлять изменения напрямую в целевую ветку по умолчанию (или предварительно создать файл через pull request), затем запустите pipelines retry --pipeline-ids <id>.
pipelines submit возвращает 400 "A valid service connection ID is required" К миграции не привязано ни одного подключения к службе. Передайте --service-connection-id <guid> в submit, или сначала прикрепите его с помощью pipelines update --service-connection-id <guid> (или при создании с помощью --pipeline-service-connection-id).
pipelines list возвращает 400 при сбое миграции Сведения о конвейере недоступны для миграций, завершившихся с ошибкой. Очистите данные переподключения с помощью pipelines delete --repository-id <guid> --migration-id NN. Получите NN из префикса Migration NN: в тексте validationIssues у migrations status. Сама по себе отмена миграции не удаляет данные о перепривязке.

Распространенные проблемы с интерфейсом командной строки и конфигурацией

Симптом Вероятно, причина Резолюция
Запросы переходят к неправильному узлу (например, codedev.ms) Автоопределение определяет другой удалённый репозиторий Git. Добавьте --detect false ко всем командам.
Запросы направляются на старый URL-адрес организации Устаревшая организация по умолчанию в конфигурации. Выполните команду az devops configure --defaults organization=https://dev.azure.com/<org>.
Команда az devops migrations не найдена Azure DevOps расширение не установлено или устарело. Установка или обновление: az extension add -n azure-devops или az extension update -n azure-devops.
Ошибка "Активное состояние" при возобновлении Миграция уже активна. Сначала приостановите работу с помощью az devops migrations pause, а затем возобновите её.
cutover cancel возвращает ошибку Этап уже перешёл к Cutover — отмена возможна только на этапе Synchronization. Используйте az devops migrations abandon для остановки миграции или обратитесь к группе ELM, если выполняется переключение.
Перенесён не тот репозиторий Использован неверный GUID репозитория. Всегда проверяйте с помощью az repos show --query id перед созданием миграции.

Проблемы после миграции

Симптом Вероятно, причина Резолюция
Сбой конвейеров после переключений Определения конвейера по-прежнему ссылались на репозиторий Azure DevOps. Обновите определения конвейера, чтобы ссылаться на перенесенный репозиторий GitHub. Убедитесь, что связанные подключения к службам, триггеры и необходимые проверки состояния указывают на правильный источник.
Наборы правил для веток, не обеспечивающие применение ожидаемых политик Миграция набора правил не завершена, или проверки CI неактивны. Просмотрите наборы правил в параметрах репозитория. Обновите имена обязательных проверок статуса после перенастройки конвейеров.
Пользователи не могут получить доступ к репозиторию GitHub Пользователи не добавляются в организацию GitHub. Добавьте пользователей в организацию GitHub.
Коммиты, не связанные с профилями GitHub Несоответствие адреса электронной почты между Azure DevOps и GitHub. Если адрес электронной почты пользователя в Azure DevOps отличается от его адреса электронной почты в GitHub, коммиты не будут автоматически привязываться к его профилю GitHub. Это влияет на все миграции платформ, а не только ELM.
URL-адреса подмодулей, указывающие на Azure DevOps Ссылки на подмодулы не были обновлены. Вручную обновите .gitmodules, чтобы указать url-адреса репозитория GitHub.

Где искать журналы и сигналы

Что вам нужно Где найти его
Состояние миграции и этап az devops migrations status --org <url> --repository-id <guid>
Полные выходные данные JSON с подробными сведениями об ошибке az devops migrations status ... -o json
Сведения о сбое проверки validationIssues поле в выводе состояния JSON
Состояние перекоммутации конвейера az devops migrations pipelines list --org <url> --repository-id <guid>
Список всех миграций (включая неактивные) az devops migrations list --org <url> --include-all
GUID репозитория Azure DevOps az repos show --org <url> --project <proj> --repository <name> --query id -o tsv
Журнал аудита жизненного цикла миграции (кто запустил, приостановил, запланировал переключение или отказался от неё) Параметры> организацииАудит, фильтрация по области Enterprise Live Migrations

Справочник по командам, параметрам, состояниям и этапам

Полный список команд CLI, параметров, этапов миграции и состояний миграции см. в справочнике по ИНТЕРФЕЙСу командной строки ELM.