Información sobre las migraciones entre empresas con residencia de datos
Las migraciones entre dos empresas con residencia de datos usan el flujo estándar de migración de archivos de GEI:
- GEI se conecta al GHE.com subdominio de origen.
- GEI genera un archivo que contiene los datos del repositorio.
- GEI carga el archivo en el almacenamiento de migración compatible.
- GEI inicia la migración del repositorio en el subdominio de destino GHE.com .
- El destino Importer descarga y procesa el archivo.
En esta migración:
- El origen es un GHE.com subdominio, como
https://SOURCE_SUBDOMAIN.ghe.com. - El destino es un subdominio diferente GHE.com , como
https://DESTINATION_SUBDOMAIN.ghe.com. - Las organizaciones de origen y destino pueden tener nombres diferentes.
- El repositorio migrado puede tener un nombre diferente en la organización de destino.
Los puntos de conexión de API de origen y destino deben especificarse de forma independiente. No use la dirección URL de la API de destino para las operaciones de origen.
Importante
Nube de GitHub Enterprise con residencia de datos Las direcciones URL de API usan el formato https://api.SUBDOMAIN.ghe.com. Esto es diferente de una GitHub Enterprise Server dirección URL de API, que normalmente usa el formato https://HOSTNAME/api/v3.
Prerequisites
Antes de empezar:
- Confirme que el origen y el destino son subdominios diferentes GHE.com .
- Tanto en la organización de origen como en la de destino, asegúrese de ser propietario de la organización o de que se le haya concedido el rol de migrador.
- Cree un personal access token (classic) para la organización de origen.
- Cree un personal access token (classic) para la organización de destino. Para conocer los ámbitos necesarios, consulte Administración del acceso para una migración entre productos de GitHub.
- Ejecute una migración de prueba antes de realizar la migración de producción.
Se recomienda detener temporalmente el trabajo en el repositorio de origen durante la migración de producción. GitHub Enterprise Importer no realiza migraciones diferenciales, por lo que los cambios realizados después de iniciar la migración no se incluyen automáticamente.
Para obtener información sobre los datos migrados y las limitaciones conocidas, consulte Acerca de las migraciones entre productos de GitHub con GitHub Enterprise Importer.
Instale GitHub CLI y GEI
Instale el GitHub CLI y, a continuación, instale la extensión GEI:
gh extension install github/gh-gei
gh extension install github/gh-gei
Actualice la extensión antes de iniciar una migración:
gh extension upgrade github/gh-gei
gh extension upgrade github/gh-gei
Para mostrar las opciones disponibles:
gh gei migrate-repo --help
gh gei migrate-repo --help
Establecimiento de variables de entorno
Establezca los personal access tokenvalores para ambas empresas:
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"
Establezca la dirección URL de API para cada GHE.com subdominio:
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"
Reemplace SOURCE_SUBDOMAIN y DESTINATION_SUBDOMAIN por los subdominios de la empresa de origen y destino.
Por ejemplo:
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"
El GH_SOURCE_PAT token se usa para las operaciones del lado de origen, incluida la generación de archivos. El GH_PAT token se usa para las operaciones del lado de destino.
Configurar el almacenamiento de blobs de archivo
GitHub Enterprise Importer exporta cada proyecto a un archivo y, a continuación, carga el archivo en Blob Storage desde el que GitHub se puede leer. Elija el back-end de almacenamiento al ejecutar una migración:
| Opción de almacenamiento | Cómo seleccionarlo | Notas |
|---|
GitHub-owned blob storage (recomendado) | --use-github-storage | No se requiere ninguna configuración.
GitHub elimina el archivo automáticamente después de una migración correcta o siete días después de una migración con error.
AWS S3 |
--aws-bucket-name (con las variables de entorno AWS_REGION, AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY, y, opcionalmente, AWS_SESSION_TOKEN) | Usted es responsable del bucket y de su ciclo de vida.
GitHub no elimina los archivos del almacenamiento.
Azure Blob Storage (Servicio de almacenamiento de blobs de Azure) |
AZURE_STORAGE_CONNECTION_STRING variable de entorno (para un solo migrate-repo comando, puede usar --azure-storage-connection-string) | Solo se admiten cadenas de conexión de clave de acceso de la cuenta de almacenamiento (no SAS).
GitHub no elimina los archivos del almacenamiento.
Migración de un único repositorio
Para migrar un único repositorio, use el gh gei migrate-repo comando :
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
Reemplace los marcadores de posición por los siguientes valores:
| Marcador de posición | Description |
|---|---|
SOURCE_ORGANIZATION | Organización propietaria del repositorio en la empresa de origen. |
SOURCE_REPOSITORY | Nombre del repositorio en la organización de origen. |
DESTINATION_ORGANIZATION | La organización que poseerá el repositorio migrado en la empresa de destino. |
DESTINATION_REPOSITORY | Nombre del nuevo repositorio de la organización de destino. |
Por ejemplo:
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
Si omite --target-repo, GEI usa el nombre del repositorio de origen.
Argumentos opcionales
Puede agregar las siguientes opciones al comando de migración:
| Argument | Description |
|---|---|
--target-repo-visibility TARGET-VISIBILITY | Establece la visibilidad del nuevo repositorio. Los valores admitidos son private y internal. |
--skip-releases | Migra el repositorio sin lanzamientos. |
--queue-only | Pone en cola la migración sin esperar a que se complete. |
--verbose | Muestra información adicional sobre la migración. |
Por ejemplo:
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
Migración de varios repositorios
Para varios repositorios, utilice 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
Revise el script generado antes de ejecutarlo. Ustedes pueden:
- Quite los repositorios que no se deben migrar.
- Cambiar los nombres del repositorio de destino.
- Cambiar la visibilidad del repositorio de destino.
- Agregue opciones como
--skip-releases. - Agregue
--download-migration-logspara descargar registros para cada migración.
Ejecute el script generado con PowerShell:
pwsh ./migration-script.ps1
pwsh ./migration-script.ps1
Comprobación del estado de una migración
Si inició la migración con --queue-only, use el identificador de migración impreso por GEI para supervisarla:
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
Reemplace por MIGRATION_ID el identificador devuelto por gh gei migrate-repo.
Nota:
Incluya ambos argumentos de URL de la API al realizar la comprobación. La dirección URL de la API de origen es necesaria para los comandos de GEI que recuperan información y registros de migración del origen.
Descarga de registros de migración
Para descargar los registros de migración:
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"
Revise los registros de advertencias y errores incluso cuando la migración notifica que se ha realizado correctamente.
Anulación de una migración
Para anular una migración en cola o en ejecución:
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"
Solución de problemas
No se puede acceder al inquilino de origen
Compruebe que:
--github-source-api-urlse establece en el subdominio de origen.- La dirección URL usa el formato
https://api.SUBDOMAIN.ghe.com. - El token de origen se almacena en
GH_SOURCE_PAT. - El token tiene acceso a la organización y al repositorio de origen.
No se puede acceder al inquilino de destino
Compruebe que:
--target-api-urlse establece en el subdominio de destino.- La dirección URL usa el formato
https://api.SUBDOMAIN.ghe.com. - El token de destino se almacena en
GH_PAT. - Tiene permiso para crear repositorios en la organización de destino.
Se produce un error en la migración al generar o cargar el archivo.
Revise la salida y los registros de la migración y compruebe lo siguiente:
- El almacenamiento de archivo de migración está configurado correctamente.
- El proveedor de almacenamiento es accesible para el servicio de migración.
- El repositorio de origen no se está modificando durante la migración.
- No se han intercambiado las direcciones URL de API de origen y destino.
No se pueden descargar registros
Al usar download-logs, wait-for-migrationo abort-migration, proporcione las mismas direcciones URL de API de origen y destino que se usan para iniciar la migración:
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"
Se rechaza la dirección URL de origen.
Asegúrese de que está utilizando el endpoint de API del subdominio GHE.com en lugar de un endpoint GitHub Enterprise Server.
Uso:
https://api.SUBDOMAIN.ghe.com
No utilice:
https://HOSTNAME/api/v3
El /api/v3 formato está pensado para GitHub Enterprise Server orígenes y no es el formato correcto para Nube de GitHub Enterprise con residencia de datos.