3. Запуск миграции

Службы Azure DevOps

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

Необходимые условия

Требование Сведения
GUID репозитория Azure DevOps Получено с помощью команды az repos show --query id для репозитория в Azure DevOps или из параметров репозитория на портале Azure DevOps.
Локальный агент Linux Агент установлен и зарегистрирован в вашем проекте Azure DevOps и работает (Online) в разделе Параметры проекта>Пулы агентов.
подключение службы Azure DevOps к GitHub Создано в Azure DevOps с использованием персонального токена доступа администратора GitHub Enterprise.
GitHub Персональный токен доступа Сгенерировано с необходимыми областями действия: repo, admin:org, delete_repo. Токен должен быть действительным в течение миграции (до 21 дня).
разрешения Azure DevOps Оператор миграции должен иметь разрешение Enterprise Live Migrations: управление миграцией.
Доступ к сети Правила брандмауэра позволяют компьютеру агента взаимодействовать с Azure DevOps (dev.azure.com) и конечными точками GitHub.
(Необязательно) Идентификатор подключения конвейера Создано на основе подключения к службе Azure DevOps для перенастройки конвейера.
(Необязательно) Azure Pipelines и Azure Boards Установите Azure Pipelines и Azure Boards в целевой организации GitHub Enterprise.

Если любой элемент является неполным, перед продолжением ознакомьтесь с предварительными условиями .

Проверка подлинности в Azure DevOps

ELM требует проверки подлинности доступа к Azure DevOps.

  1. Войдите в Azure CLI:

    az login
    
  2. Задайте организацию Azure DevOps по умолчанию:

    az devops configure --defaults organization=https://dev.azure.com/myorg
    

    Подсказка

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

  3. Проверьте доступ:

    az devops project list
    
  4. Получите GUID репозитория:

    az repos show --org https://dev.azure.com/<org>
                  --project <project>
                  --repository <repo-name>
                  --query id
                  -o tsv
    

Запуск агента

Перед началом миграции ваш самостоятельно размещённый агент Linux должен быть в сети и ожидать задания.

Обязательный: запуск интерактивного агента

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

  1. Проверьте состояние агента на портале Azure DevOps в разделе Project Settings>Agent pools>. Выберите пул, откройте вкладку "Агенты " и подтвердите, что агент отображается как "Онлайн".

  2. Если агент находится в автономном режиме, войдите на компьютер Linux, где установлен агент и перейдите в каталог установки агента.

  3. Запустите агент в интерактивном режиме:

    ./run.sh
    

Агент работает в режиме переднего плана. Сохраните этот сеанс терминала открытым, пока выполняется миграция.

Необязательно: Настройка для производственной среды — запуск агента как службы

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

  1. Чтобы агент продолжал работать после перезагрузки, запустите его как службу:

    sudo ./svc.sh install
    sudo ./svc.sh start
    

Когда следует использовать каждый режим:

  • Используйте режим обслуживания для миграций, которые, как ожидается, занимают более двух часов, миграции в нерабочее время или сценарии, когда компьютер может перезагрузить или удалить подключение.
  • Используйте интерактивный режим для быстрых миграций (менее 30 минут), миграций с присутствием оператора, при которых вы отслеживаете ход выполнения, или сред, где системным службам требуется дополнительное одобрение.
  • Режим агента не влияет на скорость синхронизации. Независимо от того, используете ли вы ./run.sh или sudo ./svc.sh start, скорость миграции и скорость передачи данных будут одинаковыми.

Дополнительные сведения см. в статье "Запуск локального агента в Linux".

Устранение неполадок при запуске агента

Если после выполнения команды ./run.sh агент не запускается или остается не в сети, проверьте следующие пункты:

  • Разрешения. Убедитесь, что каталог агента имеет разрешения на выполнение (chmod +x run.sh), а пользователь имеет доступ на запись в каталог.
  • Конфликт портов. Убедитесь, что порт прослушивателя агента не используется другим процессом (netstat -an | grep <agent-port>).
  • Сеть: убедитесь, что компьютер агента может получить доступ к dev.azure.com и к необходимым конечным точкам GitHub.
  • Сбой запуска службы: при использовании sudo ./svc.sh startпросмотрите журналы служб с помощью journalctl -u vstsagent.<org>-<project>-<agent-name>.service.

Выбор пути миграции

Перед началом миграции выберите рабочий путь:

  • Полностью перейдите на GitHub и прекратите использовать Azure DevOps для контроля версий.
  • Используйте гибридную модель и переместите исходный код в GitHub, продолжая использовать Azure DevOps для конвейеров и (или) досок.

Для гибридного режима решите, будет ли ELM перенастраивать Azure Pipelines и создавать подключение к Azure Boards, или ваша команда будет заниматься этими обновлениями отдельно.

Кроме того, решите, следует ли сначала выполнить проверку и запустить синхронизацию в течение 24 часов, или позволить ELM автоматически начать синхронизацию после успешной проверки.

Запуск синхронизации

Начните с этой базовой команды для каждой миграции:

az devops migrations create --org https://dev.azure.com/<org>
                            --repository-id <repo-guid>
                            --target-repository https://github.com/<org>/<repo>
                            --github-token <github-pat>
                            --service-endpoint-id <service-connection-guid>
                            --agent-pool <agent-pool-name>

В --target-repository, <repo> — это имя репозитория GitHub. Выберите любое доступное имя. Необязательно, чтобы оно совпадало с именем репозитория Azure DevOps.

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

Scenario Добавление этого параметра Result
Проверка перед синхронизацией --validate-only ElM выполняет только проверку. Необходимо начать синхронизацию в 24-часовом окне проверки.
Автоматическое запуск синхронизации после проверки Дополнительный параметр не указан ELM сначала проверяет, а затем автоматически запускает синхронизацию при успешной проверке.
Автоматически обнаруживайте и перенастраивайте конвейеры --enable-auto-discover-pipelines и --pipeline-service-connection-id <service-connection-id>. ELM находит конвейеры, ссылающиеся на исходный репозиторий, и перенастраивает их на GitHub.
Вручную выберите конвейеры для перенастройки позже --pipeline-service-connection-id <service-connection-id> ELM подготавливает миграцию для ручной перенастройки конвейера после начала синхронизации.
Не используйте ELM для повторного развертывания конвейера Опустите оба параметра перенастройки конвейера ELM переносит только репозиторий. Конвейеры можно обновлять отдельно.

Проверьте состояние миграции:

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

Искать:

  • status— текущее состояние миграции (Active, , SucceededCompleted, ) FailedSuspended
  • stage— текущий этап миграции (Queued, , ValidationSynchronizationCutover, ReviewForCutover, , ) ReadyForCutoverMigrated
  • validationIssues — список сбоев предварительной проверки с кодами ошибок и сообщениями
  • errorMessage — сведения о сбое

Проверка перед синхронизацией

Используйте этот сценарий, если вы начали миграцию с помощью --validate-only или выбрали Выполнить проверку и выполнить миграцию позже.

  1. Запустите синхронизацию в течение 24 часов после успешной проверки:

    az devops migrations resume --org https://dev.azure.com/<org>
                                --repository-id <repo-guid>
                                --migration
    
  2. Повторная проверка состояния:

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

Повторное развертывание конвейера вручную (гибридный режим)

Используйте эту процедуру, если вы решили вручную перенастроить конвейеры.

Note

Команды az devops migrations pipelines (list, submit, update, retry и delete) доступны в предварительной версии.

  1. Найдите идентификаторы определений конвейера, которые ссылаются на мигрируемый репозиторий.

    az devops migrations pipelines list показывает только конвейеры, которые уже включены в процесс перенастройки, и их статус перенастройки. Перед отправкой конвейеров он возвращает пустой результат, поэтому его нельзя использовать для обнаружения потенциальных конвейеров. Чтобы найти идентификаторы определений для повторной обработки, перечислите конвейеры, которые создаются из исходного репозитория:

    az pipelines list --org $org \
                      --project $project \
                      --repository $rid \
                      --repository-type tfsgit \
                      --query "[].{id:id, name:name}" -o table
    

    Используйте значения id из выходных данных в качестве --pipeline-ids на следующем шаге.

    Note

    az pipelines list --repository возвращает только конвейеры, репозиторий триггеров которых по умолчанию — исходный репозиторий. Конвейер, который ссылается на репозиторий через ресурс, шаблон или шаг checkout (а не как на свой основной репозиторий), может не отображаться здесь. Включите также эти идентификаторы определений, если знаете, что они зависят от перемещаемого репозитория.

  2. Отправьте выбранные идентификаторы определений конвейера для перенастройки (не более 200 идентификаторов на запрос):

    az devops migrations pipelines submit --org $org \
                                         --repository-id $rid \
                                         --pipeline-ids 42 43 44 \
                                         --service-connection-id $scid
    

    --service-connection-id необязателен, если вы уже добавили подключение через --pipeline-service-connection-id в migrations create или в предыдущем pipelines update --service-connection-id.

  3. Если конвейер ссылается на другие репозитории, сопоставляет каждый исходный репозиторий с целевым объектом GitHub:

    az devops migrations pipelines submit --org $org \
                                         --repository-id $rid \
                                         --pipeline-ids 42 43 44 \
                                         --service-connection-id $scid \
                                         --repository-mapping aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa=<GH_ORG>/shared-templates \
                                         --repository-mapping bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb=<GH_ORG>/another-repo
    

    Формат: --repository-mapping <sourceRepoId>=<targetOwner>/<targetRepo> (повторяемый).

  4. Мониторинг и настройка набора конвейеров:

    az devops migrations pipelines list --org $org --repository-id $rid -o table
    

    После отправки конвейеров эта команда выводит список всех зарегистрированных конвейеров и их статус перенастройки:

    Column Значение
    DefinitionId Идентификатор определения конвейера
    Name Имя конвейера (возвращается к имени файла YAML, если имя еще недоступно)
    Classification Как конвейер ссылается на репозиторий
    Status Текущее состояние перенастройки конвейера
    ErrorMessage Сведения о сбое, когда конвейер находится в состоянии сбоя
    az devops migrations pipelines update --org $org \
                                         --repository-id $rid \
                                         --add-ids 50 51 \
                                         --remove-ids 42 \
                                         --retry-ids 43 \
                                         --service-connection-id $scid
    
    • --add-ids: добавление дополнительных конвейеров.
    • --remove-ids: удалите конвейеры из повторной настройки.
    • --retry-ids: повторный запуск конвейеров в состоянии Failed.
    • По крайней мере один из --add-ids, --remove-idsили --retry-ids--service-connection-id--repository-mapping требуется.

    Ярлык только для повторных попыток:

    az devops migrations pipelines retry --org $org --repository-id $rid --pipeline-ids 43
    
  5. Проверить и утвердить во время переключения, когда этап — ReviewForCutover:

    az devops migrations cutover review --org $org --repository-id $rid -o table
    

    Просмотрите ключевые поля:

    Поле Значение
    FailedCount / BlockedCount / PendingCount / TotalUnprocessedCount Количество необработанных элементов (с ошибками, заблокированных, ожидающих обработки и всего)
    RequiresPipelineVerification (requiresPipelineVerificationAcknowledgment) Если true, утверждение должно включать --pipelines-verified
    State / Type / PullRequestUrl (из failedItems[]) Сведения о сбое для каждого элемента
  6. Утвердить переключение:

    az devops migrations cutover approve --org $org \
                                        --repository-id $rid \
                                        --pipelines-verified
    

    Если вы также принимаете необработанные элементы:

    az devops migrations cutover approve --org $org \
                                        --repository-id $rid \
                                        --accept-failures 3 \
                                        --pipelines-verified
    

    Необходимо предоставить по крайней мере одно из --accept-failures или --pipelines-verified.

Во время начальной синхронизации:

  • Azure DevOps остается полностью доступным для записи. Teams продолжают работать нормально.
  • GitHub еще не является системой записей.
  • Целевой репозиторий GitHub автоматически делается приватным.

Important

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

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