5. Переход на GitHub

Azure DevOps Services

После завершения начальной синхронизации репозиторий готов к переключению. Завершите переключение в течение 21 дня после начала первичной синхронизации.

Important

Переключение обычно завершается менее чем за 30 минут, в течение которых репозиторий Azure DevOps доступен только для чтения. Хотя репозиторий доступен только для чтения, отправка изменений и обновление pull request блокируются, но пользователи по-прежнему могут просматривать его содержимое и клонировать репозиторий. Сообщите всем затронутым командам, прежде чем запланировать переключение.

Перед планированием переключения

Убедитесь, что выполнены следующие условия:

  • Инкрементальные синхронизации исправны и актуальны.
  • Ветви, теги и запросы на включение изменений репозитория GitHub имеются и корректны.
  • Все затронутые команды уведомляются.
  • Жёстко заданные URL-адреса Azure DevOps в конвейерах, скриптах и инструментах выявляются для обновления.

Замечание

Для планирования, мониторинга и утверждения переключения используется интерфейс командной строки Azure DevOps. После переключения проверьте перенесённый репозиторий на портале GitHub. Дополнительные сведения см. в разделе Действия после миграции.

Планирование переключения

az devops migrations cutover set --org https://dev.azure.com/<org>
                                 --repository-id <repo-guid>
                                 --date "YYYY-MM-DDTHH:MM:SSZ"

Руководство по часовым поясам: добавьте Z для UTC или используйте смещение, например -08:00 для Тихоокеанского времени. Если часовой пояс не указан, используется ваш локальный часовой пояс. Чтобы избежать неоднозначности в разных командах, укажите Z или явное смещение.

Отменить запланированное переключение

az devops migrations cutover cancel --org https://dev.azure.com/<org>
                                    --repository-id <repo-guid>

Замечание

Команда cutover cancel работает только пока миграция всё ещё находится на этапе Синхронизация. Когда стадия переходит в Cutover, сервер отклоняет запрос на отмену, а CLI возвращает ненулевой код завершения. Если вам нужно остановить переключение, которое уже выполняется, используйте az devops migrations abandon или обратитесь к команде ELM.

Что происходит во время переключение

  1. Репозиторий Azure DevOps помещается в управляемое состояние только для чтения.
  2. ELM выполняет окончательную синхронизацию. Оставшиеся изменения применяются в GitHub.
  3. GitHub становится авторитетной системой записи.
  4. На странице репозитория Azure DevOps появится баннер, который связывает пользователей с новым расположением GitHub.
  5. Состояние миграции отмечено как Перенесено / Успешно.

Отслеживайте ход переключения

az devops migrations status --org https://dev.azure.com/<org>
                            --repository-id <repo-guid>

Подождите, пока в ходе миграции не появятся status: Succeeded и stage: Migrated.

Замечание

Задания ELM выполняются каждые 30–60 минут. Если запланировать переключение сразу после того, как миграция перейдёт на этап переключения, может пройти до 60 минут, прежде чем запустится задание переключения.

Important

После завершения переключения запросы на включение изменений, открытые в GitHub, не синхронизируются обратно с Azure DevOps.

Проверка перед переключением

Если к моменту наступления запланированного времени переключения остаются неустранённые сбои, ELM переводит миграцию в состояние ReviewForCutover, вместо того чтобы продолжить её автоматически. Например, эта ситуация может возникнуть, если некоторые запросы на слияние не удаётся перенести. В этом состоянии необходимо просмотреть сбои и явно решить, следует ли продолжить.

Проверка сбоев при переключении

az devops migrations cutover review --org https://dev.azure.com/<org>
                                    --repository-id <repo-guid>

Команда возвращает сводку нерешённых элементов:

Поле Description
failedCount Количество элементов, которые не удалось перенести.
blockedCount Количество элементов, заблокированных зависимостями.
pendingCount Количество элементов, всё ещё ожидающих обработки.
totalUnprocessedCount Всего элементов, требующих утверждения.
failedItems Подробный список необработанных элементов с указанием состояния, типа и URL-адреса pull request.

Внимательно просмотрите failedItems список, чтобы понять, какие элементы не переносятся, если вы решили продолжить.

Параметры в ReviewForCutover

После просмотра ошибок выберите один из следующих вариантов:

Опция Что делает Когда использовать
Подтвердить и продолжить Принимает сбои и переходит к переключению. Вы проверили все ошибки и можете продолжить без этих элементов.
Очистить дату перехода Сбрасывается до Синхронизация. Миграция продолжает синхронизироваться. Сначала вы хотите устранить проблемы и запланировать новое переключение на более поздний срок.
Перепланируйте переключение Сбрасывается до Синхронизация с новой датой переключения. Запустите az devops migrations cutover set --date <new> еще раз, чтобы задать новую дату. Если сбои будут устранены к новой дате, переключение произойдёт автоматически. Вы хотите больше времени.
Удаление миграции Удаляет запись миграции. Событие аудита записывается; исходный Azure DevOps репозиторий не изменяется. Вы хотите полностью отказаться от этой миграции.
Приостановка миграции Приостанавливает синхронизацию до тех пор, пока вы не будете возобновлять работу вручную. Вам необходимо приостановить всю деятельность, пока вы проводите расследование.

Утвердить переключение

Если вы решите продолжить, подтвердите переход, приняв количество элементов, которые нужно пропустить:

az devops migrations cutover approve --org https://dev.azure.com/<org>
                                     --repository-id <repo-guid>
                                     --accept-failures <N>

Задайте для <N> значение, большее или равное totalUnprocessedCount, по результатам проверки переключения.

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

Утверждение необратимо. Нет API для отзыва утверждения. Если вы по ошибке подтвердите действие, единственный способ восстановления — az devops migrations abandon, а затем заново создать миграцию.

Замечание

Если после проверки, но до утверждения появляются новые ошибки, команда отклоняется с ошибкой HTTP 400, представленной как CLIError, что указывает на то, что количество ошибок больше не соответствует ожидаемому. Запустите cutover review снова, обратите внимание на обновленный totalUnprocessedCount, и повторите попытку утверждения. Скрипты и средства автоматизации могут ориентироваться на ненулевой код выхода.

После утверждения миграция переходит в ReadyForCutover:

  • Если дата сокращения уже запланирована, переход выполняется автоматически в запланированное время.
  • Если дата перехода не назначена, запланируйте её, чтобы продолжить.

Следующий шаг