Як я оновив кожен філіал, не торкаючись жодного комп'ютера
Я створив внутрішній десктопний інструмент за допомогою Electron. Він працює на комп'ютерах у багатьох філіалах. Ці офіси мають різні мережі та різний рівень ІТ-компетентності.
Минулого тижня мені потрібно було негайно розіслати виправлення на кожен комп'ютер. Я не відвідував жодного філіалу. Я не надсилав файли встановлення електронною поштою. Я не просив нікого натискати «встановити».
Я запустив дві команди у своєму терміналі й пішов у своїх справах. Наступного ранку на кожному комп'ютері вже було оновлення.
Це спрацювало завдяки тому, що кілька місяців тому я створив систему автоматичного оновлення за допомогою electron-updater.
Коли ви розгортаєте програмне забезпечення у віддалених локаціях, ви стикаєтеся з такими проблемами:
- Ви не можете покладатися на користувачів у запуску інсталяторів.
- Ви не можете розраховувати на те, що ІТ-підтримка перебуває на місці.
- Віддалений доступ не масштабується.
- Ручне розповсюдження стає вашим найбільшим вузьким місцем.
Рішення полягає в тому, щоб виключити інсталятор із процесу.
Моя система використовує загальний HTTP-провайдер. Я розміщую оновлення на приватному вебсервері через SFTP. Це дозволяє тримати внутрішнє ПЗ поза межами публічних репозиторіїв, таких як GitHub.
Процес складається з чотирьох рівнів:
- Build and publish: компіляція додатка та завантаження файлів на сервер.
- Main process: перевірка нових версій та їхнє тихе завантаження.
- Preload bridge: безпечна передача подій оновлення в UI.
- Renderer UI: відображення прогресу користувачеві без можливості його зупинити.
Ось як виглядає процес оновлення:
- Я запускаю скрипт публікації. Він збирає додаток і завантажує файли.
- Додаток використовує файл latest.yml для перевірки оновлень. Цей файл містить версію та хеш безпеки.
- Під час запуску додаток перевіряє сервер.
- Якщо існує нова версія, вона завантажується автоматично.
- Після завершення завантаження додаток закривається і встановлює оновлення.
Я використовую autoDownload: true. Це означає, що користувачам не потрібно нічого натискати. Я також показую смугу прогресу в UI. Це дає користувачам можливість бачити процес, не змушуючи їх приймати рішення.
Уроки розробки внутрішнього десктопного ПЗ:
- Використовуйте загальний HTTP-провайдер для повного контролю.
- Завжди перезаписуйте файли метаданих під час завантаження.
- Додайте логіку відновлення завантаження у ваш скрипт для випадків нестабільного з'єднання.
- Використовуйте тихе завантаження, але показуйте видиму смугу прогресу.
- Завжди перевіряйте оновлення за допомогою хешу SHA-512.
Створення такого конвеєра на ранньому етапі заощадило мені дні ручної роботи.
