Cómo actualicé cada sucursal sin tocar una sola máquina
Desarrollé una herramienta de escritorio interna utilizando Electron. Se ejecuta en máquinas de muchas sucursales. Estas oficinas tienen diferentes redes y distintos niveles de conocimientos técnicos.
La semana pasada, necesité enviar una corrección a cada máquina de inmediato. No visité ninguna sucursal. No envié archivos de instalación por correo electrónico. No le pedí a nadie que hiciera clic en instalar.
Ejecuté dos comandos en mi terminal y me alejé. Para la mañana siguiente, todas las máquinas tenían la actualización.
Esto funcionó porque hace meses construí un sistema de actualización automática utilizando electron-updater.
Cuando distribuyes software a ubicaciones remotas, te enfrentas a estos problemas:
- No puedes confiar en que los usuarios ejecuten los instaladores.
- No puedes asumir que el soporte técnico esté en el lugar.
- El acceso remoto no es escalable.
- La distribución manual se convierte en tu mayor cuello de botella.
La solución es eliminar el instalador del proceso.
Mi sistema utiliza un proveedor HTTP genérico. Alojo las actualizaciones en un servidor web privado a través de SFTP. Esto mantiene el software interno fuera de repositorios públicos como GitHub.
El proceso tiene cuatro capas:
- Build and publish: Compila la aplicación y sube los archivos al servidor.
- Main process: Busca nuevas versiones y las descarga de forma silenciosa.
- Preload bridge: Transmite los eventos de actualización a la interfaz de usuario de forma segura.
- Renderer UI: Muestra al usuario el progreso sin permitirle detenerlo.
Así es como fluye la actualización:
- Ejecuto un script de publicación. Este construye la aplicación y sube los archivos.
- La aplicación utiliza un archivo latest.yml para buscar actualizaciones. Este archivo contiene la versión y un hash de seguridad.
- Al iniciarse, la aplicación consulta el servidor.
- Si existe una nueva versión, la descarga automáticamente.
- Una vez que finaliza la descarga, la aplicación se cierra e instala la actualización.
Utilizo autoDownload: true. Esto significa que los usuarios no tienen que hacer clic en nada. También muestro una barra de progreso en la interfaz de usuario. Esto les da visibilidad sin obligarlos a tomar una decisión.
Lecciones para desarrollar software de escritorio interno:
- Utiliza un proveedor HTTP genérico para tener un control total.
- Sobrescribe siempre los archivos de metadatos durante la subida.
- Incorpora lógica de reanudación en tu script de subida para conexiones inestables.
- Utiliza descargas silenciosas pero muestra una barra de progreso visible.
- Verifica siempre las actualizaciones con un hash SHA-512.
Construir este pipeline desde el principio me ahorró días de trabajo manual.
