ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

هڪ رستو آئي اي سي (Infrastructure as Code) نه رڳو ان ڪوڊ تي مشتمل آهي جيڪو ذخيرو ۾ ذخيرو ٿيل آهي، پر انهن ماڻهن ۽ عملن جو پڻ آهي جيڪي هن ڪوڊ جي چوڌاري آهن. ڇا سافٽ ويئر ڊولپمينٽ کان وٺي انفراسٽرڪچر مينيجمينٽ ۽ وضاحت تائين طريقن کي ٻيهر استعمال ڪرڻ ممڪن آهي؟ اهو سٺو خيال هوندو ته هن خيال کي ذهن ۾ رکو جڏهن توهان مضمون پڙهندا آهيو.

انگريزي ورزن

هي منهنجو نقل آهي پرفارمنس تي DevopsConf 2019-05-28.

سلائڊ ۽ وڊيوز

انفراسٹرڪچر بش جي تاريخ وانگر

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

فرض ڪريو توهان هڪ نئين منصوبي تي آيا آهيو، ۽ اهي توهان کي چوندا آهن: "اسان وٽ آهي بنيادي ڍانچي جيئن ڪوڊ". حقيقت ۾ اهو نڪتو انفراسٹرڪچر بش جي تاريخ وانگر يا مثال طور بش جي تاريخ جي طور تي دستاويز. اها هڪ تمام حقيقي صورتحال آهي، مثال طور، هڪ اهڙي صورت ۾ Denis Lysenko هڪ تقرير ۾ بيان ڪيو ويو آهي سڄي انفراسٽرڪچر کي ڪيئن بدلايو وڃي ۽ آرام سان سمهڻ شروع ڪيو وڃي، هن ٻڌايو ته ڪيئن انهن منصوبي لاءِ باش جي تاريخ مان هڪ مربوط انفراسٽرڪچر حاصل ڪيو.

ڪجهه خواهش سان، اسان اهو چئي سگهون ٿا انفراسٹرڪچر بش جي تاريخ وانگر هي ڪوڊ وانگر آهي:

  1. پيداواري صلاحيت: توهان وٺي سگهو ٿا bash تاريخ، اتان کان حڪم هلائي، ۽ توهان شايد، طريقي سان، هڪ ڪم ڪندڙ ترتيب حاصل ڪري سگهو ٿا جيئن هڪ آئوٽ.
  2. ورجن ڪرڻ: توهان کي خبر آهي ته ڪير اندر آيو ۽ انهن ڇا ڪيو، ٻيهر، اها حقيقت ناهي ته اهو توهان کي نڪرڻ تي ڪم ڪندڙ ترتيب ڏانهن وٺي ويندو.
  3. تاريخ: ڪهاڻي ڪنهن ڇا ڪيو. صرف توهان ان کي استعمال ڪرڻ جي قابل نه هوندا جيڪڏهن توهان سرور وڃائي ڇڏيو.

آئون ڇا ڪريان؟

بنيادي ڍانچي جيئن ڪوڊ

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

جيتوڻيڪ اهڙو عجيب ڪيس انفراسٹرڪچر بش جي تاريخ وانگر توهان ان کي ڪنن ذريعي ڇڪي سگهو ٿا بنيادي ڍانچي جيئن ڪوڊ، پر جڏهن اسان چاهيون ٿا ته ڪجهه وڌيڪ پيچيده سٺي پراڻي LAMP سرور کان، اسان ان نتيجي تي پهچنداسين ته هن ڪوڊ کي ڪنهن به طرح تبديل ڪرڻ، تبديل ڪرڻ، بهتر ڪرڻ جي ضرورت آهي. ان کان پوء اسان جي وچ ۾ parallels تي غور ڪرڻ چاهيو ٿا بنيادي ڍانچي جيئن ڪوڊ ۽ سافٽ ويئر جي ترقي.

خشڪ

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

اسٽوريج سسٽم ڊولپمينٽ پروجيڪٽ تي، هڪ ذيلي ڪم هو وقتي طور تي SDS ترتيب ڏيو: اسان هڪ نئين رليز جاري ڪري رهيا آهيون - ان کي وڌيڪ جاچ لاءِ رول آئوٽ ڪرڻ جي ضرورت آهي. ڪم انتهائي سادو آهي:

  • ssh ذريعي هتي لاگ ان ڪريو ۽ حڪم جاري ڪريو.
  • اتي فائل کي نقل ڪريو.
  • هتي config درست ڪريو.
  • اتي سروس شروع ڪريو
  • ...
  • PROFIT!

بيان ڪيل منطق لاء، بش ڪافي کان وڌيڪ آهي، خاص طور تي منصوبي جي شروعاتي مرحلن ۾، جڏهن اهو صرف شروع ٿئي ٿو. هي اهو خراب ناهي ته توهان bash استعمال ڪريو, پر وقت گذرڻ سان گڏ ڪجھه ساڳيو، پر ٿورڙو مختلف ترتيب ڏيڻ لاءِ درخواستون آهن. پهرين شيء جيڪا ذهن ۾ اچي ٿي اها ڪاپي پيسٽ آهي. ۽ هاڻي اسان وٽ اڳ ۾ ئي ٻه تمام ملندڙ اسڪرپٽ آهن جيڪي لڳ ڀڳ ساڳيو ڪم ڪن ٿيون. وقت سان گڏ، لکتن جو تعداد وڌندو ويو، ۽ اسان کي ان حقيقت سان منهن ڏيڻو پيو ته انسٽاليشن کي ترتيب ڏيڻ لاءِ هڪ خاص ڪاروباري منطق آهي جنهن کي مختلف اسڪرپٽ جي وچ ۾ هم وقت سازي ڪرڻ جي ضرورت آهي، اهو ڪافي پيچيده آهي.

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

اهو ظاهر ٿئي ٿو ته اتي هڪ اهڙي مشق آهي DRY (پاڻ کي ٻيهر نه ڏيو). خيال موجوده ڪوڊ ٻيهر استعمال ڪرڻ آهي. اهو سادو آواز آهي، پر اسان هن تي صحيح نه آيا آهيون. اسان جي حالت ۾، اهو هڪ عام خيال هو: اسڪرپٽ کان ترتيبن کي الڳ ڪرڻ لاء. اهي. ڪاروباري منطق جو انسٽاليشن الڳ الڳ ترتيب ڏني وئي آهي، الڳ الڳ ترتيب ڏيو.

CFM لاء SOLID

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

وقت سان گڏ پروجيڪٽ وڌيو ۽ قدرتي تسلسل Ansible جو ظهور هو. ان جي ظاهر ٿيڻ جو بنيادي سبب اهو آهي ته ٽيم تي ماهر آهي ۽ اهو بش پيچيده منطق لاء ٺهيل ناهي. جوابي به پيچيده منطق تي مشتمل ٿيڻ شروع ڪيو. پيچيده منطق کي افراتفري ۾ تبديل ٿيڻ کان روڪڻ لاء، سافٽ ويئر ڊولپمينٽ ۾ ڪوڊ تنظيم جا اصول آهن سولڊ ان سان گڏ، مثال طور، گريگوري پيٽروف رپورٽ ۾ "ڇو هڪ آئي ٽي ماهر کي ذاتي برانڊ جي ضرورت آهي" سوال اٿاريو آهي ته هڪ شخص کي اهڙي طرح ٺاهيو ويو آهي ته ان لاء ڪجهه سماجي ادارن سان ڪم ڪرڻ آسان آهي، سافٽ ويئر ڊولپمينٽ ۾. شيون آهن. جيڪڏهن اسان انهن ٻن خيالن کي گڏ ڪريون ۽ انهن کي ترقي ڪرڻ جاري رکون، اسان کي نوٽيس ڪنداسين ته اسان پڻ استعمال ڪري سگهون ٿا سولڊ مستقبل ۾ هن منطق کي برقرار رکڻ ۽ تبديل ڪرڻ آسان بڻائي ٿي.

اڪيلو ذميواري اصول

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

هر ڪلاس صرف هڪ ڪم سرانجام ڏئي ٿو.

ڪوڊ کي گڏ ڪرڻ جي ڪا ضرورت ناهي ۽ monolithic divine spaghetti mounters ٺاهڻ. انفراسٽرڪچر کي سادي سرن تي مشتمل هجڻ گهرجي. اهو ظاهر ٿئي ٿو ته جيڪڏهن توهان جوابي راند ڪتاب کي ننڍن ٽڪرن ۾ ورهايو، جواب ڏيڻ وارا ڪردار پڙهو، پوء انهن کي برقرار رکڻ آسان آهي.

کليل بند اصول

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

کليل / بند اصول.

  • توسيع ڏانهن کليل: مطلب ته هڪ اداري جي رويي کي وڌائي سگهجي ٿو نئين اداري جي قسم ٺاهي.
  • تبديلي لاءِ بند ٿيل: ھڪڙي اداري جي رويي کي وڌائڻ جي نتيجي ۾، ڪوڊ ۾ ڪا به تبديلي نه ڪئي وڃي جيڪا انھن ادارن کي استعمال ڪري ٿي.

شروعات ۾، اسان ورچوئل مشينن تي ٽيسٽ انفراسٽرڪچر کي ترتيب ڏنو، پر ان حقيقت جي ڪري ته ڊيپلائيمينٽ جو ڪاروباري منطق عمل درآمد کان الڳ هو، اسان بغير ڪنهن پريشاني جي baremetall ۾ رولنگ شامل ڪيو.

Liskov متبادل اصول

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

باربرا ليسڪوف جي متبادل جو اصول. پروگرام ۾ شيون لازمي طور تي تبديل ٿيڻ گهرجن انهن جي ذيلي قسم جي مثالن سان پروگرام جي صحيح عمل کي تبديل ڪرڻ کان سواء

جيڪڏهن توهان ان کي وڌيڪ وسيع طور تي ڏسو، اهو ڪنهن خاص منصوبي جي خاصيت ناهي جنهن کي اتي لاڳو ڪري سگهجي ٿو سولڊ, اهو عام طور تي CFM بابت آهي، مثال طور، ڪنهن ٻئي منصوبي تي مختلف جاوا، ايپليڪيشن سرورز، ڊيٽابيسس، او ايس وغيره جي مٿان هڪ باڪس ٿيل جاوا ايپليڪيشن کي ترتيب ڏيڻ ضروري آهي. هن مثال کي استعمال ڪندي، آئون وڌيڪ اصولن تي غور ڪندس سولڊ

اسان جي صورت ۾، انفراسٹرڪچر ٽيم جي اندر هڪ معاهدو آهي ته جيڪڏهن اسان نصب ڪيو آهي imbjava يا oraclejava ڪردار، پوء اسان وٽ هڪ جاوا بائنري قابل عمل آهي. اهو ضروري آهي ڇاڪاڻ ته اپ اسٽريم ڪردار هن رويي تي منحصر آهن؛ اهي جاوا جي توقع ڪن ٿا. ساڳئي وقت، هي اسان کي اجازت ڏئي ٿو ته هڪ جاوا لاڳو ڪرڻ/ورجن کي ٻئي سان تبديل ڪرڻ جي بغير ايپليڪيشن جي ترتيب واري منطق کي تبديل ڪرڻ جي.

هتي مسئلو اهو آهي ته جواب ۾ ان تي عمل ڪرڻ ناممڪن آهي، جنهن جي نتيجي ۾ ٽيم جي اندر ڪجهه معاهدو ظاهر ٿئي ٿو.

انٽرفيس الڳ ڪرڻ جو اصول

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

انٽرفيس علحدگيءَ جو اصول: ”ڪيترائي ڪلائنٽ-مخصوص انٽرفيس ھڪ عام-مقصد واري انٽرفيس کان بھتر آھن.

شروعات ۾، اسان ڪوشش ڪئي ته ايپليڪيشن جي ترتيب جي سڀني تبديلين کي ھڪڙي جوابي پلے بڪ ۾، پر ان کي سپورٽ ڪرڻ ڏکيو ھو، ۽ اھو طريقو جڏھن اسان وٽ ھڪڙو خارجي انٽرفيس بيان ڪيو ويو آھي (ڪلائنٽ جي توقع آھي پورٽ 443)، پوء ھڪڙي انفراسٹرڪچر انفرادي کان گڏ ڪري سگھجي ٿو. هڪ خاص عمل لاء سرن.

انحصار جي ڦيرڦار جو اصول

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

انحصار جي ڦيرڦار جو اصول. اعليٰ سطحن تي ماڊلز کي هيٺين سطح تي ماڊلز تي ڀاڙيڻ نه گھرجي. ٻنهي قسمن جا ماڊل لازمي طور تي ڀاڙين ٿا. خلاصو تفصيل تي منحصر نه هجڻ گهرجي. تفصيلات لازمي طور تي خلاصن تي منحصر آهن.

هتي مثال هڪ اينٽي پيٽرن تي ٻڌل هوندو.

  1. گراهڪن مان هڪ هڪ خانگي بادل هو.
  2. اسان ڪلائوڊ اندر ورچوئل مشينون آرڊر ڪيون.
  3. پر بادل جي فطرت جي ڪري، ايپليڪيشن جي ترتيب سان ڳنڍيل هئي جنهن ۾ هائپر وائيزر VM تي هو.

اهي. هاء-سطح جي ايپليڪيشن جي ٺهڻ واري منطق انحصار سان وهندي هئي هائپر وائيزر جي هيٺين سطح تي، ۽ هن جو مطلب اهو مسئلو هو جڏهن هن منطق کي ٻيهر استعمال ڪندي. هن طريقي سان نه ڪريو.

لهه وچڙ

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

بنيادي ڍانچي جي طور تي ڪوڊ نه رڳو ڪوڊ بابت، پر ڪوڊ ۽ ماڻهن جي وچ ۾ لاڳاپن بابت، انفراسٽرڪچر ڊولپرز جي وچ ۾ رابطي جي باري ۾.

بس عنصر

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

اچو ته فرض ڪريو ته توهان وٽ توهان جي منصوبي تي Vasya آهي. واسيا توهان جي انفراسٽرڪچر بابت سڀ ڪجهه ڄاڻي ٿو، ڇا ٿيندو جيڪڏهن واسيا اوچتو غائب ٿي وڃي؟ اها هڪ تمام حقيقي صورتحال آهي، ڇاڪاڻ ته هو هڪ بس سان ماريو وڃي ٿو. ڪڏهن ڪڏهن ائين ٿيندو آهي. جيڪڏهن ائين ٿئي ٿو ۽ ڪوڊ بابت ڄاڻ، ان جي جوڙجڪ، اهو ڪيئن ڪم ڪري ٿو، ظاهر ۽ پاسورڊ ٽيم ۾ ورهايل نه آهي، ته پوء توهان کي ڪجهه ناپسنديده حالتن سان منهن ڏئي سگهي ٿو. انهن خطرن کي گهٽائڻ ۽ ٽيم جي اندر علم کي ورهائڻ لاءِ، توهان مختلف طريقا استعمال ڪري سگهو ٿا

Pair Devopsing

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

اهو پسند نه آهي هڪ مذاق طور، ته منتظمين بيئر پيئندا، پاسورڊ تبديل ڪيا، ۽ جوڙي پروگرامنگ جو هڪ اينالاگ. اهي. ٻه انجنيئر هڪ ڪمپيوٽر، هڪ ڪيبورڊ تي ويٺا ۽ توهان جي انفراسٽرڪچر کي گڏ ڪرڻ شروع ڪيو: هڪ سرور قائم ڪرڻ، هڪ جوابي ڪردار لکڻ، وغيره. اهو سٺو لڳندو آهي، پر اهو اسان لاء ڪم نه ڪيو. پر هن مشق جي خاص ڪيس ڪم ڪيو. هڪ نئون ملازم اچي ٿو، هن جو مرشد ساڻس گڏ هڪ حقيقي ڪم تي وٺي ٿو، ڪم ڪري ٿو ۽ علم کي منتقل ڪري ٿو.

ٻيو خاص ڪيس هڪ واقعو ڪال آهي. هڪ مسئلي جي دوران، فرض تي انهن جو هڪ گروپ ۽ انهن ۾ ملوث ماڻهن کي گڏ ڪري، هڪ اڳواڻ مقرر ڪيو ويو آهي، جيڪو پنهنجي اسڪرين کي حصيداري ڪري ٿو ۽ سوچ جي ٽرين کي آواز ڏئي ٿو. ٻيا شرڪت ڪندڙ ليڊر جي خيالن جي پيروي ڪن ٿا، ڪنسول مان چالن تي جاسوسي ڪن ٿا، چيڪ ڪريو ته انهن لاگ ۾ هڪ لڪير نه وڃايو آهي، ۽ سسٽم بابت نئين شيون سکو. اهو طريقو گهڻو ڪري نه کان وڌيڪ ڪم ڪيو.

ڪوڊ جو جائزو

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

بنيادي طور تي، انفراسٹرڪچر بابت ڄاڻ کي ڦهلائڻ لاء وڌيڪ اثرائتو هو ۽ اهو ڪيئن ڪم ڪري ٿو ڪوڊ جائزو استعمال ڪندي:

  • انفراسٹرڪچر کي مخزن ۾ ڪوڊ ذريعي بيان ڪيو ويو آهي.
  • تبديليون هڪ الڳ شاخ ۾ ٿينديون آهن.
  • ضم ڪرڻ جي درخواست دوران، توھان ڏسي سگھو ٿا ڊيلٽا جي تبديلين جو انفراسٽرڪچر.

هتي خاص ڳالهه اها هئي ته نظرثاني ڪندڙ هڪ هڪ ڪري چونڊيا ويا، هڪ شيڊول جي مطابق، يعني. ڪجهه حد تائين امڪاني طور تي توهان انفراسٽرڪچر جي نئين حصي ۾ چڙهندا.

ڪوڊ جو انداز

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

وقت سان گڏ، تبصرا دوران تڪرار ظاهر ٿيڻ لڳو، ڇاڪاڻ ته ... جائزو وٺندڙن جو پنهنجو انداز هوندو هو ۽ نظرثاني ڪندڙن جي گردش انهن کي مختلف اسلوب سان اسٽيڪ ڪيو: 2 اسپيس يا 4، ڪيمل ڪيس يا snake_case. ان تي فوري طور تي عمل ڪرڻ ممڪن نه هو.

  • پهريون خيال اهو هو ته لينٽر استعمال ڪرڻ جي صلاح ڏيو، آخرڪار، هرڪو انجنيئر آهي، هرڪو هوشيار آهي. پر مختلف ايڊيٽرن، او ايس، آسان نه آهن
  • اهو هڪ بوٽ ۾ ترقي ڪري ٿو جيڪو هر مشڪل ڪم لاء سست ڪرڻ لاء لکيو ۽ لينٽر آئوٽ سان ڳنڍيل آهي. پر اڪثر ڪيسن ۾ ڪرڻ لاءِ وڌيڪ اهم شيون هيون ۽ ڪوڊ اڻڄاتل رهيو.

گرين بلڊ ماسٽر

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

وقت گذري ٿو، ۽ اسان ان نتيجي تي پهتا آهيون ته جيڪي ڪجهه امتحان پاس نٿا ڪن، انهن کي ماسٽر ۾ داخل ٿيڻ جي اجازت نه آهي. وائيلا! اسان ايجاد ڪيو گرين بلڊ ماسٽر، جيڪو هڪ ڊگهي وقت تائين سافٽ ويئر ڊولپمينٽ ۾ مشق ڪيو ويو آهي:

  • هڪ الڳ شاخ ۾ ترقي جاري آهي.
  • ان سلسلي ۾ جاچ جاري آهي.
  • جيڪڏهن ٽيسٽ ناڪام ٿي، ڪوڊ ان کي ماسٽر ۾ نه ڪندو.

اهو فيصلو ڪرڻ تمام ڏکوئيندڙ هو، ڇاڪاڻ ته ... تمام گهڻو تڪرار پيدا ڪيو، پر اهو ان جي لائق هو، ڇاڪاڻ ته ... جائزو وٺڻ شروع ڪيو ضم ڪرڻ لاء درخواستون بغير انداز ۾ اختلاف، ۽ وقت سان گڏ مسئلن جي علائقن جو تعداد گھٽجڻ شروع ڪيو.

IaC جاچ

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

انداز جي چڪاس جي اضافي ۾، توھان استعمال ڪري سگھو ٿا ٻيون شيون، مثال طور، چيڪ ڪرڻ لاءِ ته توھان جو انفراسٽرڪچر اصل ۾ ٺھي سگھي ٿو. يا چيڪ ڪريو ته انفراسٽرڪچر ۾ تبديليون پئسن جي نقصان جو سبب نه بڻجنديون. هن جي ضرورت ڇو ٿي سگهي ٿي؟ سوال پيچيده ۽ فلسفياڻو آهي، اهو بهتر آهي ته هڪ ڪهاڻي سان جواب ڏيو ته ڪنهن نه ڪنهن طريقي سان پاور شيل تي هڪ آٽو اسڪيلر موجود هو جنهن حد جي حالتن کي نه چيڪ ڪيو => وڌيڪ VMs ٺاهيا ويا ضرورت کان وڌيڪ => ڪلائنٽ منصوبابندي کان وڌيڪ پئسا خرچ ڪيو. اهو تمام خوشگوار نه آهي، پر اهو ممڪن آهي ته هن غلطي کي اڳئين مرحلن تي پڪڙڻ لاء.

ڪو پڇي سگھي ٿو، پيچيده انفراسٽرڪچر کي اڃا وڌيڪ پيچيده ڇو بڻايو وڃي؟ بنيادي ڍانچي لاءِ ٽيسٽ، جيئن ڪوڊ لاءِ، سادگي بابت نه آهن، پر اهو ڄاڻڻ بابت آهي ته توهان جي انفراسٽرڪچر کي ڪيئن ڪم ڪرڻ گهرجي.

IaC ٽيسٽنگ پرامڊ

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

IaC جاچ: جامد تجزيو

جيڪڏهن توهان هڪ ئي وقت سڄي انفراسٽرڪچر کي ترتيب ڏيو ۽ چيڪ ڪريو ته اهو ڪم ڪري ٿو، توهان شايد اهو ڳولي سگهو ٿا ته اهو تمام گهڻو وقت وٺندو آهي ۽ تمام گهڻو وقت جي ضرورت آهي. تنهن ڪري، بنياد اهو هجڻ گهرجي جيڪو جلدي ڪم ڪري، ان ۾ تمام گهڻو آهي، ۽ اهو تمام گهڻو ابتدائي هنڌن تي پکڙيل آهي.

بيش مشڪل آهي

اچو ته هڪ ننڍڙو مثال ڏسو. موجوده ڊاريڪٽري ۾ سڀ فائلون چونڊيو ۽ ٻئي هنڌ ڏانهن نقل ڪريو. پهرين شيء جيڪا ذهن ۾ اچي ٿي:

for i in * ; do 
    cp $i /some/path/$i.bak
done

ڇا جيڪڏهن فائل جي نالي ۾ هڪ جاء آهي؟ چڱو، ٺيڪ، اسان هوشيار آهيون، اسان ڄاڻون ٿا ته اقتباس ڪيئن استعمال ڪجي:

for i in * ; do cp "$i" "/some/path/$i.bak" ; done

بهترين؟ نه! ڇا جيڪڏھن ڊاريڪٽري ۾ ڪجھ به نه آھي، يعني. گلوبنگ ڪم نه ڪندو.

find . -type f -exec mv -v {} dst/{}.bak ;

چڱو ٿيو هاڻي؟ نه... وساري ڇڏيو ته فائل جي نالي ۾ ڇا ٿي سگهي ٿو n.

touch x
mv x  "$(printf "foonbar")"
find . -type f -print0 | xargs -0 mv -t /path/to/target-dir

جامد تجزيو جا اوزار

پوئين قدم کان مسئلو تڏهن پڪڙي سگهندو جڏهن اسان حوالن کي وساري ڇڏيون، ان لاءِ فطرت ۾ ڪيترائي علاج موجود آهن. شيل چيڪ، عام طور تي انهن مان تمام گهڻا آهن، ۽ گهڻو ڪري توهان ڳولي سگهو ٿا هڪ لينٽر توهان جي اسٽيڪ لاءِ توهان جي IDE هيٺ.

لئنگئيج
اوزار

ڪشادو
شيل چيڪ

روبي
RuboCop

سٿان
پائليٽ

ناھي
جوابي لينٽ

IaC جاچ: يونٽ ٽيسٽ

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

جيئن ته اسان پوئين مثال مان ڏٺو، لينٽر تمام طاقتور نه آهن ۽ سڀني مسئلن جي علائقن کي اشارو نٿا ڪري سگهن. وڌيڪ، سافٽ ويئر ڊولپمينٽ ۾ ٽيسٽ سان قياس ڪندي، اسان يونٽ ٽيسٽ کي ياد ڪري سگھون ٿا. جيڪو فوري طور تي ذهن ۾ اچي ٿو شونٽ, جنٽ, rspec, پينٽيسٽ. پر جوابي، شيف، سالٽ اسٽيڪ ۽ انهن وانگر ٻين سان ڇا ڪجي؟

شروعات ۾ اسان بابت ڳالهايو سولڊ ۽ اهو ته اسان جو انفراسٽرڪچر ننڍين سرن تي مشتمل هجي. سندن وقت اچي ويو آهي.

  1. انفراسٽرڪچر کي ننڍيون سرن ۾ ورهايو ويو آهي، مثال طور، جوابي ڪردار.
  2. ماحول جو ڪجهه قسم مقرر ڪيو ويو آهي، اهو ڊاکر يا VM هجي.
  3. اسان پنهنجي جوابي ڪردار کي هن امتحان واري ماحول تي لاڳو ڪريون ٿا.
  4. اسان چيڪ ڪريون ٿا ته هر شي ڪم ڪيو جيئن اسان توقع ڪئي (اسين ٽيسٽ هلون ٿا).
  5. اسان فيصلو ڪريون ٿا ته ٺيڪ آهي يا نه.

IaC جاچ: يونٽ ٽيسٽنگ جا اوزار

سوال، سي ايف ايم لاء ٽيسٽ ڇا آهن؟ توهان صرف اسڪرپٽ هلائي سگهو ٿا، يا توهان هن لاء تيار ڪيل حل استعمال ڪري سگهو ٿا:

سي ايف ايم
اوزار

ناھي
ٽيسٽنفرا

سر
معائنو

سر
سرور اسپيڪ

لوڻ
گوسڙو

testinfra لاءِ مثال، چيڪ ڪندي ته صارفين test1, test2 موجود آهن ۽ هڪ گروپ ۾ آهن sshusers:

def test_default_users(host):
    users = ['test1', 'test2' ]
    for login in users:
        assert host.user(login).exists
        assert 'sshusers' in host.user(login).groups

ڇا چونڊڻ لاء؟ سوال پيچيده ۽ مبہم آهي، هتي 2018-2019 لاءِ گيٿب تي منصوبن ۾ تبديلين جو هڪ مثال آهي:

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

IaC جاچ فريم ورڪ

سوال پيدا ٿئي ٿو: اهو سڀ ڪجهه گڏ ڪيئن ڪجي ۽ ان کي لانچ ڪجي؟ ڪري ان کي وٺو ۽ اهو پنهنجو پاڻ ڪريو جيڪڏهن انجنيئرن جو ڪافي تعداد آهي. يا توهان تيار ڪيل حل وٺي سگهو ٿا، جيتوڻيڪ انهن مان تمام گهڻا نه آهن:

سي ايف ايم
اوزار

ناھي
آنو

سر
ٽيسٽ باورچی خانه

ٽرافيف
زميندار

2018-2019 لاءِ گيٿب تي منصوبن ۾ تبديلين جا مثال:

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

ماليڪيول بمقابلہ ٽيسٽ ڪچن

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

شروعات ۾ اسان testkitchen استعمال ڪرڻ جي ڪوشش ڪئي:

  1. متوازي ۾ هڪ VM ٺاهيو.
  2. جوابي ڪردار لاڳو ڪريو.
  3. چڪاس هلائڻ.

25-35 ڪردارن لاء، اهو 40-70 منٽ ڪم ڪيو، جيڪو ڊگهو هو.

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

ايندڙ قدم جينڪنز / ڊاکر / جوابي / ماليڪيول ڏانهن منتقلي هئي. Idiologically سڀ ڪجهه ساڳيو آهي

  1. لِنٽ راند جا ڪتاب.
  2. ڪردارن کي ترتيب ڏيو.
  3. لانچ ڪنٽينر
  4. جوابي ڪردار لاڳو ڪريو.
  5. testinfra کي هلائڻ.
  6. ايمانداري چيڪ ڪريو.

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

40 ڪردارن لاءِ لِنٽنگ ۽ درجن لاءِ ٽيسٽ لڳ ڀڳ 15 منٽ لڳن ٿا.

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

ڇا چونڊيو ڪيترن ئي عنصر تي منحصر آهي، جهڙوڪ استعمال ٿيل اسٽيڪ، ٽيم ۾ ماهر، وغيره. هتي هرڪو پاڻ لاءِ فيصلو ڪري ٿو ته يونٽ جي جاچ واري سوال کي ڪيئن بند ڪجي

IaC جاچ: انٽيگريشن ٽيسٽ

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

انفراسٽرڪچر جي جاچ پڙتال ۾ ايندڙ قدم انضمام جا امتحان هوندا. اهي يونٽ ٽيسٽ وانگر آهن:

  1. بنيادي ڍانچي کي ننڍڙن سرن ۾ ورهايو ويو آهي، مثال طور جوابي ڪردار.
  2. ماحول جو ڪجهه قسم مقرر ڪيو ويو آهي، اهو ڊاکر يا VM هجي.
  3. ھن امتحان واري ماحول لاءِ لاڳو ڪريو هڪ گولي جوابدار ڪردار.
  4. اسان چيڪ ڪريون ٿا ته هر شي ڪم ڪيو جيئن اسان توقع ڪئي (اسين ٽيسٽ هلون ٿا).
  5. اسان فيصلو ڪريون ٿا ته ٺيڪ آهي يا نه.

عام طور تي ڳالهائڻ، اسان سسٽم جي انفرادي عنصر جي ڪارڪردگي جي جانچ نه ڪندا آهيون جيئن يونٽ ٽيسٽ ۾، اسان چيڪ ڪريون ٿا ته سرور ڪيئن مڪمل طور تي ترتيب ڏنل آهي.

IaC جاچ: آخر کان آخر تائين ٽيسٽ

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

پرامڊ جي چوٽي تي اسان کي سلام ڪيو ويو آهي آخر کان آخر تائين ٽيسٽ. اهي. اسان هڪ الڳ سرور، هڪ الڳ اسڪرپٽ، يا اسان جي انفراسٽرڪچر جي هڪ الڳ اينٽي جي ڪارڪردگي جي جانچ نه ڪندا آهيون. اسان چيڪ ڪريون ٿا ته ڪيترائي سرور هڪٻئي سان ڳنڍيل آهن، اسان جو انفراسٽرڪچر ڪم ڪري ٿو جيئن اسان ان جي توقع ڪندا آهيون. بدقسمتي سان، مون ڪڏهن به تيار ٿيل باڪس ٿيل حل نه ڏٺا آهن، شايد ڇاڪاڻ ته ... انفراسٽرڪچر اڪثر ڪري منفرد ۽ مشڪل هوندو آهي ٽيمپليٽ ڪرڻ ۽ ٽيسٽ لاءِ فريم ورڪ ٺاهڻ. نتيجي طور، هرڪو پنهنجو حل ٺاهي ٿو. طلب آهي، پر جواب ڪونھي. تنهن ڪري، مان توهان کي ٻڌايان ٿو ته ٻين کي آوازن جي سوچن ڏانهن ڌڪڻ يا منهنجي نڪ کي رگڻ جي حقيقت اها آهي ته هر شيء اسان کان گهڻو اڳ ايجاد ڪئي وئي هئي.

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

هڪ امير تاريخ سان هڪ منصوبو. اهو وڏين تنظيمن ۾ استعمال ٿيندو آهي ۽ شايد توهان مان هر هڪ اڻ سڌي طرح ان سان گڏ رستا پار ڪري چڪو آهي. ايپليڪيشن ڪيترن ئي ڊيٽابيس، انضمام، وغيره کي سپورٽ ڪري ٿي. اهو ڄاڻڻ ته انفراسٽرڪچر ڪهڙي طرح نظر اچي سگهي ٿو تمام گهڻيون ڊاڪر-ڪپوز فائلون، ۽ اهو ڄاڻڻ ته ڪهڙيون ٽيسٽون هلائڻيون آهن ڪهڙي ماحول ۾ جينڪنز.

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

هن اسڪيم ڪافي وقت تائين ڪم ڪيو، جيستائين فريم ورڪ اندر تحقيق اسان هن کي Openshift ڏانهن منتقل ڪرڻ جي ڪوشش نه ڪئي آهي. ڪنٽينر ساڳيا رهندا، پر لانچ ماحول تبديل ٿي چڪو آهي (هيلو DRY ٻيهر).

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

تحقيق جو خيال اڳتي وڌيو، ۽ اوپن شفٽ ۾ هنن کي APB (Ansible Playbook Bundle) جهڙي شيءِ ملي ٿي، جيڪا توهان کي معلومات پيڪ ڪرڻ جي اجازت ڏئي ٿي ته انفراسٽرڪچر کي ڪنٽينر ۾ ڪيئن لڳايو وڃي. اهي. بنيادي ڍانچي کي ڪيئن ترتيب ڏيڻ جي باري ۾ ڄاڻ جو هڪ ٻيهر قابل، آزمائشي نقطو آهي.

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

اهو سڀ ڪجهه سٺو لڳندو هو جيستائين اسان هڪ متضاد انفراسٽرڪچر ۾ ڀڄي ويا: اسان کي ٽيسٽ لاءِ ونڊوز جي ضرورت هئي. نتيجي طور، جينڪنز ۾ ڇا، ڪٿي، ڪيئن ترتيب ڏيڻ، ۽ ٽيسٽ جي ڄاڻ آهي.

ٿڪل

ڇا مون 200 لائنن جي انفراسٽرڪچر ڪوڊ جي جاچ ڪرڻ مان سکيو

انفراسٽرڪچر جيئن ته ڪوڊ آهي

  • مخزن ۾ ڪوڊ.
  • انساني رابطي.
  • انفراسٽرڪچر جاچ.

کاٻي

جو ذريعو: www.habr.com

تبصرو شامل ڪريو