Skip to main content

Migración de datos a GitHub Enterprise Server

Después de generar un archivo de migración, puedes importar los datos a tu instancia de destino del GitHub Enterprise Server. Podrás revisar los cambios para detectar posibles conflictos antes de aplicar de manera permanente los cambios a tu instancia de destino.

Preparación de los datos migrados

  1. Con el comando scp, copie el archivo de migración generado desde la instancia de origen o la organización en el destino de GitHub Enterprise Server:

    scp -P 122 PATH-TO-MIGRATION-GUID.tar.gz admin@HOSTNAME:/home/admin/
    
  2. Acceda mediante SSH a la instancia de GitHub Enterprise Server de destino. Para obtener más información, vea «Acceder al shell administrativo (SSH)».

    ssh -p 122 admin@HOSTNAME
    
  3. Usa el comando ghe-migrator prepare a fin de preparar el archivo para importar en la instancia de destino y generar un nuevo GUID de migración para usarlo en los pasos siguientes:

    ghe-migrator prepare /home/admin/MIGRATION-GUID.tar.gz
    
    • Para comenzar un nuevo intento de importación, vuelva a ejecutar ghe-migrator prepare y obtenga un GUID de migración nuevo.
    • Para especificar dónde se deben almacenar provisionalmente los archivos de migración, anexe --staging-path=/full/staging/path al comando. Tiene como valor predeterminado /data/user/tmp.

Generar una lista de conflictos de migración

  1. Mediante el comando ghe-migrator conflicts con el GUID de migración, genere un archivo conflicts.csv:

    ghe-migrator conflicts -g MIGRATION-GUID > conflicts.csv
    
    • Si no se notifica ningún conflicto, puede importar los datos de forma segura.
  2. Si hay conflictos, con el comando scp, copie conflicts.csv en el equipo local:

    scp -P 122 admin@HOSTNAME:conflicts.csv ~/Desktop
    
  3. Continúe a "Resolución de conflictos de migración o configuración de asignaciones personalizadas".

Revisar conflictos de migración

  1. Con un editor de texto o un software de hoja de cálculo compatible con CSV, abra conflicts.csv.
  2. Con las instrucciones de los ejemplos y las tablas de referencia siguientes, revise el archivo conflicts.csv para asegurarse de que al realizar la importación se tomarán las medidas adecuadas.

El archivo conflicts.csv contiene un mapa de migración de conflictos y acciones recomendadas. Un mapa de migración enumera tanto los datos que se migran desde el origen como la forma en que los datos se aplicarán al destino.

model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/octocatmap
organizationhttps://example-gh.source/octo-orghttps://example-gh.target/octo-orgmap
repositoryhttps://example-gh.source/octo-org/widgetshttps://example-gh.target/octo-org/widgetsrename
teamhttps://example-gh.source/orgs/octo-org/teams/adminshttps://example-gh.target/orgs/octo-org/teams/adminsmerge
projecthttps://example-gh.source/octo-org/widgets/projects/1https://example-gh.target/octo-org/projects/1merge

Cada fila de conflicts.csv proporciona la información siguiente:

NombreDescripción
model_nameEl tipo de datos que se están cambiando.
source_urlLa URL fuente de los datos.
target_urlLa URL de destino esperada de los datos.
recommended_actionLa acción ghe-migrator preferida se realizará al importar los datos.

Asignaciones posibles para cada tipo de registro

Hay varias acciones de asignación diferentes que ghe-migrator puede realizar al transferir datos:

actionDescripciónModelos aplicables
import(predeterminado) Los datos del origen se importan al destino.Todos los tipos de registro
mapEn lugar de crear un modelo basado en los datos de origen, se usa un registro existente en el destino. Resulta útil para importar repositorios en una organización existente o asignar identidades de usuario que están en el destino a identidades de usuario que están en el origen.Usuarios, organizaciones, proyectos
renameLos datos del origen se renombran y luego se copian en el destino.Usuarios, organizaciones, repositorios, proyectos
map_or_renameSi el destino existe, asignar a ese destino. De lo contrario, renombrar el modelo importado.Usuarios
mergeLos datos del origen se combinan con los datos existentes en el destino.Equipos, proyectos

Se recomienda encarecidamente que revise el archivo conflicts.csv y use ghe-migrator audit para asegurarse de que se realizan las acciones adecuadas. Si todo parece estar bien, puede continuar.

Resolver conflictos de migración o crear asignaciones personalizadas

Si cree que ghe-migrator realizará un cambio incorrecto, puede hacer correcciones y cambiar los datos en conflicts.csv. Puede realizar cambios en cualquiera de las filas de conflicts.csv.

Por ejemplo, imagine que observa que el usuario octocat del origen se asigna a octocat en el destino.

model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/octocatmap

Puedes optar por asignar el usuario a un usuario diferente en el destino. Imagine que sabe que octocat realmente debería ser monalisa en el destino. Puede cambiar la columna target_url de conflicts.csv para que haga referencia a monalisa.

model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/monalisamap

Como otro ejemplo, si quiere cambiar el nombre del repositorio octo-org/widgets a octo-org/amazing-widgets en la instancia de destino, cambie target_url a octo-org/amazing-widgets y recommend_action a rename.

model_namesource_urltarget_urlrecommended_action
repositoryhttps://example-gh.source/octo-org/widgetshttps://example-gh.target/octo-org/amazing-widgetsrename

Agregar asignaciones personalizadas

Una situación común durante una migración es que los usuarios migrados tengan diferentes nombres de usuario en el destino que los que tienen en el origen.

Dada una lista de nombres de usuario en el origen y una lista de nombres de usuario en el destino, puedes crear un archivo CSV con asignaciones personalizadas y luego aplicarlo para garantizar que el nombre de usuario y el contenido de cada usuario se atribuyan correctamente al final de la migración.

Puede generar rápidamente un CSV de usuarios que se migran en el formato CSV necesario para aplicar asignaciones personalizadas mediante el comando ghe-migrator audit:

ghe-migrator audit -m user -g MIGRATION-GUID > users.csv

Ahora, puede editar ese CSV y escribir la nueva URL para cada usuario que le gustaría asignar o renombrar, y luego actualizar la cuarta columna para tener map o rename según corresponda.

Por ejemplo, para cambiar el nombre del usuario octocat por monalisa en el elemento https://example-gh.target de destino, tendría que crear una fila con el siguiente contenido:

model_namesource_urltarget_urlstate
userhttps://example-gh.source/octocathttps://example-gh.target/monalisarename

Se puede usar el mismo proceso para crear asignaciones para cada registro que admita asignaciones personalizadas. Para más información, vea nuestra tabla sobre las posibles asignaciones de registros.

Aplicar datos de migración modificados

  1. Después de realizar cambios, use el comando scp para aplicar el archivo conflicts.csv modificado (o cualquier otro archivo .csv de asignación en el formato correcto) a la instancia de destino:

    scp -P 122 ~/Desktop/conflicts.csv admin@HOSTNAME:/home/admin/
    
  2. Vuelva a asignar los datos de migración con el comando ghe-migrator map, y pase la ruta al archivo .csv modificado y al GUID de migración:

    ghe-migrator map -i conflicts.csv  -g MIGRATION-GUID
    
  3. Si el comando ghe-migrator map -i conflicts.csv -g MIGRATION-GUID notifica que sigue habiendo conflictos, vuelva a ejecutar el proceso de resolución de conflictos de migración.

Aplicar los datos importados en GitHub Enterprise Server

  1. Acceda mediante SSH a la instancia de GitHub Enterprise Server de destino. Para obtener más información, vea «Acceder al shell administrativo (SSH)».

    ssh -p 122 admin@HOSTNAME
    
  2. Con el comando ghe-migrator import, inicie el proceso de importación. Necesitará:

    $ ghe-migrator import /home/admin/MIGRATION-GUID.tar.gz -g MIGRATION-GUID -u USERNAME -p TOKEN
    
    > Starting GitHub::Migrator
    > Import 100% complete /
    
    • Para especificar dónde se deben almacenar provisionalmente los archivos de migración, anexe --staging-path=/full/staging/path al comando. Tiene como valor predeterminado /data/user/tmp.

Revisar datos de migración

De forma predeterminada, ghe-migrator audit devuelve todos los registros. También te permite filtrar los registros por:

  • Los tipos de registros.
  • El estado de los registros.

Los tipos de registro coinciden con los encontrados en los datos migrados.

Filtros de tipo de registro

Tipo de registroNombre de filtro
Usuariosuser
Las organizacionesorganization
Repositoriosrepository
Teamsteam
Hitosmilestone
Proyectos (clásico)project
Issuesissue
Comentarios de propuestasissue_comment
Solicitudes de incorporación de cambiospull_request
Revisiones de solicitudes de extracciónpull_request_review
Comentarios sobre confirmación de cambioscommit_comment
Comentarios sobre revisiones de solicitudes de extracciónpull_request_review_comment
Versionesrelease
Medidas adoptadas en las solicitudes de extracción o propuestasissue_event
Ramas protegidasprotected_branch

Filtros de estado de registro

Estado de registroDescripción
exportEl registro se exportará.
importEl registro se importará.
mapEl registro se asignará.
renameEl registro se renombrará.
mergeEl registro se fusionará.
exportedEl registro se exportó con éxito.
importedEl registro se importó con éxito.
mappedEl registro se asignó con éxito.
renamedEl registro se renombró con éxito.
mergedEl registro se fusionó con éxito.
failed_exportEl registro no se pudo exportar.
failed_importEl registro no se pudo importar.
failed_mapEl registro no se pudo asignar.
failed_renameEl registro no se pudo renombrar.
failed_mergeEl registro no se pudo fusionar.

Filtrar registros auditados

Con el comando ghe-migrator audit, puede filtrar según el tipo de registro mediante la marca -m. Del mismo modo, puede filtrar por el estado de importación mediante la marca -s. El comando tiene este aspecto:

ghe-migrator audit -m RECORD_TYPE -s STATE -g MIGRATION-GUID

Por ejemplo, para ver cada organización y equipo importados con éxito, debes ingresar:

$ ghe-migrator audit -m organization,team -s mapped,renamed -g MIGRATION-GUID
> model_name,source_url,target_url,state
> organization,https://gh.source/octo-org/,https://ghe.target/octo-org/,renamed

Se recomienda encarecidamente auditar todas las importaciones con errores. Para ello, escribirá lo siguiente:

$ ghe-migrator audit -s failed_import,failed_map,failed_rename,failed_merge -g MIGRATION-GUID
> model_name,source_url,target_url,state
> user,https://gh.source/octocat,https://gh.target/octocat,failed
> repository,https://gh.source/octo-org/octo-project,https://ghe.target/octo-org/octo-project,failed

Si tienes alguna duda sobre las importaciones fallidas, puedes ponerte en contacto con nosotros en Soporte técnico para GitHub Enterprise.

Completar la importación en GitHub Enterprise Server

Después de que se aplique tu migración a tu instancia destino y la hayas revisado, desbloquearás los repositorios y los borrarás del origen. Antes de eliminar los datos de origen, se recomienda esperar alrededor de dos semanas para asegurarse de que todo funciona de acuerdo con lo esperado.

Desbloquear repositorios en la instancia de destino

  1. SSH en GitHub.com Si la instancia consta de varios nodos, por ejemplo, si la alta disponibilidad o la replicación geográfica están configuradas, utiliza SSH en el nodo principal. Si usas un clúster, puedes utilizar SSH en cualquier nodo. Reemplace HOSTNAME por el nombre de host de la instancia, o el nombre de host o la dirección IP de un nodo. Para obtener más información, vea «Acceder al shell administrativo (SSH)».

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. Desbloquee todos los repositorios importados con el comando ghe-migrator unlock. Nececitarás tu GUID de Migración:

$ ghe-migrator unlock -g MIGRATION-GUID
> Unlocked octo-org/octo-project

Advertencia: Si el repositorio contiene flujos de trabajo GitHub Actions que usan el desencadenador schedule, los flujos de trabajo no se ejecutarán automáticamente después de una importación. Para volver a iniciar los flujos de trabajo programados, suba una confirmación en el repositorio. Para obtener más información, vea «Eventos que desencadenan flujos de trabajo».

Desbloquear repositorios en el origen

Una vez completada la migración, debe desbloquear los repositorios en el origen.

Desbloquear los repositorios de una organización en GitHub.com

Para desbloquear los repositorios en una organización de GitHub.com, enviará una solicitud DELETE al punto de conexión de desbloqueo de migración. Necesitará:

  • Tu token de acceso para autenticación
  • id único de la migración
  • El nombre del repositorio a desbloquear
curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \
  -H "Accept: application/vnd.github.wyandotte-preview+json" \
  https://api.github.com/orgs/ORG-NAME/migrations/ID/repos/REPO_NAME/lock

Borrar los repositorios de una organización en GitHub.com

Después de desbloquear los repositorios de la organización de GitHub.com, tendrá que borrar todos los repositorios que haya migrado antes mediante el punto de conexión de eliminación de repositorios. Necesitarás tu token de acceso para la autenticación:

curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \
  https://api.github.com/repos/ORG-NAME/REPO_NAME

Desbloquear repositorios desde una instancia de GitHub Enterprise Server

  1. SSH en GitHub.com Si la instancia consta de varios nodos, por ejemplo, si la alta disponibilidad o la replicación geográfica están configuradas, utiliza SSH en el nodo principal. Si usas un clúster, puedes utilizar SSH en cualquier nodo. Reemplace HOSTNAME por el nombre de host de la instancia, o el nombre de host o la dirección IP de un nodo. Para obtener más información, vea «Acceder al shell administrativo (SSH)».

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. Desbloquee todos los repositorios importados con el comando ghe-migrator unlock. Nececitarás tu GUID de Migración:

$ ghe-migrator unlock -g MIGRATION-GUID
> Unlocked octo-org/octo-project