Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Службы 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.
Войдите в Azure CLI:
az loginЗадайте организацию Azure DevOps по умолчанию:
az devops configure --defaults organization=https://dev.azure.com/myorgПодсказка
Если ваш локальный удалённый репозиторий Git указывает на другую организацию, добавьте
--detect falseко всем командам миграции, чтобы механизм автоопределения не выбрал неправильную организацию.Проверьте доступ:
az devops project listПолучите GUID репозитория:
az repos show --org https://dev.azure.com/<org> --project <project> --repository <repo-name> --query id -o tsv
Запуск агента
Перед началом миграции ваш самостоятельно размещённый агент Linux должен быть в сети и ожидать задания.
Обязательный: запуск интерактивного агента
Выполните следующие действия, чтобы запустить агент в интерактивном режиме. Этот шаг необходим для миграции.
Проверьте состояние агента на портале Azure DevOps в разделе Project Settings>Agent pools>. Выберите пул, откройте вкладку "Агенты " и подтвердите, что агент отображается как "Онлайн".
Если агент находится в автономном режиме, войдите на компьютер Linux, где установлен агент и перейдите в каталог установки агента.
Запустите агент в интерактивном режиме:
./run.sh
Агент работает в режиме переднего плана. Сохраните этот сеанс терминала открытым, пока выполняется миграция.
Необязательно: Настройка для производственной среды — запуск агента как службы
Для длительных миграций настройте агент для запуска в качестве системной службы, чтобы он смог перезапуститься, если компьютер перезагрузится или отпадает подключение.
Чтобы агент продолжал работать после перезагрузки, запустите его как службу:
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 или выбрали Выполнить проверку и выполнить миграцию позже.
Запустите синхронизацию в течение 24 часов после успешной проверки:
az devops migrations resume --org https://dev.azure.com/<org> --repository-id <repo-guid> --migrationПовторная проверка состояния:
az devops migrations status --org https://dev.azure.com/<org> --repository-id <repo-guid>
Повторное развертывание конвейера вручную (гибридный режим)
Используйте эту процедуру, если вы решили вручную перенастроить конвейеры.
Note
Команды az devops migrations pipelines (list, submit, update, retry и delete) доступны в предварительной версии.
Найдите идентификаторы определений конвейера, которые ссылаются на мигрируемый репозиторий.
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 (а не как на свой основной репозиторий), может не отображаться здесь. Включите также эти идентификаторы определений, если знаете, что они зависят от перемещаемого репозитория.Отправьте выбранные идентификаторы определений конвейера для перенастройки (не более 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.Если конвейер ссылается на другие репозитории, сопоставляет каждый исходный репозиторий с целевым объектом 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>(повторяемый).Мониторинг и настройка набора конвейеров:
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-
Проверить и утвердить во время переключения, когда этап —
ReviewForCutover:az devops migrations cutover review --org $org --repository-id $rid -o tableПросмотрите ключевые поля:
Поле Значение FailedCount/BlockedCount/PendingCount/TotalUnprocessedCountКоличество необработанных элементов (с ошибками, заблокированных, ожидающих обработки и всего) RequiresPipelineVerification(requiresPipelineVerificationAcknowledgment)Если true, утверждение должно включать--pipelines-verifiedState/Type/PullRequestUrl(изfailedItems[])Сведения о сбое для каждого элемента Утвердить переключение:
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 дней. Часы начинаются при начале начальной синхронизации.