8.0 حصہ 8 کا تعارف: خودکاری
سافٹ ویئر تبھی قدر پیدا کرتا ہے جب وہ صارفین تک پہنچے۔ کمٹ شدہ تبدیلی سے چلتے پروڈکشن کوڈ تک کا راستہ وہ جگہ ہے جہاں بڑے ادارے رفتار، حفاظت، اور اپنا سکون سب سے زیادہ کھوتے ہیں۔ سینکڑوں انجینئروں، درجنوں ٹیموں، اور ہزاروں انفراسٹرکچر وسائل کے پیمانے پر وہ غیر رسمی عادتیں جو چھوٹے گروہ کے لیے کام کرتی ہیں مکمل طور پر ٹوٹ جاتی ہیں۔ دستی بلڈز، ہاتھ سے ترتیب دیے سرور، اور ایک بار کے ڈیپلائمنٹ اسکرپٹس آپ کو سست کرتے ہیں، اور بدتر یہ کہ وہ ناقابل تکرار، غیر دستاویزی، اور آڈٹ کرنا ناممکن ہو جاتے ہیں۔ یہ حصہ اس نزاکت کو خودکاری سے بدلنے کے بارے میں ہے: سافٹ ویئر بنانے، فراہم کرنے، ڈیپلائے کرنے، اور چلانے کے گندے، غلطی کے شکار کام کو مدون، قابل تکرار، قابل ریویو نظاموں میں بدلنا۔
بڑی ٹیموں اور انٹرپرائز اور سرکاری اداروں کے لیے داؤ ٹھوس ہیں۔ جب بہت سی ٹیمیں باہم ملتے نظام بانٹتی ہیں تو دستی انضمام اور دستی آپریشنز کی لاگت غیر خطی طور پر بڑھتی ہے، اور ایک غیر ریویو شدہ تبدیلی خاموشی سے دوسری ٹیم کا کام یا پوری ریلیز توڑ سکتی ہے۔ ضابطے کے پابند ادارے اضافی بوجھ اٹھاتے ہیں۔ آڈیٹرز، سیکیورٹی افسران، اور ضابطہ سازوں کو ثبوت چاہیے کہ تبدیلیاں ریویو، ٹیسٹ، اور منظور ہوئیں، اور کہ پروڈکشن میں چلتا آرٹیفیکٹ بالکل وہی ہے جو بنایا اور جانچا گیا۔ خودکاری وہ چیز ہے جو ان تعمیل کی ذمہ داریوں کو کاغذی بوجھ سے عام انجینئرنگ ورک فلو کے خودکار ضمنی نتیجے میں بدلتی ہے۔ آپ خلاف ورزیوں کو بعد میں پکڑنے سے انہیں کسی چیز کے فراہم یا بھیجے جانے سے پہلے روکنے کی طرف جاتے ہیں۔
حصہ 8 ترسیل کی مشینری کو شروع سے آخر تک چلتا ہے: اس pipeline سے جو کوڈ کو ضم اور ریلیز کرتی ہے، اس کوڈ شدہ انفراسٹرکچر تک جس پر وہ چلتی ہے، اس کنٹینر پلیٹ فارم تک جو اسے میزبانی دیتا ہے، اس اندرونی پلیٹ فارم تک جو یہ سب عام ٹیموں کے لیے قابل استعمال بناتا ہے، اور اس خودکاری تک جو معیار اور کنٹرول کو پیمانے کے نیچے ڈھنے سے بچاتی ہے۔ مرکزی دھاگہ سادہ ہے۔ جو کچھ آپ بار بار اور قابل پیش گوئی طریقے سے کرتے ہیں اسے مدون کیا جانا چاہیے، تاکہ وہ مستقل، تیز، اور انسانی مشقت کے بغیر چلے۔
اس حصے کے ابواب
- 8.1 CI/CD اور ترسیل: وہ خودکار pipeline بنائیں جو ہر تبدیلی کو مشترک mainline میں ضم کرتی، ٹیسٹ کرتی، اور اسے ڈیپلائے کے قابل حالت میں رکھتی ہے، تاکہ ریلیز کرنا انجینئرنگ کی بھاگ دوڑ کی بجائے محفوظ کاروباری فیصلہ بنے، اور قابل آڈٹ بھی۔
- 8.2 کوڈ کی صورت میں انفراسٹرکچر اور کنفیگریشن: انفراسٹرکچر کو دستی کلکس کی بجائے ورژن شدہ، قابل ریویو، مشین سے پڑھی جانے والی تعریفوں سے متعین اور فراہم کریں، تاکہ ماحول مستقل، قابل تکرار، اور ڈسپوزیبل ہوں، اور نظم و نسق کے قواعد ان میں سمائے اور کسی چیز کے وجود میں آنے سے پہلے جانچے جائیں۔
- 8.3 کنٹینرز، آرکسٹریشن، اور کلاؤڈ نیٹو: ایپلیکیشنز اور ان کے انحصار کو پورٹیبل، الگ تھلگ اکائیوں میں پیک کریں اور انہیں Kubernetes جیسے آرکسٹریشن پلیٹ فارمز پر پیمانے پر چلائیں، جو بہت سی ٹیموں کو ڈیپلائمنٹ، پیمائش، اور لچک کے لیے مشترک بنیاد دیتے ہیں جبکہ آپ سلسلۂ ماخذ، تنہائی، اور لاگت کو منظم کرتے ہیں۔
- 8.4 پلیٹ فارم انجینئرنگ اور ڈویلپر تجربہ: اندرونی ڈویلپر پلیٹ فارم بنائیں اور چلائیں جو منتخب، خود خدمتی golden paths (رائے رکھنے والے، سہارا یافتہ راستے جن میں معقول ڈیفالٹس پہلے سے شامل ہیں) پیش کرے، مشترک پیچیدگی جذب کرتے ہوئے تاکہ ٹیمیں اپنے شعبے پر توجہ دیں جبکہ سیکیورٹی، قابل اعتمادی، اور تعمیل کے لیے ادارے کے معیارات بطور ڈیفالٹ وراثت میں پائیں۔
- 8.5 ٹیسٹ اور عمل کی خودکاری: بار بار کی دستی ٹیسٹنگ اور آپریشنل کام کو قابل اعتماد مشین سے چلنے والے ورک فلو سے بدلیں، مسلسل ٹیسٹ سویٹس سے runbooks، اصلاح، اور تعمیل کے ثبوت جمع کرنے تک، تاکہ معیار اور کنٹرول پیمانے پر چلیں اور ماہر انجینئر فیصلے کے متقاضی مسائل کے لیے آزاد ہوں۔
- 8.6 ریلیز مینجمنٹ اور بتدریج ترسیل: ڈیپلائے کو ریلیز سے جدا کرنا تاکہ کوڈ بھیجنا فیچر ظاہر کرنے سے الگ ہو، اور تبدیلیوں کو فیچر فلیگز، canary اور blue-green ڈیپلائمنٹس، خودکار صحت کی جانچ اور rollback، اور error-budget سے دروازہ بند ریلیزز کے ساتھ بتدریج جاری کرنا جو کسی بھی تبدیلی کے دھماکے کا دائرہ گھٹاتے ہیں۔
- 8.7 بلڈ سسٹمز اور آرٹیفیکٹ مینجمنٹ: بلڈ کو قابل تکرار، تیز، اور cache کے قابل بنانا، اور آرٹیفیکٹس کو ناقابل تغیر، ورژن شدہ، اور دستخط شدہ سمجھنا، ایک بار بنے اور سلسلۂ ماخذ اور سپلائی چین کی سالمیت کے ساتھ ماحول بھر ترقی پاتے ہوئے۔
یہ ابواب باہم کیسے جڑتے ہیں
یہ ابواب ایک ہی ترسیل کے نظام کی تہوں کو بیان کرتے ہیں، ہر ایک اپنے نیچے والی پر ٹکی۔ Continuous integration اور continuous delivery (CI/CD، باب 8.1) وہ جوڑنے والا ٹشو ہے جو تبدیلی کو کمٹ سے پروڈکشن تک لے جاتا ہے۔ لیکن pipeline کو ڈیپلائے کرنے کو کچھ چاہیے، اور infrastructure as code (8.2) وہ ہدف ہاتھ سے بنے snowflakes کی بجائے ورژن شدہ، قابل تکرار تعریفوں کے طور پر فراہم کرتا ہے۔ کنٹینرز اور آرکسٹریشن (8.3) وہ رن ٹائم بنیاد ہیں جسے pipeline اور کوڈ شدہ انفراسٹرکچر دونوں تیزی سے فرض کرتے ہیں، ہر ٹیم کو پیکنگ اور ڈیپلائمنٹ کا مستقل معاہدہ دیتے ہوئے۔ پلیٹ فارم انجینئرنگ (8.4) پھر یہ سب مربوط اندرونی پروڈکٹ میں لپیٹتی ہے، تاکہ عام ٹیمیں pipelines، انفراسٹرکچر، اور آرکسٹریشن کو شروع سے جوڑنے کی بجائے پکی سڑکوں سے استعمال کریں۔ ٹیسٹ اور عمل کی خودکاری (8.5) ہر تہہ میں چلتی ہے، pipeline میں معیار کے دروازے سموتی اور وہ آپریشنل اور تعمیل کا کام مدون کرتی ہے جو پوری ملکیت کو صحت مند رکھتا ہے۔ کسی بھی تہہ میں کمزوری اس کے اوپر والیوں کو کمزور کرتی ہے۔ نازک pipeline، snowflake ماحول، یا غیر منظم پلیٹ فارم ہر ایک ٹھیک وہی دستی خطرہ واپس لاتا ہے جسے ہٹانے کے لیے خودکاری ہے۔
یہ حصہ باہر بھی جڑتا ہے۔ یہاں کا ترسیل کا نظم و ضبط حصہ 11 کے بہاؤ اور ترسیل کی pipeline کی سوچ، خاص طور پر باب 11.2، کی انجینئرنگ تکمیل ہے، اور یہ انہی queueing حرکیات پر منحصر ہے جو کسی بھی زیادہ throughput والے نظام پر حکومت کرتی ہیں۔ ان ابواب کی بنائی چیزیں چلائے جانے کے لیے ہیں، اس لیے وہ براہ راست حصہ 9 میں آپریشنز اور قابل اعتمادی کی طرف لے جاتے ہیں (site reliability engineering باب 9.1 میں اور مشاہدہ پذیری باب 9.2 میں)، جو اس چلتے نظام کو دیکھتے ہیں جسے خودکاری ڈیپلائے کرتی ہے۔ حصہ 8 بھر نظم و نسق اور compliance-as-code کے موضوعات اس گائیڈ بک میں دوسری جگہ طے سیکیورٹی اور ضابطے کی پابندیاں پوری کرتے ہیں، اور یہاں بیان کیے پلیٹ فارم وہ جگہ بھی ہیں جہاں AI اور ڈیٹا کے کام بڑھتی تعداد میں چلتے ہیں، جو اس حصے کو حصہ 6 کی MLOps (machine learning operations) اور انفراسٹرکچر کی فکروں سے جوڑتا ہے۔ ساتھ پڑھیں تو یہ ابواب دکھاتے ہیں کہ بڑا ادارہ حفاظت، مستقل مزاجی، یا کنٹرول چھوڑے بغیر سافٹ ویئر کیسے تیزی سے بھیجتا ہے۔