Comment j'ai mis à jour chaque succursale sans toucher à une seule machine

J'ai conçu un outil de bureau interne en utilisant Electron. Il s'exécute sur des machines réparties dans de nombreuses succursales. Ces bureaux disposent de réseaux différents et de niveaux de compétences informatiques variés.

La semaine dernière, j'ai dû déployer un correctif sur chaque machine immédiatement. Je n'ai visité aucune succursale. Je n'ai pas envoyé de fichiers d'installation par e-mail. Je n'ai demandé à personne de cliquer sur installer.

J'ai exécuté deux commandes dans mon terminal et je m'en suis allé. Dès le lendemain matin, chaque machine avait reçu la mise à jour.

Cela a fonctionné parce que j'ai mis en place un système de mise à jour automatique en utilisant electron-updater il y a plusieurs mois.

Lorsque vous déployez un logiciel dans des sites distants, vous êtes confronté à ces problèmes :

  • Vous ne pouvez pas compter sur les utilisateurs pour lancer les installateurs.
  • Vous ne pouvez pas supposer que le support informatique est sur place.
  • L'accès à distance ne permet pas de monter en charge.
  • La distribution manuelle devient votre principal goulot d'étranglement.

La solution consiste à retirer l'installateur de la boucle.

Mon système utilise un fournisseur HTTP générique. J'héberge les mises à jour sur un serveur web privé via SFTP. Cela permet de garder les logiciels internes hors des dépôts publics comme GitHub.

Le processus comporte quatre couches :

  • Build et publication : compilez l'application et envoyez les fichiers sur le serveur.
  • Main process : vérifiez les nouvelles versions et téléchargez-les silencieusement.
  • Preload bridge : transmettez les événements de mise à jour à l'UI en toute sécurité.
  • Renderer UI : affichez la progression à l'utilisateur sans lui permettre de l'interrompre.

Voici comment se déroule le flux de mise à jour :

  1. J'exécute un script de publication. Il construit l'application et envoie les fichiers.
  2. L'application utilise un fichier latest.yml pour vérifier les mises à jour. Ce fichier contient la version et un hash de sécurité.
  3. Au lancement, l'application interroge le serveur.
  4. Si une nouvelle version existe, elle est téléchargée automatiquement.
  5. Une fois le téléchargement terminé, l'application se ferme et installe la mise à jour.

J'utilise autoDownload: true. Cela signifie que les utilisateurs n'ont rien à cliquer. J'affiche également une barre de progression dans l'UI. Cela offre une visibilité aux utilisateurs sans les forcer à prendre une décision.

Leçons pour la création de logiciels de bureau internes :

  • Utilisez un fournisseur HTTP générique pour un contrôle total.
  • Écrasez toujours les fichiers de métadonnées lors de l'upload.
  • Intégrez une logique de reprise dans votre script d'upload pour gérer les connexions instables.
  • Utilisez des téléchargements silencieux mais affichez une barre de progression visible.
  • Vérifiez toujours les mises à jour avec un hash SHA-512.

La mise en place précoce de ce pipeline m'a épargné des jours de travail manuel.

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