একটি মেশিন স্পর্শ না করেই আমি কীভাবে প্রতিটি ব্রাঞ্চ আপডেট করলাম

আমি Electron ব্যবহার করে একটি ইন্টারনাল ডেস্কটপ টুল তৈরি করেছি। এটি অনেকগুলো ব্রাঞ্চ অফিসের মেশিনগুলোতে চলে। এই অফিসগুলোর নেটওয়ার্ক এবং আইটি (IT) দক্ষতার স্তর ভিন্ন ভিন্ন।

গত সপ্তাহে, আমার প্রতিটি মেশিনে অবিলম্বে একটি ফিক্স (fix) পাঠানো প্রয়োজন ছিল। আমি কোনো ব্রাঞ্চে যাইনি। আমি কোনো সেটআপ ফাইল ইমেল করিনি। আমি কাউকে ইনস্টল করার জন্য ক্লিক করতে বলিনি।

আমি আমার টার্মিনালে দুটি কমান্ড রান করলাম এবং কাজ শেষ করে চলে গেলাম। পরের দিন সকালের মধ্যে প্রতিটি মেশিনে আপডেটটি পৌঁছে গিয়েছিল।

এটি কাজ করেছে কারণ আমি কয়েক মাস আগে electron-updater ব্যবহার করে একটি অটো-আপডেট সিস্টেম তৈরি করেছিলাম।

যখন আপনি রিমোট লোকেশনে সফটওয়্যার পাঠান, তখন আপনি এই সমস্যাগুলোর সম্মুখীন হন:

  • আপনি ইনস্টলার চালানোর জন্য ব্যবহারকারীদের ওপর নির্ভর করতে পারেন না।
  • আপনি ধরে নিতে পারেন না যে আইটি (IT) সাপোর্ট অন-সাইটে আছে।
  • রিমোট অ্যাক্সেস স্কেলেবল (scalable) নয়।
  • ম্যানুয়াল ডিস্ট্রিবিউশন আপনার সবচেয়ে বড় বাধা হয়ে দাঁড়ায়।

এর সমাধান হলো এই প্রক্রিয়ার বাইরে ইনস্টলারকে সরিয়ে ফেলা।

আমার সিস্টেম একটি জেনেরিক HTTP প্রোভাইডার ব্যবহার করে। আমি SFTP-এর মাধ্যমে একটি প্রাইভেট ওয়েব সার্ভারে আপডেট হোস্ট করি। এটি ইন্টারনাল সফটওয়্যারগুলোকে GitHub-এর মতো পাবলিক রিপোজিটরি থেকে দূরে রাখে।

এই প্রক্রিয়ার চারটি স্তর রয়েছে:

  • Build and publish: অ্যাপটি কম্পাইল করা এবং সার্ভারে ফাইল আপলোড করা।
  • Main process: নতুন ভার্সন চেক করা এবং সেগুলো নিঃশব্দে (silently) ডাউনলোড করা।
  • Preload bridge: নিরাপদে UI-তে আপডেট ইভেন্টগুলো পৌঁছে দেওয়া।
  • Renderer UI: ব্যবহারকারীকে প্রগ্রেস দেখানো যাতে তারা এটি থামাতে না পারে।

আপডেটটি যেভাবে কাজ করে তা নিচে দেওয়া হলো:

  1. আমি একটি publish script রান করি। এটি অ্যাপটি বিল্ড করে এবং ফাইলগুলো আপলোড করে।
  2. অ্যাপটি আপডেট চেক করার জন্য একটি latest.yml ফাইল ব্যবহার করে। এই ফাইলে ভার্সন এবং একটি সিকিউরিটি হ্যাশ (security hash) থাকে।
  3. লঞ্চ করার সময়, অ্যাপটি সার্ভার চেক করে।
  4. যদি নতুন কোনো ভার্সন থাকে, তবে এটি স্বয়ংক্রিয়ভাবে ডাউনলোড করে নেয়।
  5. ডাউনলোড শেষ হলে, অ্যাপটি বন্ধ হয়ে যায় এবং আপডেটটি ইনস্টল করে।

আমি autoDownload: true ব্যবহার করি। এর মানে হলো ব্যবহারকারীদের কিছু ক্লিক করতে হয় না। আমি UI-তে একটি প্রগ্রেস বারও দেখাই। এটি ব্যবহারকারীদের কোনো সিদ্ধান্ত নিতে বাধ্য না করেই কাজের অগ্রগতি সম্পর্কে ধারণা দেয়।

ইন্টারনাল ডেস্কটপ সফটওয়্যার তৈরির জন্য কিছু শিক্ষা:

  • পূর্ণ নিয়ন্ত্রণের জন্য একটি জেনেরিক HTTP প্রোভাইডার ব্যবহার করুন।
  • আপলোডের সময় সর্বদা মেটাডেটা ফাইলগুলো ওভাররাইট (overwrite) করুন।
  • দুর্বল কানেকশনের জন্য আপনার আপলোড স্ক্রিপ্টে resume logic যুক্ত করুন।
  • সাইলেন্ট ডাউনলোড ব্যবহার করুন তবে একটি দৃশ্যমান প্রগ্রেস বার দেখান।
  • সর্বদা SHA-512 হ্যাশ দিয়ে আপডেট যাচাই করুন।

এই পাইপলাইনটি আগেভাগেই তৈরি করার ফলে আমার অনেক দিনের ম্যানুয়াল কাজ বেঁচে গেছে।

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