MAIN MENU
Blog de Devolutions

Anuncios, actualizaciones y análisis de Devolutions.

Devolutions PowerShell Universal Git Sync illustration for the blog.

Cómo usar Git Sync en PowerShell Universal: funciones, modos y opciones de configuración

Recorra los modos Git sync de PowerShell Universal, las opciones de remoto, las credenciales, el primer push y el primer pull, el intervalo, los modos bidireccional, unidireccional y solo push, y los problemas habituales de fusión, autenticación, SSL y bloqueo.

La sincronización Git (Git sync) es una función de PowerShell Universal. Crea commits a partir de los cambios del repositorio de configuración de PowerShell Universal y los envía y recibe desde un remoto git. Git sync aporta coherencia de configuración en un clúster de PowerShell Universal de alta disponibilidad, o puede llevar cambios de un entorno de desarrollo a producción mediante pull requests y ramas. Incluso en un entorno de un solo nodo, también resulta útil para conservar un historial de cambios.

¿Cómo funciona Git sync?

Git sync funciona emitiendo comandos git pull y git push a intervalos regulares para mantener los ficheros de configuración al día con el repositorio git remoto. De forma predeterminada, cada minuto el proceso Git sync se ejecuta para recibir cambios del remoto git. En cuanto a la interacción del usuario, Git sync opera en dos modos.

Modo manual

El modo predeterminado es el modo manual. En este modo, el servidor de PowerShell Universal queda de hecho en solo lectura hasta que un usuario hace clic en el botón Edit de la consola de administración. El usuario puede entonces realizar cambios en toda la consola. Cuando termina, puede indicar un mensaje de commit y enviar los cambios al remoto; el servidor vuelve a quedar en solo lectura. Mientras el usuario edita los ficheros de configuración, el proceso Git sync no recibe del remoto.

Tenga en cuenta que el proceso del modo manual cambia el estado de todo el servidor. Si varios administradores realizan cambios en el servidor en ese momento, deben saber que sus cambios no están aislados a su cuenta.

Modo automático

El segundo modo es el modo automático. En este modo, el servidor de PowerShell Universal es escribible y cualquier cambio se confirma y se envía directamente al remoto git. En este modo, el usuario no puede indicar un mensaje de commit, pero no tiene que entrar y salir del modo de edición.

Opciones de Git sync

Además de cómo interactúa el usuario con git, el proceso Git sync también puede configurarse para interactuar con un remoto git de tres formas.

Use Database

La opción Use Database almacena el repositorio git directamente en la base de datos de PSU. Puede simplificar Git sync al evitar tener que configurar un remoto git como GitHub o Bitbucket y gestionar red y credenciales. Use Database exige que la herramienta de línea de comandos git.exe, o una versión de git específica de la plataforma, esté instalada en el sistema PowerShell Universal. La opción aprovecha git bundle para crear y almacenar bundles directamente en la base de datos. La desventaja de este tipo de configuración es que el repositorio git no es fácilmente accesible para herramientas de terceros.

Puede obtener más información sobre git bundle.

Cliente git interno

PowerShell Universal incluye un cliente git interno que puede enviar y recibir desde repositorios remotos. Este cliente, LibGit2Sharp, envuelve una biblioteca cliente git en C. No ofrece toda la funcionalidad de git.exe, pero no requiere instalar un cliente git en el servidor PSU. Puede incluir credenciales en la configuración git de PowerShell Universal, que se usarán con la biblioteca cliente git.

Como la biblioteca cliente git interna requiere implementaciones específicas en el servidor PSU, su funcionalidad es más limitada que la del cliente git externo. Dicho esto, para la mayoría de los usuarios debería bastar. Algunas limitaciones son:

  • Falta de compatibilidad con SSH
  • Sin integración con los asistentes de credenciales de git
  • Uso limitado de git config

Para configurar el cliente git interno, desmarque la opción Use Database e introduzca la URL del remoto git y las credenciales.

Cliente git externo

PowerShell Universal también se integra con el proceso de línea de comandos del cliente git externo. Comandos git como git push, git pull y git commit se invocan directamente mediante un proceso git.exe externo. Al usar la integración del cliente git externo, PowerShell Universal no pasa credenciales a los comandos git, así que debe especificarlas de otra forma.

Puede especificar las credenciales de las siguientes maneras.

URL

Puede usar un nombre de usuario y una contraseña (o un token de acceso personal) directamente en la URL con la siguiente sintaxis. Este formato no requiere configuración git adicional, pero almacena la URL en texto sin cifrar en la base de datos.

https://adam:PAT@github.com/ironmansoftware/shiny-octowaffle.git

Asistente de credenciales de git

También puede usar un asistente de credenciales de git para almacenar credenciales de repositorios concretos en git. PowerShell Universal no se integra directamente con los asistentes de credenciales, pero puede configurarlos fuera del entorno PSU y, cuando se ejecute el proceso Git sync, git.exe usará esas credenciales.

Puede obtener más información sobre las credenciales de git. Tenga en cuenta que cualquier ajuste de configuración git específico del usuario debe hacerse en el perfil de la cuenta de servicio de PSU.

Clave privada SSH

Al igual que con el asistente de credenciales de git, también puede almacenar una clave privada SSH de git para que la use el cliente git de PSU. La mayoría de los repositorios git permiten cargar claves públicas personalizadas para acceder a los repositorios en lugar de usar credenciales.

Como ejemplo, puede seguir la documentación de configuración SSH de GitHub.

Ajustes adicionales

Además de las credenciales, cualquier cambio en los ajustes git locales del usuario o globales lo cargará el proceso Git sync de PowerShell Universal. Estos ajustes pueden incluir opciones como el backend criptográfico SSL, los finales de línea y los espacios en blanco.

Configurar Git sync

Git sync se configura definiendo los ajustes git en el fichero appsettings.json o con el cuadro de diálogo Git Settings en Settings > Git. Hay varias opciones de configuración que debe conocer al configurar Git sync. Recomendamos la base de datos cuando sea posible. Facilita configurar varios nodos con los mismos ajustes git cuando comparten una base de datos.

Información de credenciales

La mayoría de los repositorios git emplean algún tipo de token de acceso personal. Los tokens de acceso personal pueden usarse como contraseñas, y tratarse como tales, pero también pueden limitarse en alcance y revocarse en el servidor cuando sea necesario. Es nuestro método preferido para las credenciales.

También es posible usar directamente su nombre de usuario y contraseña.

Primera sincronización

En primer lugar, debe conocer el primer envío o recepción desde un remoto git. Tenga en cuenta que, aunque existe un comportamiento init, este ajuste ya no es necesario y puede ignorarse. Se eliminará en una versión futura.

Ficheros locales

Si no ha configurado Git sync antes, este es el escenario más habitual. Tiene ficheros de configuración locales que desea almacenar en un remoto git. El remoto git debe ser bare. No debe haber ramas creadas, pero el repositorio debe existir. En este escenario, PowerShell Universal inicializa un repositorio git local, crea la rama indicada y luego inicializa el remoto mediante un git push.

Tras la primera sincronización, los ficheros locales existirán en el remoto.

Ficheros en el remoto

Si tiene un remoto git que ya tiene una rama creada con ficheros, debe asegurarse de que el repositorio de configuración de PowerShell Universal esté vacío en el servidor local. Si existen ficheros, la primera Git sync fallará. Si el directorio no existe, se llamará a un git clone en la rama indicada y los ficheros se recibirán en local. PowerShell Universal se reconfigurará a continuación a partir de los ficheros recibidos.

Intervalo de Git sync

De forma predeterminada, el proceso Git sync se ejecuta cada minuto para comprobar cambios que se hayan podido enviar al remoto git. Se ejecuta un git pull y luego se compara el commit HEAD actual de la rama con el SHA del último commit de Git sync. Si el SHA del commit HEAD es distinto del SHA anterior, el sistema de configuración de PowerShell Universal recargará los ficheros cambiados.

Comportamiento de sincronización

Existen tres comportamientos de sincronización en PowerShell Universal. Cambian cómo interactúa PowerShell Universal con el repositorio git remoto.

Bidireccional

En modo bidireccional, se emiten un git pull y un git push en cada Git sync. La instancia de PowerShell Universal es de lectura y escritura.

Unidireccional

En modo unidireccional, se emite un git pull en cada Git sync. La instancia de PowerShell Universal es de solo lectura. Resulta útil en entornos de producción donde los cambios llegan mediante pull requests y no se hacen directamente en el servidor de PowerShell Universal.

Solo push

En modo solo push, se emite un git push si hay cambios en cada Git sync. La instancia de PowerShell Universal es de lectura y escritura, pero no recibe cambios del remoto. Resulta útil al editar ficheros en un entorno de depuración si no desea lidiar con conflictos de fusión procedentes del remoto.

Problemas habituales

A continuación se indican algunos problemas habituales al trabajar con Git sync.

Conflictos de fusión

PowerShell Universal no gestiona los conflictos de fusión y requieren intervención manual. Por ello, puede ser deseable tener los entornos de producción en modo Git sync unidireccional para evitar cambios locales. Todos los cambios y fusiones se harán con las herramientas git del repositorio o de otros entornos de desarrollo locales.

Si desea un entorno de producción de lectura y escritura con varios nodos, se recomienda configurar varios nodos unidireccionales y un solo nodo bidireccional.

Si encuentra un conflicto de fusión, deberá editar los ficheros directamente en el servidor PSU para resolverlo.

Problemas de autenticación

Cada servidor remoto git es un poco distinto. Por ejemplo, Bitbucket tiene varios niveles de tokens HTTP y debe asegurarse de que estén bien configurados para sus repositorios. Recomendamos comprobar que puede clonar repositorios con un cliente git estándar antes de intentar usar un token en PowerShell Universal. Si desea probar las credenciales en PowerShell Universal, puede usar el botón Synchronize Now de la página Git para verificar el acceso sin esperar a la Git sync programada.

Problemas SSL

El cliente git interno no permite aceptar certificados no confiables. Si su servidor tiene problemas con conexiones SSL, puede que deba configurar un cliente git externo y definir los ajustes git config adecuados para evitar errores y aceptar las inseguridades que puedan derivarse de esos cambios.

Git se bloquea

De forma predeterminada, el proceso Git sync de PowerShell Universal espera 60 segundos a que termine el proceso git.exe. En ciertos sistemas, git puede abrir una interfaz para las credenciales. Esto puede hacer que Git sync se bloquee y falle.

¿Listo para crear? Descargue PowerShell Universal.