لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

ہم نے ڈی او اوپس کو بہترین طریقے سے تیار کیا۔ ہم میں سے 8 تھے، اور واسیا ونڈوز میں بہترین تھا۔ اچانک واسیا چلا گیا، اور میرے پاس ایک نیا پروجیکٹ شروع کرنے کا کام تھا جو ونڈوز ڈویلپمنٹ کے ذریعہ فراہم کیا گیا تھا۔ جب میں نے ونڈوز کے پورے ڈویلپمنٹ اسٹیک کو میز پر پھینک دیا، تو مجھے احساس ہوا کہ صورتحال ایک تکلیف دہ تھی...

اس طرح کہانی شروع ہوتی ہے۔ الیگزینڈرا سنچینووا پر DevOpsConf. جب ونڈوز کے معروف ماہر نے کمپنی چھوڑ دی تو الیگزینڈر نے سوچا کہ اب کیا کیا جائے۔ لینکس پر سوئچ کریں، یقینا! الیگزینڈر آپ کو بتائے گا کہ اس نے 100 اختتامی صارفین کے لیے ایک مکمل پروجیکٹ کی مثال کا استعمال کرتے ہوئے ونڈوز ڈیولپمنٹ کے ایک حصے کو لینکس میں منتقل کرنے میں کس طرح کامیابی حاصل کی۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

TFS، Puppet، Linux .NET کور کا استعمال کرتے ہوئے آسانی سے اور آسانی سے RPM پر پروجیکٹ کیسے پہنچایا جائے؟ اگر ڈیولپمنٹ ٹیم پہلی بار پوسٹگریس اور فلائی وے کے الفاظ سنتی ہے، اور آخری تاریخ پرسوں ہے تو پروجیکٹ ڈیٹا بیس کی ورژننگ کی حمایت کیسے کی جائے؟ ڈوکر کے ساتھ کیسے ضم کیا جائے؟ .NET ڈویلپرز کو پپٹ اور لینکس کے حق میں ونڈوز اور اسموتھیز کو ترک کرنے کی ترغیب کیسے دی جائے؟ نظریاتی تنازعات کو کیسے حل کیا جائے اگر ونڈوز کو پیداوار میں برقرار رکھنے کے لیے نہ طاقت، نہ خواہش، نہ وسائل ہوں؟ اس کے بارے میں، نیز ویب کی تعیناتی، ٹیسٹنگ، CI کے بارے میں، موجودہ منصوبوں میں TFS کے استعمال کے طریقوں کے بارے میں، اور یقیناً، ٹوٹی ہوئی بیساکھیوں اور کام کے حل کے بارے میں، الیگزینڈر کی رپورٹ کی نقل میں۔


تو، Vasya چھوڑ دیا، کام مجھ پر ہے، ڈویلپرز pitchforks کے ساتھ بے صبری سے انتظار کر رہے ہیں. جب میں نے آخر کار محسوس کیا کہ واسیا کو واپس نہیں کیا جا سکتا تو میں کاروبار پر اتر آیا۔ شروع کرنے کے لیے، میں نے اپنے بیڑے میں Win VMs کے فیصد کا اندازہ کیا۔ سکور ونڈوز کے حق میں نہیں تھا۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

چونکہ ہم فعال طور پر DevOps تیار کر رہے ہیں، میں نے محسوس کیا کہ نئی ایپلیکیشن کی فراہمی کے نقطہ نظر میں کچھ تبدیل کرنے کی ضرورت ہے۔ اس کا ایک ہی حل تھا - اگر ممکن ہو تو سب کچھ لینکس میں منتقل کر دیں۔ گوگل نے میری مدد کی - اس وقت .Net پہلے ہی لینکس پر پورٹ ہو چکا تھا، اور میں نے محسوس کیا کہ یہی حل تھا!

لینکس کے ساتھ مل کر .NET کور کیوں؟

اس کی کئی وجوہات تھیں۔ "پیسے ادا کریں" اور "ادا نہ کریں" کے درمیان، اکثریت دوسرے کا انتخاب کرے گی - میری طرح۔ MSDB کے لائسنس کی قیمت تقریباً $1 ہے؛ ونڈوز ورچوئل مشینوں کے بیڑے کو برقرار رکھنے میں سینکڑوں ڈالر خرچ ہوتے ہیں۔ ایک بڑی کمپنی کے لیے یہ ایک بڑا خرچ ہے۔ اس لیے بچت - پہلی وجہ. سب سے اہم نہیں، لیکن اہم میں سے ایک۔

ونڈوز ورچوئل مشینیں اپنے لینکس بھائیوں سے زیادہ وسائل استعمال کرتی ہیں۔ وہ بھاری ہیں. بڑی کمپنی کے پیمانے کو دیکھتے ہوئے، ہم نے لینکس کا انتخاب کیا۔

سسٹم کو آسانی سے موجودہ CI میں ضم کیا گیا ہے۔. ہم خود کو ترقی پسند DevOps سمجھتے ہیں، ہم Bamboo، Jenkins اور GitLab CI استعمال کرتے ہیں، اس لیے ہمارا زیادہ تر کام لینکس پر چلتا ہے۔

آخری وجہ یہ ہے۔ آسان ساتھ. ہمیں "ایسکارٹس" کے لیے داخلے کی رکاوٹ کو کم کرنے کی ضرورت تھی - وہ لوگ جو تکنیکی حصے کو سمجھتے ہیں، بلاتعطل سروس کو یقینی بناتے ہیں، اور دوسری لائن سے خدمات کو برقرار رکھتے ہیں۔ وہ پہلے سے ہی لینکس اسٹیک سے واقف تھے، اس لیے ان کے لیے ونڈوز پلیٹ فارم کے لیے سافٹ ویئر کی اسی فعالیت کو سمجھنے کے لیے اضافی وسائل خرچ کرنے کے بجائے نئی پروڈکٹ کو سمجھنا، سپورٹ کرنا اور اسے برقرار رکھنا بہت آسان ہے۔

کے تقاضے

اولین اور اہم ترین - ڈویلپرز کے لیے نئے حل کی سہولت. ان میں سے سبھی تبدیلی کے لیے تیار نہیں تھے، خاص طور پر لفظ لینکس کے بولے جانے کے بعد۔ ڈویلپرز اپنے پسندیدہ ویژول اسٹوڈیو، TFS کو اسمبلیوں اور ہمواریوں کے لیے آٹو ٹیسٹ کے ساتھ چاہتے ہیں۔ پیداوار کی ترسیل کیسے ہوتی ہے یہ ان کے لیے اہم نہیں ہے۔ لہذا، ہم نے معمول کے عمل کو تبدیل نہ کرنے اور ونڈوز کی ترقی کے لیے ہر چیز کو غیر تبدیل کرنے کا فیصلہ کیا۔

نئے پروجیکٹ کی ضرورت ہے۔ موجودہ CI میں ضم کریں۔. ریل پہلے سے موجود تھے اور تمام کام کنفیگریشن مینجمنٹ سسٹم کے پیرامیٹرز، قبول شدہ ترسیل کے معیارات اور نگرانی کے نظام کو مدنظر رکھتے ہوئے کرنا تھا۔

مدد اور آپریشن میں آسانیمختلف ڈویژنوں اور سپورٹ ڈیپارٹمنٹ کے تمام نئے شرکاء کے لیے کم از کم داخلے کی حد کے لیے شرط کے طور پر۔

آخری تاریخ - کل.

ون ڈویلپمنٹ گروپ

اس وقت ونڈوز ٹیم کس چیز کے ساتھ کام کر رہی تھی؟

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

اب میں یقین سے کہہ سکتا ہوں۔ IdentityServer4 اسی طرح کی صلاحیتوں کے ساتھ ADFS کا ایک ٹھنڈا مفت متبادل ہے۔ ہستی کا فریم ورک کور - ایک ڈویلپر کے لیے جنت، جہاں آپ کو ایس کیو ایل اسکرپٹ لکھنے کی زحمت نہیں اٹھانی پڑتی ہے، لیکن ڈیٹا بیس میں سوالات کو OOP کی شرائط میں بیان کرنا ہے۔ لیکن پھر، ایکشن پلان کی بحث کے دوران، میں نے اس اسٹیک کو اس طرح دیکھا جیسے یہ Sumerian cuneiform ہے، صرف PostgreSQL اور Git کو پہچانتا ہے۔

اس وقت ہم فعال طور پر استعمال کر رہے تھے۔ کٹھ پتلی کنفیگریشن مینجمنٹ سسٹم کے طور پر۔ ہمارے زیادہ تر منصوبوں میں ہم نے استعمال کیا۔ گٹ لیب سی آئی, لچکدار, متوازن ہائی لوڈ خدمات کا استعمال کرتے ہوئے HAProxy کے ساتھ ہر چیز کی نگرانی کی۔ زبیبس, ligaments گرافانا и Prometheus, آپکی ؤنیاور یہ سب لوہے کے ٹکڑوں پر گھوم رہا تھا۔ HPای ایس ایکس آئی پر VMware. ہر کوئی اسے جانتا ہے - سٹائل کا ایک کلاسک.

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

آئیے دیکھتے ہیں اور یہ سمجھنے کی کوشش کرتے ہیں کہ ان تمام مداخلتوں کو شروع کرنے سے پہلے کیا ہوا تھا۔

کیا ہوا

TFS ایک کافی طاقتور نظام ہے جو نہ صرف ڈیولپر سے حتمی پروڈکشن مشین تک کوڈ فراہم کرتا ہے، بلکہ مختلف خدمات کے ساتھ بہت لچکدار انضمام کے لیے ایک سیٹ بھی رکھتا ہے - کراس پلیٹ فارم کی سطح پر CI فراہم کرنے کے لیے۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps
پہلے یہ ٹھوس کھڑکیاں تھیں۔ TFS نے کئی بلڈ ایجنٹس کا استعمال کیا، جو بہت سے پروجیکٹس کو اسمبل کرنے کے لیے استعمال کیے گئے تھے۔ ہر ایجنٹ کے پاس کاموں کو متوازی بنانے اور عمل کو بہتر بنانے کے لیے 3-4 کارکن ہوتے ہیں۔ پھر، ریلیز کے منصوبوں کے مطابق، TFS نے تازہ پکی ہوئی بلڈ کو ونڈوز ایپلیکیشن سرور پر پہنچا دیا۔

ہم کیا حاصل کرنا چاہتے تھے؟

ہم ترسیل اور ترقی کے لیے TFS کا استعمال کرتے ہیں، اور ایپلیکیشن کو لینکس ایپلیکیشن سرور پر چلاتے ہیں، اور ان کے درمیان ایک قسم کا جادو ہے۔ یہ جادو باکس اور آگے کام کا نمک ہے۔ اس سے پہلے کہ میں اسے الگ کروں، میں ایک قدم ایک طرف رکھوں گا اور درخواست کے بارے میں کچھ الفاظ کہوں گا۔

پروجیکٹ

ایپلیکیشن پری پیڈ کارڈز کو سنبھالنے کے لیے فعالیت فراہم کرتی ہے۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

کلائنٹ

صارفین کی دو قسمیں تھیں۔ پہلا SSL SHA-2 سرٹیفکیٹ کا استعمال کرتے ہوئے لاگ ان کرکے رسائی حاصل کی۔ یو دوسرا حصہ لاگ ان اور پاس ورڈ کا استعمال کرتے ہوئے رسائی تھی۔

HAPROxy

پھر کلائنٹ کی درخواست HAProxy کے پاس گئی، جس نے درج ذیل مسائل کو حل کیا:

  • بنیادی اجازت؛
  • SSL ختم کرنا؛
  • ٹیوننگ HTTP درخواستوں؛
  • نشریات کی درخواستیں

کلائنٹ کے سرٹیفکیٹ کی چین کے ساتھ تصدیق کی گئی۔ ہم - اتھارٹی اور ہم اسے برداشت کر سکتے ہیں، کیونکہ ہم خود سروس کلائنٹس کو سرٹیفکیٹ جاری کرتے ہیں۔

تیسرے نکتے پر توجہ دیں، ہم تھوڑی دیر بعد اس کی طرف لوٹیں گے۔

پسدید

انہوں نے لینکس پر بیک اینڈ بنانے کا منصوبہ بنایا۔ بیک اینڈ ڈیٹا بیس کے ساتھ تعامل کرتا ہے، مراعات کی ضروری فہرست لوڈ کرتا ہے اور پھر، مجاز صارف کے پاس کون سے مراعات ہیں، اس پر انحصار کرتے ہوئے، مالیاتی دستاویزات پر دستخط کرنے اور انہیں عمل درآمد کے لیے بھیجنے، یا کسی قسم کی رپورٹ تیار کرنے تک رسائی فراہم کرتا ہے۔

HAProxy کے ساتھ بچت

ان دو سیاق و سباق کے علاوہ جن پر ہر کلائنٹ نیویگیٹ کرتا تھا، ایک شناختی سیاق و سباق بھی تھا۔ IdentityServer4 صرف آپ کو لاگ ان کرنے کی اجازت دیتا ہے، یہ اس کے لیے ایک مفت اور طاقتور اینالاگ ہے۔ ADFS - ایکٹو ڈائریکٹری فیڈریشن سروسز.

شناخت کی درخواست پر کئی مراحل میں کارروائی کی گئی۔ پہلا قدم - مؤکل پس منظر میں آیاجس نے اس سرور کے ساتھ بات چیت کی اور کلائنٹ کے لیے ٹوکن کی موجودگی کی جانچ کی۔ اگر یہ نہیں ملا تو، درخواست کو واپس اس سیاق و سباق میں واپس کر دیا گیا جہاں سے یہ آیا تھا، لیکن ایک ری ڈائریکٹ کے ساتھ، اور ری ڈائریکٹ کے ساتھ یہ شناخت پر چلا گیا۔

دوسرا مرحلہ - درخواست موصول ہوئی۔ IdentityServer میں اجازت کے صفحے پر، جہاں کلائنٹ رجسٹر ہوا، اور وہ طویل انتظار کا ٹوکن IdentityServer ڈیٹا بیس میں ظاہر ہوا۔

تیسرا مرحلہ - کلائنٹ کو واپس بھیج دیا گیا تھا۔ جس سیاق و سباق سے یہ آیا ہے۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

IdentityServer4 میں ایک خصوصیت ہے: یہ HTTP کے ذریعے واپسی کی درخواست کا جواب واپس کرتا ہے۔. اس سے کوئی فرق نہیں پڑتا ہے کہ سرور کو ترتیب دینے میں ہم نے کتنی ہی جدوجہد کی ہے، چاہے ہم نے دستاویزات سے خود کو کتنا روشن کیا ہو، ہر بار جب ہمیں HTTPS کے ذریعے آنے والے URL کے ساتھ ایک ابتدائی کلائنٹ کی درخواست موصول ہوئی، اور IdentityServer نے وہی سیاق و سباق واپس کیا، لیکن HTTP کے ساتھ۔ ہم چونک گئے! اور ہم نے یہ سب شناختی سیاق و سباق کے ذریعے HAProxy میں منتقل کیا، اور ہیڈر میں ہمیں HTTP پروٹوکول کو HTTPS میں تبدیل کرنا تھا۔

بہتری کیا ہے اور کہاں بچائی؟

ہم نے صارفین، وسائل کے ایک گروپ کو اجازت دینے کے لیے ایک مفت حل استعمال کر کے پیسے بچائے، کیونکہ ہم نے IdentityServer4 کو علیحدہ نوڈ کے طور پر ایک الگ سیگمنٹ میں نہیں رکھا، بلکہ بیک اینڈ کے ساتھ اسی سرور پر استعمال کیا جہاں ایپلیکیشن کا بیک اینڈ چلتا ہے۔ .

اسے کیسے کام کرنا چاہئے۔

لہذا، جیسا کہ میں نے وعدہ کیا تھا - جادو باکس. ہم پہلے ہی سمجھ چکے ہیں کہ ہمیں لینکس کی طرف بڑھنے کی ضمانت ہے۔ آئیے مخصوص کاموں کو تشکیل دیں جن کے حل کی ضرورت ہے۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

کٹھ پتلی ظاہر کرتا ہے۔ سروس اور ایپلیکیشن کنفیگریشن کی فراہمی اور انتظام کرنے کے لیے ٹھنڈی ترکیبیں لکھنی پڑتی تھیں۔ پنسل کا ایک رول فصاحت سے ظاہر کرتا ہے کہ یہ کتنی جلدی اور مؤثر طریقے سے کیا گیا تھا۔

ترسیل کا طریقہ۔ معیار RPM ہے۔ ہر کوئی سمجھتا ہے کہ لینکس میں آپ اس کے بغیر نہیں کر سکتے، لیکن پروجیکٹ خود، اسمبلی کے بعد، قابل عمل DLL فائلوں کا ایک سیٹ تھا۔ ان میں سے تقریباً 150 تھے، یہ منصوبہ کافی مشکل تھا۔ واحد ہم آہنگ حل یہ ہے کہ اس بائنری کو RPM میں پیک کیا جائے اور اس سے ایپلیکیشن کو تعینات کیا جائے۔

ورژننگ ہمیں اکثر ریلیز کرنا پڑتا تھا، اور ہمیں فیصلہ کرنا پڑتا تھا کہ پیکیج کا نام کیسے بنایا جائے۔ یہ TFS کے ساتھ انضمام کی سطح کا سوال ہے۔ ہمارے پاس لینکس پر ایک بلڈ ایجنٹ تھا۔ جب TFS ایک ہینڈلر - ورکر - کو بلڈ ایجنٹ کو کام بھیجتا ہے، تو یہ اسے متغیرات کا ایک گروپ بھی دیتا ہے جو ہینڈلر کے عمل کے ماحول میں ختم ہوتا ہے۔ یہ ماحولیاتی متغیرات میں تعمیر کا نام، ورژن کا نام، اور دیگر متغیرات شامل ہیں۔ اس کے بارے میں "آر پی ایم پیکج بنانا" سیکشن میں مزید پڑھیں۔

TFS ترتیب دینا پائپ لائن لگانے پر اتر آئے۔ پہلے، ہم نے ونڈوز کے تمام پروجیکٹس کو ونڈوز ایجنٹس پر اکٹھا کیا تھا، لیکن اب ایک لینکس ایجنٹ نمودار ہوتا ہے - ایک بلڈ ایجنٹ، جسے بلڈ گروپ میں شامل کرنے کی ضرورت ہے، کچھ نمونے کے ساتھ افزودہ، اور بتایا کہ اس بلڈ ایجنٹ پر کس قسم کے پروجیکٹ بنائے جائیں گے۔ ، اور کسی نہ کسی طرح پائپ لائن میں ترمیم کریں۔

شناختی سرور۔ ADFS ہمارا طریقہ نہیں ہے، ہم اوپن سورس کے لیے جا رہے ہیں۔

آئیے اجزاء کے ذریعے چلتے ہیں۔

جادو باکس

چار حصوں پر مشتمل ہے۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

لینکس بلڈ ایجنٹ۔ لینکس، کیونکہ ہم اس کے لیے بناتے ہیں - یہ منطقی ہے۔ یہ حصہ تین مراحل میں کیا گیا تھا۔

  • کارکنوں کو ترتیب دیں۔ اور اکیلے نہیں، کیونکہ منصوبے پر تقسیم شدہ کام متوقع تھا۔
  • .NET کور 1.x انسٹال کریں۔. کیوں 1.x جب 2.0 پہلے سے ہی معیاری ذخیرہ میں دستیاب ہے؟ کیونکہ جب ہم نے ترقی شروع کی تو اس کا مستحکم ورژن 1.09 تھا، اور اس کی بنیاد پر پروجیکٹ بنانے کا فیصلہ کیا گیا۔
  • گٹ 2.x.

RPM-ریپوزٹری۔ RPM پیکجوں کو کہیں ذخیرہ کرنے کی ضرورت ہے۔ یہ فرض کیا گیا تھا کہ ہم وہی کارپوریٹ RPM ذخیرہ استعمال کریں گے جو لینکس کے تمام میزبانوں کے لیے دستیاب ہے۔ انہوں نے یہی کیا۔ ریپوزٹری سرور ترتیب دیا گیا ہے۔ ویب ہک جس نے مطلوبہ RPM پیکیج کو مخصوص جگہ سے ڈاؤن لوڈ کیا۔ پیکج ورژن کی اطلاع بلڈ ایجنٹ کے ذریعہ ویب ہک کو دی گئی۔

گٹ لیب۔ توجہ! GitLab یہاں ڈویلپرز کے ذریعہ استعمال نہیں کیا جاتا ہے، بلکہ آپریشنز ڈیپارٹمنٹ کے ذریعہ ایپلیکیشن ورژن، پیکیج ورژن کو کنٹرول کرنے، تمام لینکس مشینوں کی حیثیت کی نگرانی کے لئے استعمال کیا جاتا ہے، اور یہ نسخہ ذخیرہ کرتا ہے - تمام Puppet ظاہر ہوتا ہے۔

کٹھ پتلی - تمام متنازعہ مسائل کو حل کرتا ہے اور بالکل وہی ترتیب فراہم کرتا ہے جو ہم Gitlab سے چاہتے ہیں۔

ہم غوطہ لگانا شروع کر دیتے ہیں۔ RPM میں DLL کی ترسیل کیسے کام کرتی ہے؟

ڈی ڈی ایل کو RPM پر پہنچانا

ہم کہتے ہیں کہ ہمارے پاس .NET ڈویلپمنٹ راک اسٹار ہے۔ یہ بصری اسٹوڈیو کا استعمال کرتا ہے اور ایک ریلیز برانچ بناتا ہے۔ اس کے بعد، یہ اسے Git پر اپ لوڈ کرتا ہے، اور Git یہاں ایک TFS ادارہ ہے، یعنی یہ ایپلی کیشن کا ذخیرہ ہے جس کے ساتھ ڈویلپر کام کرتا ہے۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

جس کے بعد TFS دیکھتا ہے کہ ایک نیا عہد آیا ہے۔ کون سی ایپ؟ TFS سیٹنگز میں ایک لیبل ہے جو بتاتا ہے کہ کسی خاص بلڈ ایجنٹ کے پاس کون سے وسائل ہیں۔ اس صورت میں، وہ دیکھتا ہے کہ ہم ایک .NET کور پروجیکٹ بنا رہے ہیں اور پول سے لینکس بلڈ ایجنٹ کو منتخب کرتا ہے۔

بلڈ ایجنٹ ذرائع حاصل کرتا ہے اور ضروری ڈاؤن لوڈ کرتا ہے۔ انحصار NET ریپوزٹری، npm، وغیرہ سے۔ اور ایپلیکیشن خود بنانے اور بعد میں پیکیجنگ کے بعد، RPM پیکج کو RPM ذخیرہ میں بھیجتا ہے۔

دوسری طرف، مندرجہ ذیل ہوتا ہے. آپریشنز ڈیپارٹمنٹ انجینئر براہ راست پروجیکٹ کے رول آؤٹ میں شامل ہے: وہ پیکجوں کے ورژن کو تبدیل کرتا ہے۔ ہیرا ذخیرہ میں جہاں درخواست کی ترکیب محفوظ کی جاتی ہے، جس کے بعد پپیٹ متحرک ہوتا ہے۔ یم, repository سے نیا پیکج لاتا ہے، اور ایپلیکیشن کا نیا ورژن استعمال کے لیے تیار ہے۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

الفاظ میں سب کچھ آسان ہے، لیکن خود بلڈ ایجنٹ کے اندر کیا ہوتا ہے؟

پیکیجنگ DLL RPM

TFS سے پروجیکٹ کے ذرائع اور تعمیراتی کام موصول ہوئے۔ ایجنٹ بنائیں ذرائع سے خود پروجیکٹ کی تعمیر شروع کرتا ہے۔. جمع شدہ پروجیکٹ ایک سیٹ کے طور پر دستیاب ہے۔ DLL فائلیں۔جو فائل سسٹم پر بوجھ کو کم کرنے کے لیے زپ آرکائیو میں پیک کیا جاتا ہے۔

زپ آرکائیو کو پھینک دیا گیا ہے۔ RPM پیکیج بلڈ ڈائرکٹری میں۔ اگلا، باش اسکرپٹ ماحولیاتی متغیرات کو شروع کرتا ہے، بلڈ ورژن، پروجیکٹ ورژن، بلڈ ڈائرکٹری کا راستہ تلاش کرتا ہے، اور RPM-build چلاتا ہے۔ تعمیر مکمل ہونے کے بعد، پیکج کو شائع کیا جاتا ہے مقامی ذخیرہ، جو بلڈ ایجنٹ پر واقع ہے۔

اگلا، بلڈ ایجنٹ سے لے کر RPM ریپوزٹری میں سرور تک JSON کی درخواست بھیجی گئی ہے۔ ورژن اور تعمیر کے نام کی نشاندہی کرنا۔ ویب ہُک، جس کے بارے میں میں نے پہلے بات کی تھی، یہ بہت ہی پیکیج بلڈ ایجنٹ پر مقامی ریپوزٹری سے ڈاؤن لوڈ کرتا ہے اور نئی اسمبلی کو انسٹالیشن کے لیے دستیاب کرتا ہے۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

یہ مخصوص پیکج ڈیلیوری اسکیم RPM ذخیرہ میں کیوں؟ میں جمع شدہ پیکج کو فوری طور پر ذخیرہ میں کیوں نہیں بھیج سکتا؟ حقیقت یہ ہے کہ یہ حفاظت کو یقینی بنانے کی شرط ہے۔ یہ منظر نامے غیر مجاز لوگوں کے RPM پیکجوں کو سرور پر اپ لوڈ کرنے کے امکان کو محدود کرتا ہے جو تمام لینکس مشینوں کے لیے قابل رسائی ہے۔

ڈیٹا بیس ورژننگ

ڈویلپمنٹ ٹیم کے ساتھ مشاورت میں، یہ پتہ چلا کہ لڑکے MS SQL کے قریب تھے، لیکن زیادہ تر غیر ونڈوز پروجیکٹس میں ہم پہلے ہی اپنی پوری طاقت کے ساتھ PostgreSQL استعمال کر رہے تھے۔ چونکہ ہم نے پہلے ہی ادائیگی کی ہر چیز کو ترک کرنے کا فیصلہ کر لیا تھا، اس لیے ہم نے یہاں بھی PostgreSQL استعمال کرنا شروع کر دیا۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

اس حصے میں میں آپ کو بتانا چاہتا ہوں کہ ہم نے کس طرح ڈیٹا بیس کو ورژن بنایا اور ہم نے فلائی وے اور اینٹٹی فریم ورک کور کے درمیان کیسے انتخاب کیا۔ آئیے ان کے فوائد اور نقصانات کو دیکھیں۔

Cons

فلائی وے صرف ایک طرف جاتا ہے، ہم ہم پیچھے نہیں ہٹ سکتے - یہ ایک اہم نقصان ہے۔ آپ اس کا موازنہ دوسرے طریقوں سے entity Framework Core کے ساتھ کر سکتے ہیں - ڈویلپر کی سہولت کے لحاظ سے۔ آپ کو یاد ہے کہ ہم اسے سب سے آگے رکھتے ہیں، اور بنیادی معیار یہ تھا کہ ونڈوز کی ترقی کے لیے کچھ بھی تبدیل نہ کیا جائے۔

فلائی وے ہمارے لیے کسی قسم کی چادر کی ضرورت تھی۔تاکہ لڑکے نہ لکھیں۔ ایس کیو ایل کے سوالات. وہ OOP کی شرائط میں کام کرنے کے بہت قریب ہیں۔ ہم نے ڈیٹا بیس آبجیکٹ کے ساتھ کام کرنے کے لیے ہدایات لکھیں، ایک ایس کیو ایل استفسار بنایا اور اس پر عمل درآمد کیا۔ ڈیٹا بیس کا نیا ورژن تیار ہے، تجربہ کیا گیا ہے - سب کچھ ٹھیک ہے، سب کچھ کام کرتا ہے۔

ہستی فریم ورک کور میں ایک مائنس ہے - اس پر بھاری بوجھ ہے۔ suboptimal SQL سوالات بناتا ہے۔، اور ڈیٹا بیس میں کمی اہم ہوسکتی ہے۔ لیکن چونکہ ہمارے پاس زیادہ لوڈ والی سروس نہیں ہے، اس لیے ہم سینکڑوں آر پی ایس میں لوڈ کا حساب نہیں لگاتے، ہم نے ان خطرات کو قبول کیا اور مسئلہ کو مستقبل کے حوالے کر دیا۔

پیشہ

ہستی کا فریم ورک کور باکس سے باہر کام کرتا ہے اور تیار کرنا آسان ہے۔، اور فلائی وے موجودہ CI میں آسانی سے ضم ہوجاتا ہے۔. لیکن ہم اسے ڈویلپرز کے لیے آسان بناتے ہیں :)

رول اپ کا طریقہ کار

کٹھ پتلی دیکھتا ہے کہ پیکیج ورژن میں تبدیلی آرہی ہے، بشمول وہ جو کہ نقل مکانی کا ذمہ دار ہے۔ سب سے پہلے، یہ ایک پیکیج انسٹال کرتا ہے جس میں ہجرت کے اسکرپٹ اور ڈیٹا بیس سے متعلق فعالیت ہوتی ہے۔ اس کے بعد، وہ ایپلیکیشن جو ڈیٹا بیس کے ساتھ کام کرتی ہے دوبارہ شروع ہو جاتی ہے۔ اگلا باقی اجزاء کی تنصیب آتا ہے. جس ترتیب میں پیکجز انسٹال کیے جاتے ہیں اور ایپلیکیشنز لانچ کیے جاتے ہیں اس کی وضاحت پپٹ مینی فیسٹ میں کی گئی ہے۔

ایپلی کیشنز حساس ڈیٹا کا استعمال کرتی ہیں، جیسے کہ ٹوکن، ڈیٹا بیس پاس ورڈ، یہ سب کچھ Puppet master سے کنفیگریشن میں کھینچا جاتا ہے، جہاں وہ انکرپٹڈ شکل میں محفوظ ہوتے ہیں۔

TFS کے مسائل

جب ہم نے فیصلہ کیا اور یہ محسوس کیا کہ سب کچھ واقعی ہمارے لئے کام کر رہا ہے، میں نے یہ دیکھنے کا فیصلہ کیا کہ TFS میں مجموعی طور پر دیگر منصوبوں پر Win ڈویلپمنٹ ڈیپارٹمنٹ کے لئے اسمبلیوں کے ساتھ کیا ہو رہا ہے - چاہے ہم تیزی سے تعمیر کر رہے ہوں یا نہیں، اور رفتار کے ساتھ اہم مسائل دریافت ہوئے۔

اہم منصوبوں میں سے ایک کو جمع ہونے میں 12-15 منٹ لگتے ہیں - یہ ایک طویل وقت ہے، آپ اس طرح نہیں رہ سکتے۔ ایک فوری تجزیہ نے I/O میں خوفناک کمی ظاہر کی، اور یہ صفوں پر تھا۔

جزو کے لحاظ سے اس کا تجزیہ کرنے کے بعد، میں نے تین فوکی کی نشاندہی کی۔ پہلا - "کاسپرسکی اینٹی وائرس"، جو تمام ونڈوز بلڈ ایجنٹوں کے ذرائع کو اسکین کرتا ہے۔ دوسرا - ونڈوز اشاریہ ساز۔ اسے غیر فعال نہیں کیا گیا تھا، اور تعیناتی کے عمل کے دوران ہر چیز کو بلڈ ایجنٹس پر حقیقی وقت میں ترتیب دیا گیا تھا۔

تیسرے - این پی ایم انسٹال کریں۔ یہ پتہ چلا کہ زیادہ تر پائپ لائنوں میں ہم نے اس عین مطابق منظر نامے کو استعمال کیا۔ وہ برا کیوں ہے؟ این پی ایم انسٹال کا طریقہ کار اس وقت چلایا جاتا ہے جب انحصار کا درخت بنتا ہے۔ پیکیج-تالا.جن، جہاں پیکجوں کے ورژن جو پروجیکٹ بنانے کے لیے استعمال کیے جائیں گے ریکارڈ کیے جاتے ہیں۔ منفی پہلو یہ ہے کہ Npm انسٹال ہر بار انٹرنیٹ سے پیکجز کے تازہ ترین ورژنز کو کھینچتا ہے، اور بڑے پروجیکٹ کی صورت میں اس میں کافی وقت لگتا ہے۔

ڈویلپر بعض اوقات مقامی مشین پر یہ جانچنے کے لیے تجربہ کرتے ہیں کہ کوئی خاص حصہ یا پورا پروجیکٹ کیسے کام کرتا ہے۔ کبھی کبھی یہ پتہ چلا کہ سب کچھ مقامی طور پر ٹھنڈا تھا، لیکن انہوں نے اسے جمع کیا، اسے باہر نکال دیا، اور کچھ بھی کام نہیں کیا. ہم یہ جاننا شروع کر دیتے ہیں کہ مسئلہ کیا ہے - ہاں، انحصار کے ساتھ پیکجوں کے مختلف ورژن۔

حل

  • AV مستثنیات میں ذرائع۔
  • انڈیکسنگ کو غیر فعال کریں۔
  • کے پاس جاؤ npm ci.

npm ci کے فوائد یہ ہیں کہ ہم ہم انحصار درخت کو ایک بار جمع کرتے ہیں۔، اور ہمیں ڈویلپر فراہم کرنے کا موقع ملتا ہے۔ پیکجوں کی موجودہ فہرست، جس کے ساتھ وہ مقامی طور پر جتنا چاہے تجربہ کرسکتا ہے۔ یہ وقت بچاتا ہے ڈویلپر جو کوڈ لکھتے ہیں۔

تشکیل

اب تھوڑا سا ذخیرہ کنفیگریشن کے بارے میں۔ تاریخی طور پر ہم استعمال کرتے ہیں۔ گٹھ جوڑ ذخیروں کے انتظام کے لیے، بشمول اندرونی REPO. اس اندرونی ذخیرہ میں وہ تمام اجزاء شامل ہیں جنہیں ہم اندرونی مقاصد کے لیے استعمال کرتے ہیں، مثال کے طور پر خود تحریر کردہ نگرانی۔

لینکس پر NET کور، گھوڑے کی پیٹھ پر DevOps

ہم بھی استعمال کرتے ہیں۔ نیو گیٹ، کیونکہ اس میں دوسرے پیکیج مینیجرز کے مقابلے میں بہتر کیشنگ ہے۔

نتیجہ

بلڈ ایجنٹس کو بہتر بنانے کے بعد، اوسط تعمیر کا وقت 12 منٹ سے کم کر کے 7 کر دیا گیا۔

اگر ہم ان تمام مشینوں کو شمار کریں جو ہم ونڈوز کے لیے استعمال کر سکتے تھے، لیکن اس پروجیکٹ میں لینکس میں تبدیل ہو گئے، تو ہم نے تقریباً 10 ڈالر کی بچت کی۔ اور یہ صرف لائسنسوں پر ہے، اور اگر ہم مواد کو مدنظر رکھیں۔

منصوبے

اگلی سہ ماہی کے لیے، ہم نے کوڈ کی ترسیل کو بہتر بنانے پر کام کرنے کا منصوبہ بنایا ہے۔

پری بلڈ ڈوکر امیج پر سوئچ کرنا. TFS بہت سارے پلگ انز کے ساتھ ایک عمدہ چیز ہے جو آپ کو پائپ لائن میں ضم کرنے کی اجازت دیتی ہے، بشمول، ایک ڈوکر امیج کی ٹرگر پر مبنی اسمبلی۔ ہم اس ٹرگر کو اسی کے لیے بنانا چاہتے ہیں۔ پیکیج-تالا.جن. اگر پروجیکٹ کو بنانے کے لیے استعمال ہونے والے اجزاء کی ترکیب کسی طرح بدل جاتی ہے تو ہم ایک نئی ڈوکر امیج بناتے ہیں۔ یہ بعد میں کنٹینر کو اسمبل شدہ ایپلی کیشن کے ساتھ تعینات کرنے کے لیے استعمال کیا جاتا ہے۔ اب ایسا نہیں ہے، لیکن ہم Kubernetes میں ایک مائیکرو سروس آرکیٹیکچر کو تبدیل کرنے کا منصوبہ بنا رہے ہیں، جو ہماری کمپنی میں فعال طور پر ترقی کر رہا ہے اور ایک طویل عرصے سے پیداواری حل پیش کر رہا ہے۔

خلاصہ

میں ہر ایک کی حوصلہ افزائی کرتا ہوں کہ وہ ونڈوز کو پھینک دیں، لیکن ایسا اس لیے نہیں ہے کہ میں اسے پکانا نہیں جانتا۔ وجہ یہ ہے کہ زیادہ تر اوپن سورس حل ہیں۔ لینکس اسٹیک. کیا تم ٹھیک ہو وسائل پر بچت کریں. میری رائے میں، مستقبل ایک طاقتور کمیونٹی کے ساتھ لینکس پر اوپن سورس سلوشنز کا ہے۔

الیگزینڈر سنچینوف کا اسپیکر پروفائل GitHub پر.

DevOps Conf پیشہ ور افراد کے لیے ترقی، جانچ اور آپریشن کے عمل کے انضمام پر ایک کانفرنس ہے۔ اس لیے جس پروجیکٹ کے بارے میں سکندر نے بات کی تھی؟ لاگو کیا گیا اور کام کیا گیا، اور کارکردگی کے دن دو کامیاب ریلیز ہوئیں۔ پر RIT++ پر DevOps Conf 27 اور 28 مئی کو پریکٹیشنرز کی جانب سے اسی طرح کے مزید کیسز ہوں گے۔ آپ اب بھی آخری گاڑی میں کود سکتے ہیں اور رپورٹ بھیجیں یا اپنا وقت لے لو بک کرنے کے لئے ٹکٹ. Skolkovo میں ہم سے ملو!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں