8.1 CI/CD ও ডেলিভারি
পরিচিতি ও প্রেরণা
নিরন্তর ইন্টিগ্রেশন ও নিরন্তর ডেলিভারি (CI/CD) হলো কোড লেখা এবং নিরাপদে তা ব্যবহারকারীদের সামনে আনার মধ্যকার সংযোগী কলা। নিরন্তর ইন্টিগ্রেশন মানে প্রতিটি পরিবর্তন ঘন ঘন একটি ভাগ করা মেইনলাইনে মার্জ হয়, তারপর স্বয়ংক্রিয়ভাবে বিল্ড ও টেস্ট হয়, যাতে ইন্টিগ্রেশন সমস্যা একটি দীর্ঘ রিলিজ চক্রের শেষে নয়, মিনিটের মধ্যে ভেসে ওঠে। নিরন্তর ডেলিভারি মানে পাইপলাইন পেরোনো প্রতিটি পরিবর্তন ডিপ্লয়যোগ্য অবস্থায় রাখা হয়, তাই প্রোডাকশনে রিলিজ প্রকৌশলের হুড়োহুড়ির বদলে একটি ব্যবসায়িক সিদ্ধান্ত হয়ে ওঠে। নিরন্তর ডিপ্লয়মেন্ট এক ধাপ এগিয়ে প্রতিটি পাস করা পরিবর্তন কোনো মানুষের গেট ছাড়াই স্বয়ংক্রিয়ভাবে রিলিজ করে।
বড় দলের জন্য এই পার্থক্য অত্যন্ত গুরুত্বপূর্ণ। শত শত ইঞ্জিনিয়ার যখন পরস্পর-ঢাকা সিস্টেমে কমিট করে, ম্যানুয়াল ইন্টিগ্রেশন ও ম্যানুয়াল টেস্টিংয়ের খরচ অরৈখিকভাবে বাড়ে। একটি ভাগ করা, স্বয়ংক্রিয় পাইপলাইন অনেক অবদানকারীকে দ্রুত, বিশ্বস্ত প্রতিক্রিয়া দেওয়ার এবং একটি দলের পরিবর্তন অন্যটিকে নীরবে ভাঙা থেকে ঠেকানোর একমাত্র বাস্তব উপায়। পাইপলাইন সফটওয়্যার সুস্থ কি না সে বিষয়ে সত্যের একক উৎস হয়ে ওঠে, এবং এটি এমন সামঞ্জস্য প্রয়োগ করে যা কোনো পরিমাণ নথি বা সদিচ্ছা পরিসরে নিশ্চিত করতে পারে না।
এন্টারপ্রাইজ ও সরকারি প্রেক্ষাপট আরেকটি মাত্রা যোগ করে: নিরীক্ষণযোগ্যতা ও পরিবর্তন নিয়ন্ত্রণ। নিয়ন্ত্রক, নিরাপত্তা কর্মকর্তা ও নিরীক্ষকদের প্রমাণ দরকার যে পরিবর্তন পর্যালোচিত, পরীক্ষিত ও অনুমোদিত ছিল, এবং প্রোডাকশনে চলা আর্টিফ্যাক্ট ঠিক সেটিই যা গড়া ও যাচাই করা হয়েছিল। একটি ভালো-নকশা করা CI/CD পাইপলাইন এই সম্মতি বাধ্যবাধকতাগুলোকে কাগজের বোঝা থেকে স্বাভাবিক প্রকৌশল কর্মপ্রবাহের স্বয়ংক্রিয় উপজাতে পরিণত করে। ভালোভাবে করা হলে ডেলিভারি একই সঙ্গে দ্রুততর ও নিরাপদ হয়, যা নেতৃত্বের কাছে সবচেয়ে গুরুত্বপূর্ণ ফল।
আরও দেখুন: অধ্যায় 8.4 (প্ল্যাটফর্ম প্রকৌশল ও ডেভেলপার অভিজ্ঞতা), অধ্যায় 8.5 (টেস্ট ও প্রক্রিয়া স্বয়ংক্রিয়তা), এবং ফিচার-ফ্ল্যাগ (পুনরায় ডিপ্লয় না করে ব্যবহারকারীদের কাছে কার্যকারিতা উন্মুক্ত করা রানটাইম সুইচ) ও পরীক্ষা চর্চার জন্য অধ্যায় 7.4 (পণ্য বিশ্লেষণ ও পরীক্ষা), যা ক্রমিক ডেলিভারি (একটি পরিবর্তন ক্রমান্বয়ে রিলিজ করা ও স্বয়ংক্রিয়ভাবে তার স্বাস্থ্য মেট্রিক পর্যবেক্ষণ করা) সম্ভব করে।
মূল নীতিসমূহ
- ছোট পরিবর্তন ঘন ঘন একীভূত করুন; দীর্ঘজীবী ব্রাঞ্চ নিরন্তর ইন্টিগ্রেশনের শত্রু।
- আর্টিফ্যাক্ট একবার গড়ুন এবং অভিন্ন আর্টিফ্যাক্ট প্রতিটি পরিবেশে উন্নীত করুন।
- পাইপলাইনকে কর্তৃত্বপূর্ণ গেট করুন: সবুজ হলে পরিবর্তন পাঠানোর যোগ্য; লাল হলে ঠিক না হওয়া পর্যন্ত কাজ থামে।
- দ্রুত প্রতিক্রিয়ার জন্য নির্মমভাবে অপ্টিমাইজ করুন যাতে ডেভেলপাররা প্রবাহে থাকে এবং প্রসঙ্গ তাজা থাকতে ত্রুটি ধরা পড়ে।
- টেস্ট, নিরাপত্তা স্ক্যান, প্রস্তুতকরণ ও ডিপ্লয়মেন্টসহ যা কিছু পুনরাবৃত্ত হয় সব স্বয়ংক্রিয় করুন।
- পাইপলাইন সংজ্ঞাকে ক্লিক-করা কনসোল কনফিগারেশনের বদলে পর্যালোচনার অধীন সংস্করণ-নিয়ন্ত্রিত কোড গণ্য করুন।
- নিরাপদ, ফেরানো-যোগ্য রিলিজের জন্য নকশা করুন যাতে যেকোনো ডিপ্লয়মেন্ট দ্রুত পূর্বাবস্থায় ফেরানো যায়।
- ফিচার ফ্ল্যাগ ব্যবহার করে ডিপ্লয়মেন্ট (কোড ইনস্টল করা) রিলিজ (ব্যবহারকারীদের কাছে উন্মুক্ত করা) থেকে আলাদা করুন।
সুপারিশ
পাইপলাইনকে মান গেটের ধারা হিসেবে নকশা করুন
পাইপলাইনকে ধাপে সাজান যা সস্তা ও দ্রুত থেকে ব্যয়বহুল ও পুঙ্খানুপুঙ্খের দিকে এগোয়: প্রথমে কম্পাইল ও ইউনিট টেস্ট, তারপর ইন্টিগ্রেশন টেস্ট, নিরাপত্তা ও লাইসেন্স স্ক্যান, এবং শেষে স্টেজিং ও প্রোডাকশনে ডিপ্লয়মেন্ট। প্রতিটি ধাপ একটি গেট যা একটি পরিবর্তনকে পেরোতে হবে। গেটগুলো এমনভাবে সাজান যাতে সবচেয়ে দ্রুত, ব্যর্থ হওয়ার সম্ভাবনা সবচেয়ে বেশি পরীক্ষা আগে চলে, যা ডেভেলপারদের সম্ভাব্য সবচেয়ে কম সময়ে প্রতিক্রিয়া দেয়। যেখানে পারেন কমিট-ধাপের প্রতিক্রিয়া চক্র দশ মিনিটের নিচে রাখুন। এর বেশি হলে ডেভেলপাররা প্রসঙ্গ বদলায় এবং উৎপাদনশীলতা পড়ে।
একবার গড়ুন, সর্বত্র উন্নীত করুন
বিল্ড ধাপে একটি একক অপরিবর্তনীয় আর্টিফ্যাক্ট তৈরি করুন এবং ঠিক সেই আর্টিফ্যাক্ট টেস্ট, স্টেজিং ও প্রোডাকশনে উন্নীত করুন। প্রতি পরিবেশে কখনো পুনঃবিল্ড করবেন না, কারণ পুনঃবিল্ড নীরবে পার্থক্য ঢোকাতে পারে। পরিবেশ অনুযায়ী ভিন্ন হওয়া কনফিগারেশন আলাদা বিল্ডে গেঁথে না দিয়ে ডিপ্লয়ের সময় ঢোকান। এই চর্চাই আপনাকে একজন নিরীক্ষককে নিশ্চিতভাবে বলতে দেয় যে প্রোডাকশনের বাইনারি সেটিই যা প্রতিটি গেট পেরিয়েছে।
পাইপলাইনকে নীতির প্রয়োগ বিন্দু করুন
প্রয়োজনীয় পরীক্ষা (কোড পর্যালোচনা অনুমোদন, টেস্ট কভারেজ সীমা, নিরাপত্তা স্ক্যান ফল, স্বাক্ষরিত কমিট) সরাসরি পাইপলাইন ও ব্রাঞ্চ সুরক্ষা নিয়মে এনকোড করুন। উইকিতে থাকা ম্যানুয়াল নীতি সময়সীমার চাপে নিয়মিত এড়ানো হয়। পাইপলাইনে এনকোড করা নীতি প্রতিটি পরিবর্তনে অভিন্নভাবে ও স্বয়ংক্রিয়ভাবে প্রযোজ্য।
মেইনলাইন সর্বদা রিলিজযোগ্য রাখুন
ট্রাঙ্ক-ভিত্তিক ডেভেলপমেন্ট ব্যবহার করুন, যা সব কাজ কম বা কোনো দীর্ঘজীবী ব্রাঞ্চ ছাড়া একটি একক ভাগ করা ব্রাঞ্চে একীভূত করে, অথবা স্বল্পজীবী ফিচার ব্রাঞ্চ ব্যবহার করুন, এবং অসম্পূর্ণ কাজ লুকাতে দীর্ঘজীবী ব্রাঞ্চের বদলে ফিচার ফ্ল্যাগের ওপর নির্ভর করুন। এটি মার্জ সংঘাত ছোট রাখে এবং মেইনলাইনকে সর্বদা ডিপ্লয়যোগ্য অবস্থায় রাখে, যা প্রকৃত নিরন্তর ডেলিভারির পূর্বশর্ত।
ডিপ্লয়মেন্ট কৌশল সুচিন্তিতভাবে বাছুন
সেবার ঝুঁকি ও ক্ষতির পরিসরের সঙ্গে ডিপ্লয়মেন্ট কৌশল মেলান:
- রোলিং ডিপ্লয়মেন্ট ক্রমান্বয়ে ইনস্ট্যান্স প্রতিস্থাপন করে এবং স্টেটলেস সেবার জন্য একটি যুক্তিসঙ্গত ডিফল্ট।
- ব্লু-গ্রিন দুটি অভিন্ন পরিবেশ বজায় রাখে এবং ট্রাফিক একবারে স্যুইচ করে, তাৎক্ষণিক রোলব্যাক পথ দেয়।
- ক্যানারি রিলিজ ট্রাফিকের একটি ছোট শতাংশ নতুন সংস্করণে পাঠায়, স্বাস্থ্য মেট্রিক দেখে, এবং সংকেত ভালো হলেই কেবল সম্প্রসারিত করে।
- ফিচার ফ্ল্যাগ রিলিজকে ডিপ্লয়মেন্ট থেকে আলাদা করে, পুনরায় ডিপ্লয় না করে নির্দিষ্ট ব্যবহারকারী বা কোহর্টের জন্য কার্যকারিতা সক্ষম করতে দেয়।
স্বয়ংক্রিয় রোলব্যাকসহ ক্রমিক ডেলিভারি গ্রহণ করুন
ক্রমিক ডেলিভারি ক্যানারি রিলিজকে ত্রুটি হার, বিলম্ব ও সম্পৃক্তির মতো মেট্রিকের স্বয়ংক্রিয় বিশ্লেষণের সঙ্গে মেলায়। আগে থেকে বস্তুনিষ্ঠ স্বাস্থ্য মানদণ্ড সংজ্ঞায়িত করুন, তারপর সিস্টেমকে সেই সংকেতের ভিত্তিতে স্বয়ংক্রিয়ভাবে উন্নীত বা রোলব্যাক করতে দিন। স্বয়ংক্রিয় রোলব্যাক সেই মানবিক দ্বিধা সরায় যা একটি ছোট ঘটনাকে বড় ঘটনায় পরিণত করে।
নিয়ন্ত্রিত পরিবেশের জন্য রিলিজ ব্যবস্থাপনা ও পরিবর্তন নিয়ন্ত্রণ দিন
নিয়ন্ত্রিত প্রেক্ষাপটে একটি হালকা কিন্তু বাস্তব পরিবর্তন-ব্যবস্থাপনা রেকর্ড রাখুন। প্রতিটি পরিবর্তন কে অনুমোদন করেছেন, কোন টেস্ট চলেছে এবং কোন আর্টিফ্যাক্ট ডিপ্লয় হয়েছে তা স্বয়ংক্রিয়ভাবে ধরুন। সত্যিই উচ্চ-ঝুঁকির পরিবর্তনের জন্য পরিবর্তন উপদেষ্টা প্রক্রিয়া ব্যবহার করুন, কিন্তু কেবল সেই ক্ষেত্রের জন্য সংরক্ষণ করুন। প্রতিটি রুটিন পরিবর্তন সাপ্তাহিক বোর্ডের মধ্য দিয়ে পাঠানো স্বয়ংক্রিয়তার মূল্য ধ্বংস করে। তার বদলে মানক, পূর্ব-অনুমোদিত পরিবর্তনের ধরন লক্ষ্য করুন যা আনুষ্ঠানিকতা ছাড়া পাইপলাইনের মধ্য দিয়ে প্রবাহিত হয়।
ট্রেড-অফ: সুবিধা ও অসুবিধা
| পদ্ধতি | সুবিধা | অসুবিধা | সবচেয়ে ভালো মানায় |
|---|---|---|---|
| নিরন্তর ডেলিভারি (ম্যানুয়াল রিলিজ গেট) | ব্যবসা সময় নিয়ন্ত্রণ করে; নিয়ন্ত্রিত রিলিজ জানালার জন্য শক্তিশালী | মেইনলাইন পাঠানোর যোগ্য রাখতে শৃঙ্খলা লাগে | পরিবর্তন জানালাসহ এন্টারপ্রাইজ |
| নিরন্তর ডিপ্লয়মেন্ট (সম্পূর্ণ স্বয়ংক্রিয়) | দ্রুততম প্রতিক্রিয়া; ক্ষুদ্রতম ব্যাচ | পরিণত টেস্ট ও পর্যবেক্ষণযোগ্যতা দাবি করে | উচ্চ-আস্থা, উচ্চ-ফ্রিকোয়েন্সি দল |
| ব্লু-গ্রিন | তাৎক্ষণিক রোলব্যাক; সরল মানসিক মডেল | স্যুইচের সময় পরিবেশ খরচ দ্বিগুণ | দ্রুত ফেরানো দরকার এমন জটিল সেবা |
| ক্যানারি + ক্রমিক ডেলিভারি | ক্ষতির পরিসর সীমিত করে; ডেটা-চালিত | গড়া জটিল; ভালো মেট্রিক লাগে | বড়-পরিসর ব্যবহারকারী-মুখী সিস্টেম |
| ফিচার ফ্ল্যাগ | ডিপ্লয়কে রিলিজ থেকে আলাদা করে | পরিষ্কার না করলে ফ্ল্যাগ ঋণ | নিরাপদে অসম্পূর্ণ কাজ পাঠানো দল |
কেন্দ্রীয় ট্রেড-অফ গতি বনাম নিয়ন্ত্রণ, কিন্তু এটি প্রায়ই একটি মিথ্যা পছন্দ। পরিণত স্বয়ংক্রিয়তা দুটিই দেয়: রিলিজ দ্রুততর কারণ ছোট, এবং নিরাপদ কারণ প্রতিটি যাচাই করা ও ফেরানো-যোগ্য। প্রকৃত খরচ টেস্ট কভারেজ, পর্যবেক্ষণযোগ্যতা ও পাইপলাইন প্রকৌশলে অগ্রিম বিনিয়োগ, সঙ্গে সেগুলো সুস্থ রাখার চলমান শৃঙ্খলা। যে প্রতিষ্ঠান সেই বিনিয়োগে কার্পণ্য করে তারা নিরাপত্তা ছাড়াই গতি পায়, যা ধীর ম্যানুয়াল প্রক্রিয়ার চেয়ে খারাপ।
আপনার দলের সঙ্গে আলোচনার প্রশ্ন
কমিট-ধাপের প্রতিক্রিয়া সময়ের জন্য আপনার লক্ষ্য কী, এবং স্যুট দশ মিনিটের বেশি বাড়লে কী কাটা পড়ে? একটি ধীর কমিট ধাপ নীরবে নিরন্তর ইন্টিগ্রেশন হত্যা করে, কারণ ডেভেলপাররা সবুজের জন্য অপেক্ষা বন্ধ করে পরিবর্তন ব্যাচ করা শুরু করে। সংখ্যাটি এখনই ঠিক করুন (এই অধ্যায় দশ মিনিটের নিচে যুক্তি দেয়) এবং তা ধরে রাখার কৌশল ঠিক করুন: সমান্তরাল ওয়ার্কার, কঠোর টেস্ট পিরামিড, এবং ধীর ইন্টিগ্রেশন পরীক্ষা পরবর্তী ধাপে সরানো। এন্টারপ্রাইজ পরিসরে এটি একটি প্ল্যাটফর্ম সিদ্ধান্ত, কারণ শত শত ইঞ্জিনিয়ার একই পাইপলাইন ভাগ করে এবং প্রতিটি যোগ করা মিনিট প্রতিটি কমিটে গুণ হয়। বৈঠকে প্রকৃত ডেটা আনুন: বর্তমান p50 ও p95 পাইপলাইন সময়কাল, সবচেয়ে ধীর দশটি টেস্ট, এবং মানুষ কত ঘন ঘন অপেক্ষার বদলে পুনরায় চালায়। আপনি লক্ষ্য বলতে এবং সংখ্যা দিয়ে রক্ষা করতে না পারলে আপনার পাইপলাইন CI-র পোশাক পরা একটি ব্যাচ প্রক্রিয়ার দিকে সরছে।
প্রতিটি সেবা কোন ডিপ্লয়মেন্ট কৌশল ব্যবহার করে, এবং সেই পছন্দের জন্য কে জবাবদিহিযোগ্য? রোলিং, ব্লু-গ্রিন ও ক্যানারি বিনিময়যোগ্য নয়: তারা খরচ, রোলব্যাক গতি ও জটিলতা ভিন্নভাবে বিনিময় করে, এবং সঠিক বাছাই সেবার ক্ষতির পরিসরের ওপর নির্ভর করে। ব্লু-গ্রিন স্যুইচের সময় দ্বিগুণ পরিবেশের দামে তাৎক্ষণিক রোলব্যাক কেনে, যা একটি পেমেন্ট সিস্টেমের জন্য মূল্যবান এবং একটি অভ্যন্তরীণ ড্যাশবোর্ডের জন্য অপচয়। ক্যানারি উন্মুক্ততা সীমিত করে কিন্তু ভালো স্বাস্থ্য মেট্রিক ও বেশি পাইপলাইন প্রকৌশল দাবি করে। একটি বড় বা নিয়ন্ত্রিত সম্পত্তির জন্য এটি প্রতিটি দলের অভ্যাসে ছেড়ে দিলে এমন অসঙ্গতি তৈরি হয় যা ঘটনার সময় ভেসে ওঠে, তাই সেবা স্তর অনুযায়ী ডিফল্ট সম্মত করুন এবং সিদ্ধান্ত রেকর্ড করুন। আপনার সেবা ক্যাটালগ আনুন এবং প্রতিটি সেবাকে তার কৌশল, রোলব্যাক পথ এবং সেই ডাকের মালিক ব্যক্তি দিয়ে চিহ্নিত করুন।
প্রোডাকশনের আর্টিফ্যাক্ট ঠিক সেটিই যা প্রতিটি গেট পেরিয়েছে তা আপনি কীভাবে প্রমাণ করেন? একবার গড়া এবং অভিন্ন আর্টিফ্যাক্ট উন্নীত করাই নিরীক্ষণযোগ্যতার পুরো খেলা, এবং যে মুহূর্তে কেউ প্রতি পরিবেশে পুনঃবিল্ড করে বা একটি চলমান বাক্সে প্যাচ করে তা ভেঙে যায়। এন্টারপ্রাইজ ও সরকারি পরিবেশে একজন নিরীক্ষক আপনাকে একটি চলমান বাইনারি তার কমিট, তার পর্যালোচনা এবং তার অনুমোদনে ট্রেস করতে বলবেন, এবং আপনি চান সেই উত্তর এক সপ্তাহ নয়, সেকেন্ড লাগুক। কীভাবে প্রয়োগ করবেন ঠিক করুন: অপরিবর্তনীয় আর্টিফ্যাক্ট, স্বাক্ষরিত ইমেজ, ডিপ্লয়ের সময় স্বাক্ষর যাচাই, এবং কনফিগারেশন আলাদা বিল্ডে গেঁথে দেওয়ার বদলে ডিপ্লয়ে ঢোকানো। বর্তমান ফাঁক টেবিলে আনুন, যেমন পুনঃবিল্ড করা যেকোনো ধাপ, যেকোনো ম্যানুয়াল হটফিক্স পথ, এবং যেখানে কনফিগ আর্টিফ্যাক্ট ফর্ক করে। উত্তর ঠিক করে আপনার সম্মতি প্রমাণ পাইপলাইনের উপজাত নাকি প্রতিটি নিরীক্ষার আগে ম্যানুয়াল হুড়োহুড়ি।
মেইনলাইন লাল হলে আসলে কী থামে, এবং আপনি অস্থির টেস্ট কীভাবে সামলান? একটি পাইপলাইন কেবল তখনই কর্তৃত্বপূর্ণ গেট যখন একটি লাল বিল্ড সত্যিই কাজ থামায়, তবু অনেক প্রতিষ্ঠান নীরবে একটি ভাঙা মেইনলাইন ও মাঝেমধ্যে ব্যর্থতার ব্যাকলগ সহ্য করে, যা ডেভেলপারদের সবুজ না হওয়া পর্যন্ত পুনরায় চালাতে এবং ব্যর্থতার ওপর পাঠাতে প্রশিক্ষিত করে। একটি বড় দলের জন্য এই পচন চক্রবৃদ্ধি হয়, কারণ এক দলের উপেক্ষিত অস্থিরতা সবার গেট এড়ানোর অজুহাত হয়ে ওঠে, এবং পাইপলাইনে আস্থা পুনর্নির্মাণের চেয়ে ধরে রাখা অনেক সস্তা। প্রতিদ্বন্দ্বী টান ওজন করুন: কঠোর লাইন-থামানো নিয়ম মান রক্ষা করে কিন্তু একটি খারাপ কমিটে শত শত ইঞ্জিনিয়ার আটকাতে পারে, যেখানে নমনীয় নীতি থ্রুপুট রাখে এবং গেট ক্ষয় করে। আলোচনায় প্রমাণ আনুন: আপনার বর্তমান মেইনলাইন লাল সময়, কোয়ারেন্টিন করা বা অস্থির টেস্টের সংখ্যা, পুনঃচালনা হার, এবং কত ঘন ঘন পরিবর্তন একটি ব্যর্থ পরীক্ষার ওপর দিয়ে মার্জ হয়। এন্টারপ্রাইজ ও সরকারি পরিবেশে নাম দিন অস্থিরতা ট্রায়াজের মালিক কে এবং মার্জ থামানোর কর্তৃত্ব কার, কারণ প্রয়োগের জন্য কেউ জবাবদিহিযোগ্য নন এমন গেট এমন যা নিরীক্ষকরা পাবেন নিয়মিত ওভাররাইড হয়ে এসেছে।
ফিচার ফ্ল্যাগের জীবনচক্র কী, এবং সেগুলো অবসর দেওয়ার দায় কার? ফ্ল্যাগ আপনাকে ডিপ্লয়মেন্ট ও রিলিজ আলাদা করতে এবং অসম্পূর্ণ কাজ লুকাতে দেয়, কিন্তু প্রতিটি ফ্ল্যাগ আপনার কোডে এমন একটি ব্রাঞ্চ যা নিজে থেকে কখনো পরিষ্কার হয় না, এবং অপরিচালিত ফ্ল্যাগ শর্তাধীন জটিলতায় জমে যা কেউ ছোঁয়ার সাহস পায় না। একটি বড় সম্পত্তিতে এই ঋণ বিপজ্জনক, কারণ একটি বাসি ফ্ল্যাগ নীরবে একটি নিরাপত্তা সংশোধন গেট করতে বা অপরীক্ষিত কোড পথ প্রোডাকশনে ফ্লিপ করতে পারে, এবং যিনি এটি তৈরি করেছিলেন তিনি প্রায়ই সরে গেছেন। টানাপোড়েন ভারসাম্য করুন: ফ্ল্যাগ আপনাকে নিরাপদ, ক্রমবর্ধমান ডেলিভারি কিনে দিয়েছে, তাই লক্ষ্য কম ফ্ল্যাগ নয়, মালিক, মেয়াদ প্রত্যাশা এবং বাসিগুলো তুলে ধরা টুলিংসহ একটি শৃঙ্খলাবদ্ধ জীবনচক্র। বর্তমান তালিকা বৈঠকে আনুন: কতগুলো ফ্ল্যাগ চালু, সবচেয়ে পুরনোটি কত পুরনো, কোনগুলোর মালিক নেই, এবং কোনো দীর্ঘজীবী ফ্ল্যাগ এখন স্থায়ী কনফিগারেশন হিসেবে কাজ করছে কি না যা অন্যত্র থাকা উচিত। নিয়ন্ত্রিত পরিবেশের জন্য যোগ করুন প্রোডাকশনে কে একটি ফ্ল্যাগ বদলাতে পারে এবং সেই পরিবর্তন কি একটি ডিপ্লয়মেন্টের সমান কঠোরতায় লগ হয়, কারণ পাইপলাইন কখনো না চললেও একটি ফ্ল্যাগ ফ্লিপ একটি রিলিজ।
মানুষের গেটসহ নিরন্তর ডেলিভারি এবং পূর্ণ নিরন্তর ডিপ্লয়মেন্টের সীমানা কোথায়, এবং রোলব্যাক সীমা কে ঠিক করে? নিরন্তর ডেলিভারি রিলিজ সময়ে একজন মানুষকে নিয়ন্ত্রণে রাখে, যা বিধিবদ্ধ পরিবর্তন জানালা ও উচ্চ-ক্ষতির-পরিসর সিস্টেমের জন্য মানায়, যেখানে নিরন্তর ডিপ্লয়মেন্ট প্রতিটি পাস করা পরিবর্তন স্বয়ংক্রিয়ভাবে পাঠায় এবং নিরাপদ হতে পরিণত টেস্ট, পর্যবেক্ষণযোগ্যতা ও স্বয়ংক্রিয় রোলব্যাক দাবি করে। একটি বড় বা নিয়ন্ত্রিত প্রতিষ্ঠানের জন্য উত্তর কদাচিৎ অভিন্ন: আপনার বিপণন সাইট নিরন্তর ডিপ্লয় করতে পারে যখন আপনার পেমেন্ট কোর একটি নথিবদ্ধ মানুষের গেট রাখে, এবং সেবা স্তর অনুযায়ী সেই রেখা টানা অপ্রয়োজনীয় ঘর্ষণ ও বেপরোয়া স্বয়ংক্রিয়তা দুটিই ঠেকায়। প্রতিদ্বন্দ্বী বিবেচনা গতি ও ব্যাচ আকার বনাম নিয়ন্ত্রণ ও নিরীক্ষণযোগ্যতা, সঙ্গে স্বয়ংক্রিয় রোলব্যাক যে স্বাস্থ্য মেট্রিক দাবি করে তার প্রকৌশল খরচ। প্রমাণ আনুন: প্রতি সেবায় পরিবর্তন-ব্যর্থতা হার, পুনরুদ্ধারের গড় সময়, বর্তমান রিলিজ ছন্দ, এবং মানুষ ছাড়া উন্নীত বা রোলব্যাক করতে আপনি যে বস্তুনিষ্ঠ সংকেত (ত্রুটি হার, বিলম্ব, সম্পৃক্তি) বিশ্বাস করবেন। সরকারি ও এন্টারপ্রাইজ পরিবেশে প্রতিটি স্তরকে বাঁধুন রোলব্যাক সীমার মালিক কে এবং গেট করা রিলিজ থেকে পূর্ণ স্বয়ংক্রিয়তায় যেকোনো সরানোয় কে স্বাক্ষর করেন, যাতে সিদ্ধান্ত ভেসে যাওয়ার বদলে সুচিন্তিত হয়।
খাতভেদে দৃষ্টিভঙ্গি
স্টার্টআপ। প্রথম দিন থেকে ম্যানেজড CI/CD-র ওপর ঝুঁকুন: একটি হোস্টেড রানার, একটি পাইপলাইন, একটি অপরিবর্তনীয় ইমেজ এবং মার্জে স্বয়ংক্রিয়ভাবে স্টেজিংয়ে ডিপ্লয়। রক্ষণাবেক্ষণ করতে হবে এমন পাইপলাইন অবকাঠামো গড়বেন না। ফিচার ফ্ল্যাগ দুই-তিনজন ইঞ্জিনিয়ারকে নিরাপদে অর্ধ-সমাপ্ত কাজ মার্জ করতে এবং দিনে কয়েকবার পাঠাতে দেয়, এবং স্কেল আরও দাবি না করা পর্যন্ত এক-ক্লিক প্রোডাকশন ডিপ্লয় ও দ্রুত ফ্ল্যাগ-অফই আপনার দরকারি সব পরিবর্তন নিয়ন্ত্রণ।
ছোট ব্যবসা। কোনো নিবেদিত প্ল্যাটফর্ম বা রিলিজ ইঞ্জিনিয়ার নেই, তাই বিশেষায়িত কিছুর বদলে আপনার সোর্স হোস্টের দেওয়া পাইপলাইন (গাঁথা Actions বা সমতুল্য) এবং তার ডিফল্ট ডিপ্লয়মেন্ট কৌশল পছন্দ করুন। কেনা-বনাম-গড়ার পছন্দ সততার সঙ্গে ফ্রেম করুন: একটি ম্যানেজড পাইপলাইন এবং গাঁথা রোলব্যাকসহ একটি হোস্টিং প্ল্যাটফর্ম একটি বিশেষায়িত সেটআপ যে ইঞ্জিনিয়ার-ঘণ্টা খায় তার চেয়ে কম খরচ করে। অপরিহার্য রাখুন, যা একবার গড়া, একই আর্টিফ্যাক্ট উন্নীত করা এবং সহজ রিভার্ট, আর পরিমাণ যথার্থ না করা পর্যন্ত ক্রমিক-ডেলিভারি যন্ত্রপাতি বাদ দিন।
এন্টারপ্রাইজ। মূল সমস্যা অনেক দল জুড়ে সামঞ্জস্য: একটি ভাগ করা পাইপলাইন টেমপ্লেট প্রমিত করুন যা পর্যালোচনা, স্ক্যানিং, স্বাক্ষরিত অপরিবর্তনীয় আর্টিফ্যাক্ট এবং স্তর অনুযায়ী ডিপ্লয়মেন্ট কৌশল প্রয়োগ করে, যাতে মান দল-ধরে-দল ভিন্ন না হয়। পাইপলাইন সংজ্ঞা পর্যালোচিত কোড গণ্য করুন, পরিবর্তন-নিয়ন্ত্রণ প্রমাণ স্বয়ংক্রিয়ভাবে ধরুন, এবং ফিচার ফ্ল্যাগ ও রোলব্যাক সীমা প্রতিটি দলের ব্যক্তিগত অভ্যাসের বদলে শাসিত সম্পদ হিসেবে পরিচালনা করুন। প্রতিদান হলো দ্রুততর ডেলিভারি এবং ত্রৈমাসিক হুড়োহুড়ির বদলে উপজাত হিসেবে তৈরি নিরীক্ষা প্রমাণ।
সরকার। ক্রয় নিয়ম, বিধিবদ্ধ পরিবর্তন জানালা এবং জনগণের কাছে জবাবদিহি পাইপলাইন আকার দেয়। পরিণতিমূলক সিস্টেমের জন্য পূর্ণ স্বয়ংক্রিয়তার চেয়ে নথিবদ্ধ মানুষের রিলিজ গেটসহ নিরন্তর ডেলিভারি পছন্দ করুন, রুটিন কাজকে পূর্ব-অনুমোদিত মানক পরিবর্তন হিসেবে শ্রেণিবদ্ধ করুন, এবং সংকীর্ণ বার্ষিক জানালায় নাগরিকদের নির্ভর করা সেবার জন্য তাৎক্ষণিক রোলব্যাক পথ (ব্লু-গ্রিন বা স্বয়ংক্রিয় ক্যানারি) রাখুন। নিশ্চিত করুন পাইপলাইন রেকর্ড করে কে প্রতিটি পরিবর্তন অনুমোদন করেছেন, কোন টেস্ট চলেছে এবং কোন আর্টিফ্যাক্ট ডিপ্লয় হয়েছে, যাতে স্বচ্ছতা ও নিরীক্ষা বাধ্যবাধকতা ম্যানুয়াল কাগজপত্রের বদলে স্বাভাবিক কর্মপ্রবাহে পূরণ হয়।
উদাহরণ
স্টার্টআপ। চারজনের একটি SaaS স্টার্টআপ একটি একক GitHub Actions পাইপলাইন সাজায় যা ইউনিট টেস্ট চালায়, একটি Docker ইমেজ গড়ে এবং main-এ প্রতিটি মার্জে সেই একই ইমেজ স্বয়ংক্রিয়ভাবে স্টেজিংয়ে ডিপ্লয় করে। প্রোডাকশন ডিপ্লয় এক ক্লিক, এবং প্রতিষ্ঠাতারা ফিচার ফ্ল্যাগের ওপর ঝুঁকে আছেন যাতে সপ্তাহের পর সপ্তাহ একটি ব্রাঞ্চ জীবিত রাখার বদলে অর্ধ-সমাপ্ত কাজ একটি ফ্ল্যাগের পিছনে মার্জ করতে পারেন। একটি খারাপ রিলিজ ফসকে গেলে তারা সেকেন্ডে ফ্ল্যাগ বন্ধ করে এবং শান্তভাবে সারায়, যা তাদের ক্ষুদ্র দলকে নিবেদিত অপস ব্যক্তি ছাড়াই দিনে কয়েকবার পাঠাতে রাখে।
এন্টারপ্রাইজ। একটি বৈশ্বিক ব্যাংক ডজনখানেক দল-নির্দিষ্ট Jenkins কাজ একটি প্রমিত পাইপলাইন টেমপ্লেটে একত্র করে যা প্রতিটি পণ্য দল উত্তরাধিকার পায়। টেমপ্লেট স্ট্যাটিক বিশ্লেষণ, নির্ভরতা স্ক্যানিং এবং একটি স্বাক্ষরিত, অপরিবর্তনীয় আর্টিফ্যাক্ট প্রয়োগ করে, এবং ত্রুটি-হার ও বিলম্ব সীমার সঙ্গে বাঁধা স্বয়ংক্রিয় রোলব্যাকসহ ক্যানারির মাধ্যমে ডিপ্লয় করে। একই আর্টিফ্যাক্ট টেস্ট থেকে প্রোডাকশনে উন্নীত হয় এবং প্রতিটি গেট লগ হয় বলে ব্যাংকের নিরীক্ষকরা যেকোনো প্রোডাকশন বাইনারি তার কমিট, পর্যালোচনা ও অনুমোদনে সেকেন্ডে ট্রেস করতে পারেন, ত্রৈমাসিক ম্যানুয়াল প্রমাণ-সংগ্রহ কসরত প্রতিস্থাপন করে।
সরকার। একটি ফাইলিং সিস্টেম আধুনিকীকরণ করা একটি জাতীয় কর সংস্থা স্পষ্ট মানুষের রিলিজ গেটসহ নিরন্তর ডেলিভারি গ্রহণ করে, যাতে ফাইলিং মৌসুমে বিধিবদ্ধ পরিবর্তন জানালা মানতে পারে। রুটিন পরিবর্তন মানক পূর্ব-অনুমোদিত পরিবর্তন হিসেবে শ্রেণিবদ্ধ যা স্বয়ংক্রিয়ভাবে স্টেজিংয়ে প্রবাহিত হয়। প্রোডাকশন রিলিজ একটি একক নথিবদ্ধ অনুমোদন দাবি করে যা পাইপলাইন রেকর্ড করে। একটি ত্রুটি প্রোডাকশনে পৌঁছালে ব্লু-গ্রিন ডিপ্লয়মেন্ট সংস্থাকে একটি তাৎক্ষণিক রোলব্যাক পথ দেয়, যা জটিল যখন লক্ষ লক্ষ নাগরিক একটি সংকীর্ণ বার্ষিক জানালায় সেবার ওপর নির্ভর করে।
ব্যবসায়িক যুক্তি: প্রেরণা, ROI ও TCO
CI/CD বিনিয়োগের প্রতিদান দেখা দেয় পরিবর্তনের কম লিড টাইম, কম পরিবর্তন-ব্যর্থতা হার এবং ঘটনা ঘটলে দ্রুততর পুনরুদ্ধারে: যে মেট্রিক গবেষণা ধারাবাহিকভাবে ডেলিভারি কর্মক্ষমতা ও সাংগঠনিক ফল দুটির সঙ্গে যুক্ত করে। দ্রুততর, ছোট রিলিজ পরিসরে প্রকৌশল ক্ষমতা খেয়ে ফেলা সমন্বয় ওভারহেড কাটে, এবং স্বয়ংক্রিয় যাচাই প্রোডাকশন ত্রুটি নিয়ে অগ্নিনির্বাপণের ব্যয়বহুল, মনোবল-ক্ষয়কারী কাজ কাটে।
মালিকানার মোট খরচ গ্রহণ না করার খরচের বিপরীতে গ্রহণ খরচ ওজন করে। গ্রহণ খরচে পাইপলাইন গড়া ও রক্ষণাবেক্ষণ, টেস্ট কভারেজ বাড়ানো, এবং পর্যবেক্ষণযোগ্যতা ও প্ল্যাটফর্ম কর্মীতে বিনিয়োগ আছে। গ্রহণ না করার খরচ বড় কিন্তু কম দৃশ্যমান: ধীর ম্যানুয়াল রিলিজ, ইন্টিগ্রেশন ব্যথা, সুনাম ক্ষতিগ্রস্তকারী প্রোডাকশন ঘটনা, এবং নিয়ন্ত্রিত প্রেক্ষাপটে ব্যর্থ নিরীক্ষা ও প্রতিকার। নেতৃত্বের জন্য যুক্তি সবচেয়ে ভালো ঝুঁকি হ্রাস ও ক্ষমতার ভাষায় ফ্রেম করা যায়। স্বয়ংক্রিয়তা দুর্লভ জ্যেষ্ঠ-ইঞ্জিনিয়ার সময় পুনরাবৃত্ত রিলিজ পরিশ্রম থেকে পণ্য কাজে রূপান্তর করে, আর বিভ্রাট বিরল ও ছোট করে।
অ্যান্টি-প্যাটার্ন ও ফাঁদ
- স্নোফ্লেক পাইপলাইন। প্রতিটি দল হাতে একটি অনন্য পাইপলাইন গড়ে, তাই উন্নতি ও সংশোধন ভাগ করা যায় না এবং মান ব্যাপকভাবে ভিন্ন হয়।
- প্রতি পরিবেশে পুনঃবিল্ড। প্রতিটি ধাপের জন্য পুনঃবিল্ড “একবার গড়া” গ্যারান্টি ভাঙে এবং সূক্ষ্ম পার্থক্য প্রোডাকশনে পৌঁছাতে দেয়।
- উপেক্ষিত লাল বিল্ড। একটি স্থায়ীভাবে ভাঙা মেইনলাইন সহ্য করা পাইপলাইনে আস্থা ধ্বংস করে এবং ব্যর্থতার ওপর পাঠানো স্বাভাবিক করে।
- অমীমাংসিত অস্থির টেস্ট। মাঝেমধ্যে ব্যর্থতা ডেভেলপারদের সবুজ না হওয়া পর্যন্ত পুনরায় চালাতে প্রশিক্ষিত করে, গেটের উদ্দেশ্য ব্যর্থ করে।
- ম্যানুয়াল অনুমোদন নাট্য। একটি পরিবর্তন উপদেষ্টা বোর্ড যা সবকিছুতে ছাপ মারে তা নিরাপত্তা যোগ না করে বিলম্ব যোগ করে।
- ফ্ল্যাগ ঋণ। কখনো না সরানো ফিচার ফ্ল্যাগ রক্ষণাবেক্ষণের অযোগ্য শর্তাধীন জটিলতায় জমে।
- ডিপ্লয় মানে রিলিজ। দুটি জুড়ে দেওয়া মানে প্রতিটি ব্যবহারকারী-মুখী পরিবর্তন একটি ঝুঁকিপূর্ণ পুনঃডিপ্লয় দাবি করে।
পরিপক্বতা মডেল
স্তর 1: সূচনা। বিল্ড ও ডিপ্লয়মেন্ট বেশিরভাগ ম্যানুয়াল, অ্যাড হক ও প্রতিক্রিয়াশীল। ইন্টিগ্রেশন দেরিতে ঘটে, রিলিজ বিরল ও চাপপূর্ণ, রোলব্যাক মানে হাতে একটি পুরনো সংস্করণ পুনরায় ডিপ্লয়, এবং পাইপলাইন গেটের কোনো ভাগ করা ধারণা নেই।
স্তর 2: বিকাশ। প্রতিটি কমিটে স্বয়ংক্রিয় বিল্ড ও ইউনিট টেস্ট চলে, কিন্তু চর্চা দল-ধরে-দল ভিন্ন। ডিপ্লয়মেন্ট স্ক্রিপ্ট করা কিন্তু এখনো ম্যানুয়ালি ট্রিগার ও তত্ত্বাবধান করা হয়, কিছু পরিবেশ সামঞ্জস্যপূর্ণ, এবং আর্টিফ্যাক্ট এখনো প্রতি ধাপে পুনঃবিল্ড হতে পারে। যেখানে পাইপলাইন আছে তা প্রায়ই ভাগ করা যায় না এমন স্নোফ্লেক।
স্তর 3: মানসম্মতকরণ। একটি নথিবদ্ধ, প্রমিত পাইপলাইন টেমপ্লেট দল জুড়ে প্রয়োগ করা। এটি সব পরিবেশে একটি একক অপরিবর্তনীয় আর্টিফ্যাক্ট উন্নীত করে, স্বয়ংক্রিয় মান ও নিরাপত্তা গেট প্রয়োগ করে, পর্যালোচনা অনুমোদন ও স্ক্যান ফলের মতো প্রয়োজনীয় পরীক্ষা এনকোড করে, এবং স্বয়ংক্রিয়ভাবে পরিবর্তন রেকর্ড ধরে। ক্যানারি বা ব্লু-গ্রিনের মতো ডিপ্লয়মেন্ট কৌশল সেবা স্তর অনুযায়ী সুচিন্তিতভাবে বাছা হয়।
স্তর 4: ব্যবস্থাপনা। ডেলিভারি ভিত্তিরেখার বিপরীতে মাপা ও নিয়ন্ত্রিত। প্রতিষ্ঠান পরিবর্তনের লিড টাইম, ডিপ্লয়মেন্ট ফ্রিকোয়েন্সি, পরিবর্তন-ব্যর্থতা হার এবং পুনরুদ্ধারের গড় সময় অনুসরণ করে, সঙ্গে পাইপলাইন p50 ও p95 সময়কাল, অস্থির-টেস্ট ও পুনঃচালনা হার, এবং ফিচার-ফ্ল্যাগ বয়স। রোলব্যাক সীমা পর্যবেক্ষিত ত্রুটি-হার, বিলম্ব ও সম্পৃক্তি ডেটা থেকে ঠিক করা হয়, গেট অভ্যাসের বদলে প্রমাণের ওপর প্রয়োগ করা হয়, এবং প্রতিটি মেট্রিকের একজন মালিক আছেন যিনি লক্ষ্য থেকে সরলে কাজ করেন।
স্তর 5: সমন্বয়। ডেলিভারি নিরন্তর উন্নত ও প্রতিষ্ঠান জুড়ে একীভূত। স্বয়ংক্রিয়, মেট্রিক-চালিত রোলব্যাকসহ ক্রমিক ডেলিভারি রীতি, ভালোভাবে শাসিত ফ্ল্যাগের মাধ্যমে রিলিজ ডিপ্লয়মেন্ট থেকে বিচ্ছিন্ন, এবং সম্মতি প্রমাণ উপজাত হিসেবে স্বয়ংক্রিয়ভাবে তৈরি হয়। সম্পত্তি বদলালে পাইপলাইন খাপ খায়, এবং ডেলিভারি মেট্রিক ব্যবসা ও ঝুঁকি পরিকল্পনায় জোগান দেয় যাতে বিনিয়োগ সর্বোচ্চ-লিভারেজ উন্নতির দিকে প্রবাহিত হয়।
আলোচনার ভাবনা
- আপনার সবচেয়ে জটিল সিস্টেমের জন্য মানুষের গেটসহ নিরন্তর ডেলিভারি এবং পূর্ণ নিরন্তর ডিপ্লয়মেন্টের সঠিক সীমানা কোথায়?
- একটি বাধ্যতামূলক পরিবর্তন-ব্যবস্থাপনা প্রক্রিয়া ছাপ-মারা নাট্যে পরিণত না করে কীভাবে অর্থবহ রাখবেন?
- স্বয়ংক্রিয় রোলব্যাক কোন বস্তুনিষ্ঠ স্বাস্থ্য মেট্রিক দ্বারা শাসিত হওয়া উচিত, এবং তাদের সীমার মালিক কে?
- অস্বাভাবিক প্রয়োজনের দলগুলোর বৈধ দরকারের বিপরীতে প্ল্যাটফর্ম দলগুলো কীভাবে প্রমিত পাইপলাইন টেমপ্লেট ভারসাম্য করবে?
- ঋণ হওয়ার আগে ফিচার ফ্ল্যাগ অবসর দেওয়ার জন্য আপনার নীতি ও টুলিং কী?
- দ্রুততর ডেলিভারি কেবল আরও পাঠানোর বদলে ব্যবসায়িক ফল সত্যিই উন্নত করছে কি না আপনি কীভাবে মাপেন?
প্রধান শিক্ষা
- CI, CD এবং নিরন্তর ডিপ্লয়মেন্ট স্বতন্ত্র; আপনার ঝুঁকি সহনশীলতা ও পরিপক্বতার সঙ্গে মেলে এমন স্বয়ংক্রিয়তা স্তর বাছুন।
- আর্টিফ্যাক্ট একবার গড়ুন এবং অভিন্ন আর্টিফ্যাক্ট প্রতিটি পরিবেশে উন্নীত করুন।
- পাইপলাইনকে দ্রুত প্রতিক্রিয়ার জন্য অপ্টিমাইজ করা ক্রমযুক্ত মান গেট হিসেবে নকশা করুন, এবং এটিকে কর্তৃত্বপূর্ণ পাঠানোর সিদ্ধান্ত গণ্য করুন।
- ডিপ্লয়মেন্ট কৌশল সুচিন্তিতভাবে বাছুন, এবং ক্ষতির পরিসর সীমিত করতে স্বয়ংক্রিয় রোলব্যাকসহ ক্রমিক ডেলিভারি গ্রহণ করুন।
- ফিচার ফ্ল্যাগ দিয়ে রিলিজকে ডিপ্লয়মেন্ট থেকে আলাদা করুন, এবং ফ্ল্যাগ ঋণ পরিচালনা করুন।
- নিয়ন্ত্রিত পরিবেশে ম্যানুয়াল কাগজপত্রের বদলে স্বয়ংক্রিয়ভাবে পরিবর্তন-নিয়ন্ত্রণ প্রমাণ ধরুন।
তথ্যসূত্র ও আরও পড়ার জন্য
- Jez Humble ও David Farley, Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation.
- Nicole Forsgren, Jez Humble ও Gene Kim, Accelerate: The Science of Lean Software and DevOps.
- Gene Kim, Jez Humble, Patrick Debois ও John Willis, The DevOps Handbook.
- Gene Kim, Kevin Behr ও George Spafford, The Phoenix Project.
- Betsy Beyer, Chris Jones, Jennifer Petoff ও Niall Richard Murphy (eds.), Site Reliability Engineering.
- Pete Hodgson, “Feature Toggles (Feature Flags)” (essay).
- ITIL (Information Technology Infrastructure Library), change management guidance.