Сведения о миграции между предприятиями- резидентами данных
Миграции между двумя предприятиями, проживающими в данных, используют стандартный поток миграции архива GEI:
- GEI подключается к исходному GHE.com поддомену.
- GEI создает архив, содержащий данные репозитория.
- GEI отправляет архив в поддерживаемую службу хранилища миграции.
- GEI запускает миграцию репозитория в целевом GHE.com поддомене.
- Целевое Importer скачивание и обработка архива.
В этой миграции:
- Источник — это GHE.com поддомен, например
https://SOURCE_SUBDOMAIN.ghe.com. - Назначение — это другой GHE.com поддомен, например
https://DESTINATION_SUBDOMAIN.ghe.com. - Исходные и целевые организации могут иметь разные имена.
- Перенесенный репозиторий может иметь другое имя в целевой организации.
Конечные точки API источника и назначения должны быть указаны независимо. Не используйте URL-адрес целевого API для исходных операций.
Внимание
GitHub Enterprise Cloud с размещением данных URL-адреса API используют формат https://api.SUBDOMAIN.ghe.com. Это отличается от GitHub Enterprise Server URL-адреса API, который обычно использует формат https://HOSTNAME/api/v3.
Необходимые условия
Прежде чем начать:
- Убедитесь, что исходный и целевой домены являются различными GHE.com поддоменами.
- В исходных и конечных организациях убедитесь, что вы являетесь владельцем организации или получили роль миграции.
- Создайте исходную personal access token (classic) организацию.
- Создайте целевую personal access token (classic) организацию. Сведения о необходимых областях см. в разделе Управление доступом к миграции между продуктами GitHub.
- Запустите пробную миграцию перед выполнением рабочей миграции.
Мы рекомендуем временно остановить работу в исходном репозитории во время миграции рабочей среды. GitHub Enterprise Importer не выполняет разностную миграцию, поэтому изменения, внесенные после запуска миграции, не включаются автоматически.
Сведения о перенесенных и известных ограничениях см. в разделе О миграциях между GitHub продуктами с GitHub Enterprise Importer.
GitHub CLI Установка и GEI
GitHub CLIУстановите и установите расширение GEI:
gh extension install github/gh-gei
gh extension install github/gh-gei
Обновите расширение перед началом миграции:
gh extension upgrade github/gh-gei
gh extension upgrade github/gh-gei
Чтобы отобразить доступные параметры, выполните следующие действия.
gh gei migrate-repo --help
gh gei migrate-repo --help
Настройка переменных среды
Задайте значения personal access tokens для обоих предприятий:
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN" export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN"
export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"
Задайте URL-адрес API для каждого GHE.com поддомена:
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com" export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com"
export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"
Замените и DESTINATION_SUBDOMAIN поддомены SOURCE_SUBDOMAIN исходного и целевого предприятия.
Рассмотрим пример.
export SOURCE_API_URL="https://api.source-example.ghe.com" export TARGET_API_URL="https://api.destination-example.ghe.com"
export SOURCE_API_URL="https://api.source-example.ghe.com"
export TARGET_API_URL="https://api.destination-example.ghe.com"
Маркер GH_SOURCE_PAT используется для операций на стороне источника, включая создание архива. Маркер GH_PAT используется для операций на стороне назначения.
Настройка архивного хранилища BLOB-объектов
GitHub Enterprise Importer экспортирует каждый проект в архив, а затем передает архив в хранилище BLOB-объектов, которое GitHub может прочитать из него. При выполнении миграции вы выбираете серверную часть хранилища:
| Вариант хранения | Как выбрать его | Notes |
|---|
GitHub-owned blob storage (рекомендуется) | --use-github-storage | Установка не требуется.
GitHub удаляет архив автоматически после успешной миграции или семь дней после неудачной миграции.
AWS S3 |
--aws-bucket-name(с AWS_REGION``AWS_ACCESS_KEY_IDпеременными среды и AWS_SECRET_ACCESS_KEY переменными среды, а также при необходимости AWS_SESSION_TOKEN) | Вы владеете контейнером и его жизненным циклом.
GitHub не удаляет архивы из хранилища.
Хранилище BLOB-объектов Azure (Азур Блоб Сторадж) |
AZURE_STORAGE_CONNECTION_STRING переменная среды (для одной migrate-repo команды можно использовать --azure-storage-connection-string) | Поддерживаются только строки подключения к ключу доступа к учетной записи хранения (а не SAS).
GitHub не удаляет архивы из хранилища.
Перенос одного репозитория
Чтобы перенести один репозиторий, используйте gh gei migrate-repo команду:
gh gei migrate-repo \ --github-source-org SOURCE_ORGANIZATION \ --source-repo SOURCE_REPOSITORY \ --github-source-api-url "$SOURCE_API_URL" \ --github-target-org DESTINATION_ORGANIZATION \ --target-repo DESTINATION_REPOSITORY \ --target-api-url "$TARGET_API_URL" \ --verbose
gh gei migrate-repo \
--github-source-org SOURCE_ORGANIZATION \
--source-repo SOURCE_REPOSITORY \
--github-source-api-url "$SOURCE_API_URL" \
--github-target-org DESTINATION_ORGANIZATION \
--target-repo DESTINATION_REPOSITORY \
--target-api-url "$TARGET_API_URL" \
--verbose
Замените заполнители следующими значениями:
| Placeholder | Description |
|---|---|
SOURCE_ORGANIZATION | Организация, которая владеет репозиторием в исходном предприятии. |
SOURCE_REPOSITORY | Имя репозитория в исходной организации. |
DESTINATION_ORGANIZATION | Организация, которая будет владеет перенесенным репозиторием в целевом предприятии. |
DESTINATION_REPOSITORY | Имя нового репозитория в целевой организации. |
Рассмотрим пример.
gh gei migrate-repo \ --github-source-org source-org \ --source-repo example-repository \ --github-source-api-url "$SOURCE_API_URL" \ --github-target-org destination-org \ --target-repo example-repository \ --target-api-url "$TARGET_API_URL" \ --verbose
gh gei migrate-repo \
--github-source-org source-org \
--source-repo example-repository \
--github-source-api-url "$SOURCE_API_URL" \
--github-target-org destination-org \
--target-repo example-repository \
--target-api-url "$TARGET_API_URL" \
--verbose
Если не указано --target-repo, GEI использует имя исходного репозитория.
Необязательные аргументы
В команду миграции можно добавить следующие параметры:
| Argument | Description |
|---|---|
--target-repo-visibility TARGET-VISIBILITY | Задает видимость нового репозитория. Поддерживаемые значения — и . |
--skip-releases | Переносит репозиторий без выпусков. |
--queue-only | Очереди миграции, не ожидая завершения миграции. |
--verbose | Отображает дополнительные выходные данные миграции. |
Рассмотрим пример.
gh gei migrate-repo \ --github-source-org source-org \ --source-repo example-repository \ --github-source-api-url "$SOURCE_API_URL" \ --github-target-org destination-org \ --target-repo example-repository \ --target-api-url "$TARGET_API_URL" \ --target-repo-visibility internal \ --verbose
gh gei migrate-repo \
--github-source-org source-org \
--source-repo example-repository \
--github-source-api-url "$SOURCE_API_URL" \
--github-target-org destination-org \
--target-repo example-repository \
--target-api-url "$TARGET_API_URL" \
--target-repo-visibility internal \
--verbose
Перенос нескольких репозиториев
Для нескольких репозиториев используйте gh gei generate-script.
gh gei generate-script \ --github-source-org SOURCE_ORGANIZATION \ --github-target-org DESTINATION_ORGANIZATION \ --github-source-api-url "$SOURCE_API_URL" \ --target-api-url "$TARGET_API_URL" \ --output migration-script.ps1
gh gei generate-script \
--github-source-org SOURCE_ORGANIZATION \
--github-target-org DESTINATION_ORGANIZATION \
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL" \
--output migration-script.ps1
Перед выполнением созданного скрипта просмотрите созданный скрипт. Можно сделать следующее:
- Удалите репозитории, которые не следует перенести.
- Изменение имен репозитория назначения.
- Изменение видимости целевого репозитория.
- Добавьте такие параметры, как
--skip-releases. - Добавьте
--download-migration-logsв журналы загрузки для каждой миграции.
Запустите созданный скрипт с помощью PowerShell:
pwsh ./migration-script.ps1
pwsh ./migration-script.ps1
Проверка состояния миграции
Если вы запустили миграцию --queue-only, используйте идентификатор миграции, напечатанный GEI, чтобы отслеживать его:
gh gei wait-for-migration \ --migration-id MIGRATION_ID \ --target-api-url "$TARGET_API_URL" \ --verbose
gh gei wait-for-migration \
--migration-id MIGRATION_ID \
--target-api-url "$TARGET_API_URL" \
--verbose
Замените MIGRATION_ID идентификатор, возвращенный gh gei migrate-repo.
Примечание.
Включите оба аргумента URL-адреса API при проверке. URL-адрес исходного API необходим для команд GEI, которые извлекают сведения о миграции на стороне источника и журналы.
Скачивание журналов миграции
Чтобы скачать журналы миграции, выполните следующие действия.
gh gei download-logs \ --migration-id MIGRATION_ID \ --github-source-api-url "$SOURCE_API_URL" \ --target-api-url "$TARGET_API_URL"
gh gei download-logs \
--migration-id MIGRATION_ID \
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"
Просмотрите журналы предупреждений и ошибок даже при успешном выполнении миграции.
Прерывание миграции
Чтобы прервать очередь или выполнить миграцию:
gh gei abort-migration \ --migration-id MIGRATION_ID \ --github-source-api-url "$SOURCE_API_URL" \ --target-api-url "$TARGET_API_URL"
gh gei abort-migration \
--migration-id MIGRATION_ID \
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"
Troubleshooting
Не удается достичь исходного клиента
Проверьте следующее:
--github-source-api-urlимеет значение исходного поддомена.- URL-адрес использует формат
https://api.SUBDOMAIN.ghe.com. - Исходный маркер хранится в
GH_SOURCE_PAT. - Маркер имеет доступ к исходной организации и репозиторию.
Не удается достичь целевого клиента
Проверьте следующее:
--target-api-urlимеет значение целевого поддомена.- URL-адрес использует формат
https://api.SUBDOMAIN.ghe.com. - Конечный маркер хранится в
GH_PAT. - У вас есть разрешение на создание репозиториев в целевой организации.
Миграция завершается сбоем при создании или отправке архива
Проверьте выходные данные и журналы миграции, а затем убедитесь, что:
- Хранилище архива миграции настроено правильно.
- Поставщик хранилища доступен для службы миграции.
- Исходный репозиторий не изменяется во время миграции.
- URL-адреса исходного и целевого API не были переключены.
Невозможно скачать журналы
При использовании download-logsили wait-for-migration``abort-migrationукажите одинаковые URL-адреса исходного и целевого API, используемые для запуска миграции:
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"
Исходный URL-адрес отклонен
Убедитесь, что вы используете конечную точку GHE.com API поддомена, а не конечную точку GitHub Enterprise Server .
Использование:
https://api.SUBDOMAIN.ghe.com
Не используйте:
https://HOSTNAME/api/v3
Формат /api/v3 предназначен для GitHub Enterprise Server источников и не является правильным для GitHub Enterprise Cloud с размещением данныхформата.