آپ کے ایجنٹ نے پروڈکشن خراب نہیں کی۔ آپ کے پائپ لائن نے کی۔
آپ کے ایجنٹ نے پروڈکشن خراب نہیں کی۔ آپ کے پائپ لائن نے کی۔
بہت سی ٹیمیں pull requests کھولنے کے لیے ایجنٹس کا استعمال کرتی ہیں۔ وہ linting، tests اور builds چیک کرنے کے لیے CI کا استعمال کرتی ہیں۔ پھر، ایک شیڈول شدہ جاب کوڈ کو staging سے production میں منتقل کرتی ہے۔ یہ سیٹ اپ آخر کار ناکام ہو جاتا ہے۔
مسئلہ کوئی بدنیتی پر مبنی ایجنٹ نہیں ہے۔ مسئلہ ایک ناقص عمل ہے۔ آپ نے دو مختلف سوالات کو ایک ہی گیٹ (gate) میں سمو دیا ہے:
- کیا یہ CI سے گزر گیا؟
- کیا یہ اس وقت کسی انسان کے دیکھنے کے لیے محفوظ ہے؟
یہ دونوں ایک ہی چیز نہیں ہیں۔ CI یہ چیک کرتا ہے کہ کیا کوڈ کام کر رہا ہے۔ یہ یہ چیک نہیں کرتا کہ آیا کوئی فیچر صارفین کے لیے تیار ہے۔
اگر آپ کا پائپ لائن "merged" اور "live" کو ایک ہی چیز سمجھتا ہے، تو آپ کو ایک مسئلہ درپیش ہے۔ آپ نے فیصلہ کیے بغیر ہی continuous deployment کا راستہ اختیار کر لیا ہے۔
آپ کو ان دو واقعات کو الگ الگ (decouple) کرنا ہوگا۔
آپ ایسا کرنے کے لیے feature flags کا استعمال کر سکتے ہیں۔ Feature flags محض ایک boolean اور ایک if سٹیٹمنٹ ہیں۔ شروع کرنے کے لیے آپ کو مہنگے ٹولز کی ضرورت نہیں ہے۔ ایک سادہ config value یا environment variable کافی ہے۔
میرا سیٹ اپ ان اصولوں پر عمل کرتا ہے:
- PRs main میں merge ہوتے ہیں، لیکن main وہ نہیں ہے جو لائیو رہتا ہے۔
- ایک الگ release step main کو production branch میں پروموٹ کرتا ہے۔
- مجھے واضح طور پر "go" کہنا ہوگا۔ کوئی cron jobs یا timers نہیں۔
- Release اس وقت تک انتظار کرتی ہے جب تک build ٹریفک فراہم کرنے کے قابل نہ ہو جائے۔
- ایک خودکار چیک (automated check) اہم endpoints کو ہٹ کرتا ہے تاکہ تصدیق کی جا سکے کہ سائٹ کام کر رہی ہے۔
- ایک انسان تبدیلیوں کا آخری دستی چیک (manual check) کرتا ہے۔
یہ ایک گیٹ (gate) تخلیق کرتا ہے۔ کسی صارف کے کچھ دیکھنے سے پہلے ایک انسان، ایک مشین، اور ایک اور انسان، سب کو "نا" کہنے کا موقع ملتا ہے۔
اگر کوئی bug پھر بھی صارف تک پہنچ جائے، تو آپ کو تیزی سے revert کرنے کی ضرورت ہے۔ ایسا کرنے کے لیے، database migrations کے لیے "expand and contract" پیٹرن پر عمل کریں۔
- ایک نیا کالم nullable کے طور پر شامل کریں۔
- ڈیٹا backfill کریں۔
- پرانے اور نئے دونوں کالموں میں لکھیں۔
- نئے کالم سے پڑھیں۔
- پرانا کالم صرف بعد کی ریلیز میں drop کریں۔
اگر آپ اسے چھوڑ دیتے ہیں، تو آپ کا revert بٹن بیکار ہے۔ اگر کوئی migration ایسا کالم ختم کر دے جس کی پرانے کوڈ کو ضرورت ہے، تو آپ roll back نہیں کر سکتے۔ آپ کا سسٹم خراب ہی رہے گا۔
ایک ایجنٹ ان غلطیوں کو مزید تیز کر دیتا ہے۔ یہ اس دستی رکاوٹ (manual friction) کو ختم کر دیتا ہے جو آپ کے ناقص عمل کو چھپاتی تھی۔ جس نظم و ضبط (discipline) کو آپ نے نظر انداز کیا وہ کبھی اختیاری نہیں تھا۔ وہ صرف اس لیے چھپا ہوا تھا کہ کوئی انسان جمعہ کے دن شام 5:00 بجے سے پہلے غلطی کو پکڑ لیتا تھا۔
انسانی مداخلت (human in the loop) کو ختم کر دیں، اور نظم و ضبط لازمی ہو جائے گا۔
Source: https://dev.to/mattstratton/your-agent-didnt-break-prod-your-pipeline-did-4g9o
