Як я оновив кожен філіал, не торкаючись жодного комп'ютера

Я створив внутрішній десктопний інструмент за допомогою Electron. Він працює на комп'ютерах у багатьох філіалах. Ці офіси мають різні мережі та різний рівень ІТ-компетентності.

Минулого тижня мені потрібно було негайно розіслати виправлення на кожен комп'ютер. Я не відвідував жодного філіалу. Я не надсилав файли встановлення електронною поштою. Я не просив нікого натискати «встановити».

Я запустив дві команди у своєму терміналі й пішов у своїх справах. Наступного ранку на кожному комп'ютері вже було оновлення.

Це спрацювало завдяки тому, що кілька місяців тому я створив систему автоматичного оновлення за допомогою electron-updater.

Коли ви розгортаєте програмне забезпечення у віддалених локаціях, ви стикаєтеся з такими проблемами:

  • Ви не можете покладатися на користувачів у запуску інсталяторів.
  • Ви не можете розраховувати на те, що ІТ-підтримка перебуває на місці.
  • Віддалений доступ не масштабується.
  • Ручне розповсюдження стає вашим найбільшим вузьким місцем.

Рішення полягає в тому, щоб виключити інсталятор із процесу.

Моя система використовує загальний HTTP-провайдер. Я розміщую оновлення на приватному вебсервері через SFTP. Це дозволяє тримати внутрішнє ПЗ поза межами публічних репозиторіїв, таких як GitHub.

Процес складається з чотирьох рівнів:

  • Build and publish: компіляція додатка та завантаження файлів на сервер.
  • Main process: перевірка нових версій та їхнє тихе завантаження.
  • Preload bridge: безпечна передача подій оновлення в UI.
  • Renderer UI: відображення прогресу користувачеві без можливості його зупинити.

Ось як виглядає процес оновлення:

  1. Я запускаю скрипт публікації. Він збирає додаток і завантажує файли.
  2. Додаток використовує файл latest.yml для перевірки оновлень. Цей файл містить версію та хеш безпеки.
  3. Під час запуску додаток перевіряє сервер.
  4. Якщо існує нова версія, вона завантажується автоматично.
  5. Після завершення завантаження додаток закривається і встановлює оновлення.

Я використовую autoDownload: true. Це означає, що користувачам не потрібно нічого натискати. Я також показую смугу прогресу в UI. Це дає користувачам можливість бачити процес, не змушуючи їх приймати рішення.

Уроки розробки внутрішнього десктопного ПЗ:

  • Використовуйте загальний HTTP-провайдер для повного контролю.
  • Завжди перезаписуйте файли метаданих під час завантаження.
  • Додайте логіку відновлення завантаження у ваш скрипт для випадків нестабільного з'єднання.
  • Використовуйте тихе завантаження, але показуйте видиму смугу прогресу.
  • Завжди перевіряйте оновлення за допомогою хешу SHA-512.

Створення такого конвеєра на ранньому етапі заощадило мені дні ручної роботи.

Джерело: https://dev.to/vinniharu/how-i-pushed-a-critical-update-to-every-company-branch-without-touching-a-single-machine-electron-4pk1