Bagaimana Saya Mengemas Kini Setiap Cawangan Tanpa Menyentuh Satu Pun Mesin
Saya membina alat desktop dalaman menggunakan Electron. Ia berjalan pada mesin di pelbagai pejabat cawangan. Pejabat-pejabat ini mempunyai rangkaian yang berbeza dan tahap kemahiran IT yang berbeza.
Minggu lepas, saya perlu menghantar pembetulan ke setiap mesin dengan segera. Saya tidak melawat mana-mana cawangan. Saya tidak menghantar e-mel fail pemasangan. Saya tidak meminta sesiapa untuk klik pasang.
Saya menjalankan dua arahan dalam terminal saya dan beredar. Menjelang keesokan paginya, setiap mesin telah menerima kemas kini tersebut.
Ini berjaya kerana saya telah membina sistem kemas kini automatik menggunakan electron-updater beberapa bulan yang lalu.
Apabila anda menghantar perisian ke lokasi jauh, anda akan menghadapi masalah berikut:
- Anda tidak boleh bergantung kepada pengguna untuk menjalankan pemasang (installer).
- Anda tidak boleh mengandaikan sokongan IT ada di lokasi.
- Akses jarak jauh tidak boleh diskalakan (does not scale).
- Pengedaran manual menjadi hambatan (bottleneck) terbesar anda.
Penyelesaiannya adalah dengan mengeluarkan pemasang daripada proses tersebut.
Sistem saya menggunakan pembekal HTTP generik. Saya menghoskan kemas kini pada pelayan web peribadi melalui SFTP. Ini memastikan perisian dalaman tidak berada dalam repositori awam seperti GitHub.
Proses ini mempunyai empat lapisan:
- Build and publish: Kompil aplikasi dan muat naik fail ke pelayan.
- Main process: Semak versi baharu dan muat turun secara senyap.
- Preload bridge: Sampaikan acara kemas kini ke UI dengan selamat.
- Renderer UI: Tunjukkan kemajuan kepada pengguna tanpa membenarkan mereka menghentikannya.
Begini aliran kemas kini tersebut:
- Saya menjalankan skrip publish. Ia membina aplikasi dan memuat naik fail.
- Aplikasi menggunakan fail
latest.ymluntuk menyemak kemas kini. Fail ini mengandungi versi dan hash keselamatan. - Semasa dilancarkan, aplikasi akan menyemak pelayan.
- Jika versi baharu wujud, ia akan dimuat turun secara automatik.
- Setelah muat turun selesai, aplikasi akan ditutup dan memasang kemas kini tersebut.
Saya menggunakan autoDownload: true. Ini bermakna pengguna tidak perlu klik apa-apa. Saya juga memaparkan bar kemajuan dalam UI. Ini memberikan keterlihatan kepada pengguna tanpa memaksa mereka membuat keputusan.
Pengajaran untuk membina perisian desktop dalaman:
- Gunakan pembekal HTTP generik untuk kawalan penuh.
- Sentiasa tulis semula (overwrite) fail metadata semasa muat naik.
- Bina logik sambung semula (resume logic) ke dalam skrip muat naik anda untuk sambungan yang tidak stabil.
- Gunakan muat turun senyap tetapi paparkan bar kemajuan yang jelas.
- Sentiasa sahkan kemas kini dengan hash SHA-512.
Membina saluran paip (pipeline) ini lebih awal telah menjimatkan saya berhari-hari kerja manual.
