Come ho aggiornato ogni filiale senza toccare un singolo computer

Ho sviluppato uno strumento desktop interno utilizzando Electron. Funziona su computer distribuiti in molte filiali. Queste sedi hanno reti diverse e diversi livelli di competenze IT.

La scorsa settimana, ho dovuto distribuire una correzione a ogni macchina immediatamente. Non ho visitato alcuna filiale. Non ho inviato file di installazione via email. Non ho chiesto a nessuno di cliccare su installa.

Ho eseguito due comandi nel mio terminale e mi sono allontanato. Entro la mattina successiva, ogni macchina aveva l'aggiornamento.

Ciò è stato possibile perché mesi fa ho costruito un sistema di auto-aggiornamento utilizzando electron-updater.

Quando distribuisci software in località remote, ti scontri con questi problemi:

  • Non puoi fare affidamento sugli utenti per eseguire gli installer.
  • Non puoi dare per scontato che il supporto IT sia presente in loco.
  • L'accesso remoto non è scalabile.
  • La distribuzione manuale diventa il tuo collo di bottiglia principale.

La soluzione è rimuovere l'installer dal processo.

Il mio sistema utilizza un provider HTTP generico. Ospito gli aggiornamenti su un server web privato tramite SFTP. Questo mantiene il software interno al di fuori di repository pubblici come GitHub.

Il processo ha quattro livelli:

  • Build e pubblicazione: Compila l'app e carica i file sul server.
  • Main process: Controlla la presenza di nuove versioni e le scarica silenziosamente.
  • Preload bridge: Inoltra gli eventi di aggiornamento alla UI in modo sicuro.
  • Renderer UI: Mostra all'utente l'avanzamento senza permettergli di interromperlo.

Ecco come avviene il flusso di aggiornamento:

  1. Eseguo uno script di pubblicazione. Questo compila l'app e carica i file.
  2. L'app utilizza un file latest.yml per controllare gli aggiornamenti. Questo file contiene la versione e un hash di sicurezza.
  3. All'avvio, l'app controlla il server.
  4. Se esiste una nuova versione, la scarica automaticamente.
  5. Una volta terminato il download, l'app si chiude e installa l'aggiornamento.

Utilizzo autoDownload: true. Ciò significa che gli utenti non devono cliccare nulla. Mostro anche una barra di avanzamento nella UI. Questo garantisce visibilità agli utenti senza costringerli a prendere decisioni.

Lezioni per lo sviluppo di software desktop interno:

  • Usa un provider HTTP generico per avere il pieno controllo.
  • Sovrascrivi sempre i file di metadati durante il caricamento.
  • Implementa una logica di ripresa (resume) nello script di caricamento per gestire connessioni instabili.
  • Usa download silenziosi ma mostra una barra di avanzamento visibile.
  • Verifica sempre gli aggiornamenti con un hash SHA-512.

Costruire questa pipeline fin dall'inizio mi ha risparmiato giorni di lavoro manuale.

Fonte: https://dev.to/vinniharu/how-i-pushed-a-critical-update-to-every-company-branch-without-touching-a-single-machine-electron-4pk1