Migra a Secure Source Manager

En esta guía, se describe cómo migrar un repositorio de Git, incluida toda su información, desde Cloud Source Repositories (CSR) de Google a Secure Source Manager (SSM). En esta migración, se usan comandos estándar de Git para clonar y enviar datos del repositorio.

Requisitos previos

Antes de comenzar la migración, asegúrate de cumplir con los siguientes requisitos previos:

  • Permisos: Los usuarios o las cuentas de servicio deben tener los siguientes permisos para realizar la migración:
    • source.repos.get, que está disponible en el rol roles/source.reader, en el repositorio de CSR de origen
    • securesourcemanager.instances.access, que está disponible en el rol roles/securesourcemanager.instanceAccessor, y securesourcemanager.repositories.fetch, que está disponible en el rol roles/securesourcemanager.repoWriter, en el repositorio y la instancia de SSM de destino. Si vas a crear repositorios nuevos, consulta Crea un repositorio.
  • Cliente de Git: Necesitas una computadora con la herramienta de línea de comandos de Git instalada.
  • SDK de Google Cloud: Para autenticarte cuando usas HTTPS, debes instalar la versión 395.0.0 o posterior en la misma computadora en la que instalaste la herramienta de Git. Si no tienes el SDK de Google Cloud, debes conectarte a CSR y SSM con claves SSH.
  • Instancia de SSM: Asegúrate de poder acceder a la instancia de SSM desde tu computadora. Si tu instancia está configurada con Private Service Connect, consulta Cómo acceder a una instancia privada para obtener detalles de acceso.
  • Almacenamiento local: Necesitas suficiente espacio en el disco local para almacenar temporalmente clones de los repositorios que migrarás.

Pasos para la migración

El proceso de migración implica clonar el repositorio completo de CSR a tu computadora local y, luego, enviar la clonación al repositorio de SSM.

Determina el principal y el método de acceso para los repositorios de CSR y SSM

Puedes conectarte a CSR con transportes HTTP o SSH cuando te autenticas como principal de usuario, o bien a través de HTTP cuando te autenticas como cuenta de servicio. Puedes conectarte y autenticarte con SSM a través de transportes HTTP o SSH, como principal de usuario o cuenta de servicio.

No es necesario que uses el mismo transporte o principal en la CSR y el SSM. Determina el principal y el transporte que usarás para cada plataforma. Para obtener más información sobre cómo actuar en nombre de cuentas de servicio, consulta Uso de la identidad de cuentas de servicio.

Asegúrate de que el repositorio de CSR sea de solo lectura

En esta guía de migración, no se usa la duplicación ni la sincronización automáticas. Por lo tanto, asegúrate de que nadie escriba en el repositorio de CSR durante la migración o después de ella. Actualiza los permisos de IAM para que ningún usuario tenga un rol que no sea roles/source.reader en el repositorio. Como alternativa, coordínate con tus usuarios para detener todas las confirmaciones durante la migración.

Crea un repositorio de Secure Source Manager

Puedes omitir este paso si un administrador ya creó el repositorio por ti.

Para crear un repositorio vacío en tu instancia de SSM, sigue la guía para crear un repositorio nuevo. Asegúrate de cumplir con estas condiciones:

  • Si usas la IU, no selecciones Inicializar repositorio, ya que esto crea un repositorio no vacío.
  • Si usas Google Cloud CLI, no establezcas las marcas --gitignores, --readme ni --licenses, ya que esto crea un repositorio no vacío.
  • Si usas la API, no establezcas los campos gitignores, license y readme de InitialConfig, ya que esto crea un repositorio no vacío.

Valida la configuración del repositorio de SSM

Verifica que el repositorio esté vacío. Para ello, revisa la IU o clona el repositorio y ejecuta git show-ref. El resultado está vacío si el repositorio está vacío.

Asegúrate de que no haya reglas de protección de ramas activas. Para ello, consulta la IU o usa la API. No debe haber reglas o todas las reglas deben estar inhabilitadas para evitar que se bloquee la migración.

Asegúrate de que haya espacio en el disco local y remoto

Antes de clonar el repositorio de CSR, busca su tamaño total. Ejecuta gcloud source repos describe <var>CSR_REPO_NAME</var>. Este comando muestra la cantidad total de bytes del repositorio. Para evaluar el espacio de disco disponible en un sistema Linux, ejecuta df . para ver la cantidad de bytes disponibles en el directorio actual.

SSM tiene un límite predeterminado de 100 GB de almacenamiento por instancia. Verifica que el repositorio de CSR quepa antes de clonarlo.

Clona el repositorio de CSR

Clona el historial completo del repositorio desde CSR a tu computadora local.

  1. Ve al directorio local en el que deseas almacenar el repositorio de forma temporal.
  2. Clona el repositorio: sh git clone <var>CSR_REPO_URL</var> --mirror

Este comando crea un clon simple, que está optimizado para enviar todo el contenido del repositorio a otro repositorio remoto. Notarás que el directorio solo contiene archivos como config y HEAD, en lugar del contenido de tu repositorio. Esto es normal, ya que todo el contenido del repositorio se clonó y está presente en el directorio objects y otros, pero no hay una copia de trabajo.

Agrega el repositorio de Secure Source Manager como un nuevo recurso remoto

Ejecuta el comando siguiente:

git remote add ssm <var>SSM_REPOSITORY_URL</var>

Envía el repositorio completo a Secure Source Manager

Envía todas las ramas, etiquetas y referencias del clon local al SSM remoto:

git push --mirror ssm

Validación

Una vez que se complete la operación de envío, clona el repositorio de SSM en otro directorio. Luego, compara las copias del CSR y del SSM del repositorio:

  • Cantidad de ramas: Ejecuta git branch -r en cada repositorio y verifica que la cantidad de ramas sea la misma. En los sistemas Linux o macOS, canalizar el comando a wc -l cuenta las líneas de salida.
  • Cantidad de etiquetas: Ejecuta git tag en cada repositorio y verifica que la cantidad de etiquetas sea la misma. En sistemas Linux o macOS, canalizar el comando a wc -l cuenta las líneas de salida.
  • Confirmación HEAD: Ejecuta git rev-parse HEAD en cada repositorio y verifica que el hash de confirmación sea igual.
  • Recuento de confirmaciones: Ejecuta git rev-list --all --count en cada repositorio y verifica que la cantidad de confirmaciones sea la misma.

Limpieza

  • Si suplantaste la identidad de una cuenta de servicio durante la migración, ejecuta gcloud config set account para restablecer tus credenciales.
  • Si inhabilitaste las reglas de protección de ramas, vuelve a habilitar Branch Protection Rules en el repositorio de SSM.
  • Quita las copias básicas del repositorio de CSR de la computadora que usaste para la migración.
  • Borra el repositorio de CSR original.

¿Qué sigue?