Skip to main content
Skip to content

Устранение неполадок при миграции в реальном времени с GitHub Enterprise Server на GHE.com

Советы по проблемам, с которыми вы можете столкнуться при миграции.

Если ваша миграция столкнётся с проблемой, проверьте статус миграции и gh elm migration status --migration-id MIGRATION-ID прочитайте информацию об ошибке.

СтатусMeaningРекомендуемое действие
СозданоМиграция уже началась, но ещё не началасьЗапуск gh elm migration start
QueuedМиграция ждёт началаWait
ЭкспортДанные экспортируются из источникаМонитор с gh elm migration status
ProcessingЭкспортированные данные импортируются в пункт назначенияМонитор с gh elm migration status
Готовы к переходуПервоначальная миграция завершена, и миграция готова к переходуКогда готов — беги gh elm migration cutover
ПереходИсходный репозиторий архивируется, и оставшиеся изменения применяются к назначениюМонитор; статус изменится на «Завершено»
ЗавершеноМиграция завершилась успешноПроверьте репозиторий назначения и восстановите манекены
Не удалось выполнитьМиграция столкнулась с неисправимой неудачейПроверьте ошибку (см. ниже)
ПриостановленоМиграция приостановленаПроверьте причину паузы и разрешение (см. ниже)
ЗавершенМиграция была отмененаN/A
ДеградацияПункт назначения недоступенПроверьте сетевое подключение между устройством Enterprise Server GitHub и GHE.com (см. ниже)

Статус миграции — «Неуспешно»

Миграция переходит в статус Fail , когда неисправимая ошибка мешает её продолжению. Это отличается от того, что отдельные ресурсы не импортируют — неудачная миграция означает, что сама миграция не может продолжиться.

Чтобы расследовать, проверьте gh elm migration status --migration-id MIGRATION-ID детали ошибок в ответе. Каждая ошибка включает идентификатор корреляции в формате (Correlation ID for Support: UUID). Если вы свяжетесь Служба поддержки GitHub, укажите этот идентификатор, чтобы служба поддержки могла проверить.

После устранения основной проблемы прервите неудачную миграцию и gh elm migration cancel --migration-id MIGRATION-ID начните новую миграцию.

Статус миграции — «Приостановленный»

Миграция переходит в статус приостановки , когда проблема требует вашего вмешательства, прежде чем она может продолжиться. Проверьте gh elm migration status --migration-id MIGRATION-ID причину паузы.

Распространённые причины паузы:

  • Срок действия удостоверения: один из них personal access tokens (classic) истёк. Создайте новый токен с необходимыми областью видимости и обновите его с gh elm credential updateпомощью . Затем перезапустите миграцию.
  • Ограничение скорости: Миграция достигла лимитов скорости API. Подождите несколько минут, затем начните заново.

Чтобы перезапустить приостановленную миграцию после устранения основной проблемы:

gh elm migration start --migration-id MIGRATION-ID

Статус миграции — «Деградированный»

Деградированный статус означает, что служба миграции на устройстве GitHub Enterprise Server не может достичь целевого предприятия. Миграция продолжается на стороне источника, но статус назначения неизвестен.

Проверьте сетевое соединение между GitHub Enterprise Server устройством и вашим поддоменом GHE.com, затем запустите gh elm migration status --migration-id MIGRATION-ID снова. Ответ о статусе содержит временную метку последнего успешного контакта с пунктом назначения, что поможет оценить, как долго длится проблема с подключением.

Миграция застряла в «Экспорте»

Если ваша миграция остаётся в статусе экспорта без изменения прогресса в течение 30 минут и более, экспортер может застрять.

  1. Запустите gh elm migration status --migration-id MIGRATION-ID и заметите, меняется ли количество ресурсов.

  2. Если счётчики статичны, проверьте сетевое подключение устройства к назначению.

  3. Проверьте логи экспортера на устройстве GitHub Enterprise Server (требуется доступ администратора SSH):

    Shell
    journalctl -t elm-exporter-backfiller --since "1 hour ago" | tail -50
    journalctl -t elm-exporter-sender --since "1 hour ago" | tail -50
    
  4. Если задача экспортера вылетела, она должна восстановиться автоматически. Если нет — свяжитесь Служба поддержки GitHubс .

Синхронизация git не завершается

Если gh elm migration status показывает, что начальный push Git не завершился после длительного времени, проверьте логи синхронизации Git:

Shell
journalctl -t elm-exporter-git-syncer --since "2 hours ago"

Искать:

  • connection refused: Сетевая проблема между GitHub Enterprise Server устройством и получателем. Проверьте правила брандмауэра и разрешение DNS.
  • **authentication failed**personal access token (classic): возможно, не хватает необходимых областей или может истек срок действия.
  • remote: error: Возможно, цель отвергает толчок. Свяжитесь Служба поддержки GitHub с информацией об ошибке.

Некоторые ресурсы не были импортированы

Отдельные ресурсы могут не импортироваться, не вызывая сбоев при общей миграции. Вы можете увидеть счёт неисправных ресурсов в выходе .gh elm migration status --migration-id MIGRATION-ID

Неудачные ресурсы отображаются только после исчерпания всех автоматических повторных попыток, поэтому любые неудачи подтверждаются как неразрешимые без вмешательства. Проверьте детали ошибки в ответе статуса: каждый неисправный ресурс в заполнении или в реальном времени будет отображаться "state": "failed".

Если количество и типы неудачных ресурсов приемлемы, можно перейти к переключению. Если нет — прервите миграцию, решите основную проблему, а затем начните новую миграцию.

Cutover не удалось, и исходный репозиторий недоступен

Если после архивирования исходного репозитория переключение не удаляется, ELM сервис попытается удалить репозиторий. Если это не удаётся, администратор репозитория может удалить архив. См . раздел AUTOTITLE.

Имейте в виду, что удаление репозитория вызовет дополнительную нагрузку на экземпляр, так как все проблемы и pull requests в репозитории будут переиндексированы в Elasticsearch.

После того как исходный репозиторий будет разархивирован, вы можете либо попробовать пересечь с gh elm migration cutover --migration-id MIGRATION-IDпомощью , либо прервать миграцию и gh elm migration cancel --migration-id MIGRATION-ID начать новую миграцию, когда будете готовы.

Миграция должна быть возобновлена из-за принудительного натиска

Если кто-то принудительно отправляется в стандартную ветку исходного репозитория во время миграции, синхронизация Git между исходным кодом и назначением прервается. Форс-пушы переписывают историю коммита так, чтобы это невозможно было сверить постепенно.

Если это случится, прервите миграцию gh elm migration cancel --migration-id MIGRATION-ID и начните новую миграцию. Перед перезапуском сообщите команде, что принудительные push-запросы на стандартную ветку не разрешены во время активной миграции.

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

Если ваша миграция провалилась из-за ошибки аутентификации, проверьте:

  • И исходный, и целевый токены — .personal access tokens (classic) Fine-grained personal access tokens не поддерживаются.
  • Если целевая организация обеспечивает единый вход SAML, токен должен быть авторизован для SSO.
  • Оба маркера имеют области, указанные в Миграция вашего репозитория с помощью Enterprise Live Migrations.

Если вы недавно ротировали токен, миграция автоматически получает новые учетные данные. Вам не нужно запускать ghe-config-apply или перезапускать сервис миграции.

GitHub CLI Маркер доступа был отклонен

Enterprise Live Migrations использует два набора учетных данных. Этот раздел относится к маркерам оператора , созданным на шаге 2 и хранящимся локально gh elm configure.

Оператор должен использовать для каждой конечной personal access token (classic) точки:

  • Маркер исходного оператора должен быть создан в GitHub Enterprise Server.
  • Необходимо создать GHE.comмаркер целевого оператора.
  • Оба маркера имеют области, указанные в Миграция вашего репозитория с помощью Enterprise Live Migrations.
  • Владелец токена должен быть администратором соответствующего предприятия. Выбор области не предоставляет пользователю административный доступ.
  • Fine-grained personal access tokens не поддерживаются.

Распространенные ответы

ResponseMeaningСредство
401 Bad credentialsКонечная точка не могла пройти проверку подлинности маркера. Области авторизации еще не оценены.Убедитесь, что срок действия маркера не истек или был отменен, он был скопирован полностью, и что исходные и целевые маркеры не были обменены. Убедитесь, что каждый маркер был создан на узле, где он используется.
403 ForbiddenМаркер прошел проверку подлинности, но его пользователь или области не авторизуют операцию.
personal access token (classic) Используйте с admin:enterprise. Убедитесь, что владелец токена является администратором предприятия. Если применяется единый вход SAML, авторизуйте маркер единого входа.
Resource not accessible by personal access tokenТип или разрешения маркера не поддерживаются. Обычно это происходит с .fine-grained personal access tokenЗамените его personal access token (classic) на имеющийся admin:enterprise.
404 Not FoundЗапрос может использовать неправильный URL-адрес API или Enterprise Live Migrations не может быть включен для целевого предприятия.Для GHE.comэтого используйте URL-адрес API клиента, например https://api.SUBDOMAIN.ghe.comбез косой черты. Проверьте ТАКЖЕ URL-адрес исходного API. Если оба URL-адреса верны, обратитесь Служба поддержки GitHub к подтверждению включения Enterprise Live Migrations .

Проверка маркеров независимо

Протестируйте каждый маркер с конечной /user точкой перед его использованием Enterprise Live Migrations. Эти команды печатают заголовки ответов, но отменяют текст ответа.

Для исходного (GitHub Enterprise Server) маркера:

curl --silent --show-error --output /dev/null --dump-header - \
  --header "Authorization: Bearer $SOURCE_OPERATOR_TOKEN" \
  "$SOURCE_API_URL/user"

Для целевого маркера:

curl --silent --show-error --output /dev/null --dump-header - \
  --header "Authorization: Bearer $TARGET_OPERATOR_TOKEN" \
  "$TARGET_API_URL/user"

Каждый запрос должен возвращать 200 OK. Заголовок X-OAuth-Scopes ответа должен включать admin:enterprise.

Если /user возвращается, но команда возвращается 200 OK``401 Bad credentials, интерфейс командной Enterprise Live Migrations строки может хранить другой маркер или URL-адрес. Запустите gh elm configure снова и тщательно свяжите каждый маркер с соответствующей конечной точкой.

Маркеры операторов хранятся локально с помощью интерфейса командной Enterprise Live Migrations строки. После смены маркера оператора запустите gh elm configure или укажите учетные данные замены с помощью соответствующих параметров командной строки.

Это отличается от маркеров службы миграции, настроенных на шаге 4. Обновленные учетные данные службы миграции автоматически собираются и не требуют ghe-config-apply или перезапуска службы миграции.

Не включать маркеры доступа в журналы, снимки экрана, пакеты поддержки или запросы на поддержку. Если проблема продолжается, укажите Служба поддержки GitHub состояние HTTP, имя узла конечной точки, идентификатор миграции, метку времени с часовым поясом и любой идентификатор корреляции, но не маркер.

Исходный URL GHES был отклонён

Enterprise Live Migrations требуется URL GitHub Enterprise Server для использования HTTPS. Если URL настроен с HTTP, миграция не пройдёт проверку до пролёта.

Сбор бревен для поддержки

При контакте Служба поддержки GitHubнаиболее полезные артефакты следующие:

  1. Поддерживающий пакет (предпочтительно): Запускайте ghe-support-bundle -u на устройстве GitHub Enterprise Server . При этом все Enterprise Live Migrations журналы записываются автоматически.
  2. Выход статуса миграции: gh elm migration status --migration-id MIGRATION-ID
  3. ID миграции и приблизительное время отказа (с часовым поясом)
  4. Любые корреляционные идентификаторы из сообщений об ошибке

Если пакет поддержки невозможен, можно собрать логи вручную:

Shell
journalctl -t elm-exporter-migration-manager --since "24 hours ago" > migration-manager.log
journalctl -t elm-exporter-backfiller --since "24 hours ago" > backfiller.log
journalctl -t elm-exporter-sender --since "24 hours ago" > sender.log
journalctl -t elm-exporter-git-syncer --since "24 hours ago" > git-syncer.log