موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

اڄ، اڪثر سافٽ ويئر پروڊڪٽس ٽيمن ۾ ترقي يافته آهن. ڪامياب ٽيم جي ترقي لاء شرطن کي هڪ سادي ڊراگرام جي صورت ۾ پيش ڪري سگهجي ٿو.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

هڪ دفعو توهان پنهنجو ڪوڊ لکيو آهي، توهان کي پڪ ڪرڻ جي ضرورت آهي:

  1. .
  2. اهو ڪجھ به نه ٽوڙيندو، بشمول ڪوڊ توهان جي ساٿين لکيو آهي.

جيڪڏهن ٻئي حالتون ملن ٿيون، ته پوء توهان ڪاميابي جي رستي تي آهيو. انهن حالتن کي آسانيءَ سان جانچڻ ۽ منافعي واري رستي کان انحراف نه ڪرڻ لاءِ، اسان لڳاتار انضمام سان گڏ آيا آهيون.

CI ھڪڙو ڪم فلو آھي جتي توھان پنھنجي ڪوڊ کي مجموعي پراڊڪٽ ڪوڊ ۾ ضم ڪريو جيترو ممڪن طور تي. ۽ توهان صرف ضم نه ڪريو، پر اهو پڻ مسلسل چيڪ ڪريو ته هر شي ڪم ڪري رهي آهي. جيئن توهان کي تمام گهڻو ۽ اڪثر چيڪ ڪرڻ جي ضرورت آهي، اهو آٽوميشن بابت سوچڻ جي قابل آهي. توهان هر شي کي دستي طور تي چيڪ ڪري سگهو ٿا، پر توهان کي نه گهرجي، ۽ هتي ڇو آهي.

  • پيارا ماڻهو. ڪنهن به پروگرامر جي ڪم جو هڪ ڪلاڪ ڪنهن به سرور جي ڪم جي هڪ ڪلاڪ کان وڌيڪ قيمتي آهي.
  • ماڻهو غلطيون ڪندا آهن. تنهن ڪري، حالتون پيدا ٿي سگهن ٿيون جڏهن ٽيسٽ غلط برانچ تي هليا ويا هئا يا امتحان ڪندڙن لاء غلط واعدو مرتب ڪيو ويو هو.
  • ماڻهو سست آهن. وقت بوقت، جڏهن مان ڪو ڪم پورو ڪريان ٿو، تڏهن خيال پيدا ٿئي ٿو: ”چڪائڻ لاءِ ڇا آهي؟ مون ٻه سٽون لکيون - سڀ ڪم! منهنجو خيال آهي ته توهان مان به ڪڏهن ڪڏهن اهڙا خيال هوندا آهن. پر توهان کي هميشه چيڪ ڪرڻ گهرجي.

اييوٽو موبائل ڊولپمينٽ ٽيم ۾ مسلسل انٽيگريشن کي ڪيئن لاڳو ڪيو ويو ۽ ترقي ڪئي وئي، ڪيئن اهي روزانو 0 کان 450 بلڊز تائين پهتيون، ۽ اها مشين ٺاهڻ واريون مشينون هڪ ڏينهن ۾ 200 ڪلاڪ گڏ ٿين ٿيون، نڪولائي نيسٽروف چوي ٿو (nnesterov) CI/CD Android ايپليڪيشن جي سڀني ارتقائي تبديلين ۾ حصو وٺندڙ آهي.

ڪهاڻي هڪ Android حڪم جي مثال تي ٻڌل آهي، پر اڪثر طريقا iOS تي پڻ لاڳو ٿين ٿا.


هڪ دفعو تي، هڪ شخص Avito Android ٽيم ۾ ڪم ڪيو. تعريف سان، هن کي مسلسل انضمام کان ڪنهن به شيء جي ضرورت نه هئي: ان سان گڏ ڪو به نه هو.

پر ايپليڪيشن وڌي وئي، وڌيڪ ۽ وڌيڪ نوان ڪم ظاهر ٿيا، ۽ ٽيم مطابق مطابق وڌي وئي. ڪجهه نقطي تي، اهو وقت وڌيڪ رسمي طور تي ڪوڊ انضمام جي عمل کي قائم ڪرڻ جو وقت آهي. اهو استعمال ڪرڻ جو فيصلو ڪيو ويو Git وهڪري.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

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

چيڪ

توهان جي اکين سان ڪوڊ ڏسڻ ٿڌو آهي، پر ڪافي ناهي. تنهن ڪري، خودڪار چيڪ متعارف ڪرايو پيو وڃي.

  • سڀ کان پهريان، اسان چيڪ ڪريون ٿا آرڪ اسيمبلي.
  • تمام گھڻو جونيٽ ٽيسٽون.
  • اسان ڪوڊ ڪوريج تي غور ڪندا آهيون، ڇاڪاڻ ته اسان ٽيسٽ هلائي رهيا آهيون.

سمجھڻ لاءِ ته ھي چيڪ ڪيئن ھلايو وڃي، اچو ته ڏسون ترقي جي عمل کي Avito ۾.

اهو هن طرح schematically نمائندگي ڪري سگهجي ٿو:

  • هڪ ڊولپر پنهنجي ليپ ٽاپ تي ڪوڊ لکي ٿو. توھان ھتي ھتي انٽيگريشن چيڪ ھلائي سگھو ٿا - يا ته ڪمٽ ٿڪ سان، يا بس پس منظر ۾ چيڪ ھلائي سگھو ٿا.
  • ڊولپر کان پوء ڪوڊ کي ڌڪايو آهي، هو هڪ پل جي درخواست کوليندو آهي. ان جي ڪوڊ لاءِ ڊولپمينٽ برانچ ۾ شامل ٿيڻ لاءِ، ضروري آھي ته ڪوڊ جي نظرثاني ذريعي وڃو ۽ گهربل تعداد جي تصديق گڏ ڪريو. توھان چالو ڪري سگھوٿا چيڪ ۽ ٺاھڻ ھتي: جيستائين سڀ ٺاھڻ ڪامياب نه ٿين، پل جي درخواست کي ملائي نٿو سگھجي.
  • پل جي درخواست ضم ٿيڻ کان پوءِ ۽ ڪوڊ ڊولپمينٽ ۾ شامل ڪيو ويو آهي، توهان هڪ آسان وقت چونڊي سگهو ٿا: مثال طور، رات جو، جڏهن سڀئي سرور آزاد آهن، ۽ هلائيندا آهن ڪيتريون ئي چيڪون جيئن توهان چاهيو.

ڪنهن به پنهنجي ليپ ٽاپ تي اسڪين هلائڻ پسند نه ڪيو. جڏهن هڪ ڊولپر هڪ خصوصيت ختم ڪري ڇڏيو آهي، هو جلدي ان کي دٻائڻ چاهي ٿو ۽ پل جي درخواست کولڻ چاهي ٿو. جيڪڏهن هن وقت ڪجهه ڊگهي چيڪ شروع ڪيا ويا آهن، اهو نه رڳو تمام خوشگوار آهي، پر ترقي کي به سست ڪري ٿو: جڏهن ته ليپ ٽاپ ڪجهه چيڪ ڪري رهيو آهي، ان تي عام طور تي ڪم ڪرڻ ناممڪن آهي.

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

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

نتيجي طور، اسان ھيٺ ڏنل حڪمت عملي چونڊيو آھي: اسان رات جي وقت چيڪن جو وڌ ۾ وڌ ممڪن سيٽ ھلون ٿا، ۽ انھن مان سڀ کان وڌيڪ نازڪ ۽، سڀ کان وڌيڪ، سڀ کان وڌيڪ تيز ترين ھڪڙي پل جي درخواست تي. پر اسان اتي نه ٿا رکون- متوازي طور تي، اسان چيڪن جي رفتار کي بهتر بڻائي سگھون ٿا ته جيئن انھن کي رات جي موڊ کان منتقل ڪرڻ لاء درخواست چيڪ کي ڇڪڻ لاء.

ان وقت، اسان جون سڀئي اڏاوتون تمام جلدي مڪمل ڪيون ويون، تنهنڪري اسان صرف شامل ڪيو ARK تعمير، جونيٽ ٽيسٽ ۽ ڪوڊ ڪوريج حساب ڪتاب جي درخواست لاء بلاڪر طور. اسان ان کي چالو ڪيو، ان بابت سوچيو، ۽ ڪوڊ ڪوريج کي ڇڏي ڏنو ڇاڪاڻ ته اسان سوچيو ته اسان کي ان جي ضرورت ناهي.

اسان کي مڪمل طور تي بنيادي CI قائم ڪرڻ ۾ ٻه ڏينهن لڳي ويا (هتي وقت جو اندازو لڳ ڀڳ آهي، پيماني جي ضرورت آهي).

ان کان پوء، اسان وڌيڪ سوچڻ شروع ڪيو - ڇا اسان صحيح طور تي جانچ ڪري رهيا آهيون؟ ڇا اسان صحيح طور تي پل جي درخواستن تي تعميرات هلائي رهيا آهيون؟

اسان برانچ جي آخري ڪمٽ تي تعمير شروع ڪئي جتان پل جي درخواست کوليو ويو. پر هن واعدي جا تجربا صرف اهو ظاهر ڪري سگھن ٿا ته ڪوڊ جيڪو ڊولپر لکيو آهي ڪم ڪري ٿو. پر اهي ثابت نٿا ڪن ته هن ڪجهه به نه ٽوڙيو. حقيقت ۾، توهان کي ڏسڻ جي ضرورت آهي ڊولپمينٽ برانچ جي حالت ان ۾ ضم ٿيڻ کان پوءِ.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

هن کي ڪرڻ لاء، اسان هڪ سادي بش اسڪرپٽ لکيو premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

هتي ترقيءَ مان سڀ تازيون تبديليون آسانيءَ سان ڪڍيون وينديون آهن ۽ موجوده برانچ ۾ ضم ٿي وينديون آهن. اسان premerge.sh اسڪرپٽ شامل ڪيو جيئن سڀني تعميرن ۾ پهريون قدم ۽ چيڪ ڪرڻ شروع ڪيو جيڪو اسان چاهيون ٿا، اهو آهي انضمام.

ان مسئلي کي لوڪلائز ڪرڻ، حل ڳولڻ ۽ هن اسڪرپٽ لکڻ ۾ ٽي ڏينهن لڳي ويا.

ايپليڪيشن ترقي ڪئي، وڌيڪ ۽ وڌيڪ ڪم ظاهر ٿيا، ٽيم وڌندي، ۽ premerge.sh ڪڏهن ڪڏهن اسان کي مايوس ڪرڻ شروع ڪيو. ڊولپمينٽ ۾ متضاد تبديليون هيون جيڪي تعمير کي ٽوڙي ڇڏيو.

اهو ڪيئن ٿئي ٿو جو هڪ مثال:

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

ٻه ڊولپر هڪ ئي وقت فيچر A ۽ B تي ڪم ڪرڻ شروع ڪن ٿا. فيچر A جو ڊولپر پروجيڪٽ ۾ هڪ غير استعمال ٿيل فيچر ڳولي ٿو answer() ۽، هڪ سٺو ڇوڪرو اسڪائوٽ وانگر، ان کي هٽائي ٿو. ساڳئي وقت، خصوصيت B جي ڊولپر پنهنجي برانچ ۾ هن فنڪشن لاء هڪ نئين ڪال شامل ڪري ٿو.

ڊولپرز پنهنجو ڪم ختم ڪن ٿا ۽ هڪ ئي وقت هڪ پل جي درخواست کوليو. عمارتون شروع ڪيون ويون آهن، premerge.sh چيڪ ڪري ٿو ٻنهي پل درخواستن کي جديد ترقي واري رياست جي حوالي سان - سڀ چيڪ سائي آهن. ان کان پوء، خصوصيت A جي پل جي درخواست ضم ڪئي وئي آهي، خصوصيت B جي پل جي درخواست کي ضم ڪيو ويو آهي... بوم! ڊولپمينٽ بريڪز ڇو ته ڊولپمينٽ ڪوڊ ۾ ڪال شامل آهي غير موجود فنڪشن کي.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

جڏهن اهو ترقي ڪرڻ وارو ناهي، اهو آهي مقامي آفت. پوري ٽيم ڪجھ به گڏ نه ڪري سگھي ۽ ان کي جانچ لاءِ جمع ڪرايو.

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

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

جيئن ته اهو اسان کي مناسب نه هو، اسان ان کي روڪڻ لاء اختيارن کي ڳولڻ شروع ڪيو.

ڪيئن نه ٽوڙڻ جي ترقي

پهرين اختيار: سڀني پل جي درخواستن کي ٻيهر ٺاھيو جڏھن تازه ڪاري ترقي. جيڪڏهن، اسان جي مثال ۾، خصوصيت A سان گڏ پل جي درخواست ترقي ۾ شامل ٿيڻ لاء پهريون آهي، خصوصيت B جي پل جي درخواست کي ٻيهر تعمير ڪيو ويندو، ۽، مطابق، چيڪ هڪ تاليف جي غلطي جي ڪري ناڪام ٿي ويندا.

سمجھڻ لاءِ اھو ڪيترو وقت وٺندو، ھڪڙو مثال غور ڪريو ٻن پي آرز سان. اسان ٻه پي آرز کوليون ٿا: ٻه ٺاهي، چيڪ جا ٻه رنسون. پهرين پي آر کي ترقي ۾ ضم ٿيڻ کان پوء، ٻئي کي ٻيهر تعمير ڪرڻ جي ضرورت آهي. مجموعي طور تي، ٻه پي آرز جي ضرورت آهي ٽن رنن جي چيڪن: 2 + 1 = 3.

اصول ۾، اهو ٺيڪ آهي. پر اسان انگن اکرن کي ڏٺو، ۽ اسان جي ٽيم ۾ عام صورتحال 10 کليل پي آرز هئي، ۽ پوء چيڪن جو تعداد ترقي جو مجموعو آهي: 10 + 9 + ... + 1 = 55. اهو آهي، 10 کي قبول ڪرڻ لاء. پي آرز، توهان کي 55 ڀيرا ٻيهر ٺاهڻ جي ضرورت آهي. ۽ اهو هڪ مثالي صورتحال ۾ آهي، جڏهن سڀئي چيڪ پهريون ڀيرو گذري ويندا آهن، جڏهن ڪو به اضافي پل جي درخواست نه کوليندو آهي جڏهن اهي درجن تي عمل ڪيا ويندا آهن.

پنهنجو پاڻ کي هڪ ڊولپر جي حيثيت سان تصور ڪريو جنهن کي ”ضم“ بٽڻ تي ڪلڪ ڪرڻ لاءِ پهريون ٿيڻو پوندو، ڇاڪاڻ ته جيڪڏهن ڪو پاڙيسري ائين ڪندو، ته پوءِ توهان کي انتظار ڪرڻو پوندو جيستائين سڀ تعميرات ٻيهر نه ٿين... نه، اهو ڪم نه ڪندو. ، اهو سنجيده ترقي کي سست ڪندو.

ٻيو ممڪن طريقو: ڪوڊ جي نظرثاني کان پوء پل درخواستون گڏ ڪريو. اهو آهي، توهان هڪ ڇڪڻ جي درخواست کوليو، ساٿين کان منظوري جو گهربل تعداد گڏ ڪريو، صحيح ڪريو جيڪو گهربل آهي، ۽ پوء تعميرات کي لانچ ڪريو. جيڪڏهن اهي ڪامياب آهن، پل جي درخواست ترقي ۾ ملائي وئي آهي. هن معاملي ۾، اتي ڪو به اضافي restarts نه آهن، پر موٽ تمام سست آهي. هڪ ڊولپر جي طور تي، جڏهن مون هڪ پل جي درخواست کوليو، مان فوري طور تي ڏسڻ چاهيان ٿو ته اهو ڪم ڪرڻ وارو آهي. مثال طور، جيڪڏهن ڪو امتحان ناڪام ٿئي ٿو، توهان کي جلدي ان کي درست ڪرڻ جي ضرورت آهي. دير جي تعمير جي صورت ۾، موٽ سست ٿي ويندي آهي، ۽ تنهنڪري سڄي ترقي. اها ڳالهه اسان کي به نه وڻي.

نتيجي طور، صرف ٽيون اختيار رهي - سائيڪل. اسان جا سڀئي ڪوڊ، اسان جا سڀئي ذريعا Bitbucket سرور تي مخزن ۾ محفوظ ٿيل آهن. انهي جي مطابق، اسان کي Bitbucket لاء هڪ پلگ ان ٺاهڻو پوندو.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

هي پلگ ان پل جي درخواستن کي ضم ڪرڻ جي ميڪانيزم کي ختم ڪري ٿو. شروعات معياري آهي: پي آر کلي ٿو، سڀ اسيمبليون شروع ڪيون ويون آهن، ڪوڊ جو جائزو مڪمل ڪيو ويو آهي. پر ڪوڊ جو جائزو مڪمل ٿيڻ کان پوءِ ۽ ڊولپر ”ضم“ تي ڪلڪ ڪرڻ جو فيصلو ڪري ٿو، پلگ ان چيڪ ڪري ٿو جنهن جي خلاف رياست ترقي ڪري چڪيون هيون. جيڪڏهن ڊولپمينٽ ٺاهڻ کان پوءِ اپڊيٽ ڪئي وئي آهي، پلگ ان اهڙي پل جي درخواست کي مکيه شاخ ۾ ضم ٿيڻ جي اجازت نه ڏيندو. اهو صرف هڪ نسبتا تازو ترقي جي تعمير کي ٻيهر شروع ڪندو.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

اسان جي مثال ۾ متضاد تبديلين سان، اهڙيون تعميرات هڪ تاليف جي غلطي جي ڪري ناڪام ٿينديون. مطابق، خصوصيت B جي ڊولپر کي ڪوڊ کي درست ڪرڻو پوندو، چيڪ کي ٻيهر شروع ڪيو، پوء پلگ ان خودڪار طريقي سان پل جي درخواست لاڳو ڪندو.

ھن پلگ ان کي لاڳو ڪرڻ کان پھريان، اسان سراسري طور تي 2,7 جائزو ورتو في پل درخواست. پلگ ان سان گڏ 3,6 لانچ هئا. اهو اسان کي مناسب هو.

اهو نوٽ ڪرڻ جي قابل آهي ته هن پلگ ان ۾ هڪ خرابي آهي: اهو صرف هڪ ڀيرو تعمير کي ٻيهر شروع ڪري ٿو. اهو آهي، اڃا تائين هڪ ننڍڙي ونڊو آهي جنهن ذريعي تڪراري تبديليون ترقي ۾ حاصل ڪري سگهن ٿيون. پر انهي جو امڪان گهٽ آهي، ۽ اسان هن واپار کي شروع ڪيو ۽ ناڪامي جي امڪان جي وچ ۾. ٻن سالن ۾ اهو صرف هڪ ڀيرو فائر ڪيو ويو، تنهنڪري اهو شايد بيڪار نه هو.

Bitbucket پلگ ان جو پهريون نسخو لکڻ ۾ اسان کي ٻه هفتا لڳي ويا.

نئين چڪاس

ان دوران اسان جي ٽيم اڳتي وڌندي رهي. نوان چيڪ شامل ڪيا ويا آهن.

اسان سوچيو: غلطيون ڇو ڪيون جيڪڏهن انهن کي روڪي سگهجي ٿو؟ ۽ انهي ڪري انهن تي عمل ڪيو جامد ڪوڊ تجزيو. اسان lint سان شروع ڪيو، جيڪو Android SDK ۾ شامل آهي. پر ان وقت هن کي اها خبر نه هئي ته ڪوٽلين ڪوڊ سان ڪيئن ڪم ڪجي، ۽ اسان وٽ اڳ ۾ ئي 75 سيڪڙو ايپليڪيشن ڪوٽلن ۾ لکيل هئي. تنهن ڪري، ٺهيل ۾ شامل ڪيا ويا lint Android اسٽوڊيو چيڪ.

هن کي ڪرڻ لاءِ، اسان کي تمام گهڻو خراب ڪرڻو پيو: Android اسٽوڊيو وٺو، ان کي ڊاڪر ۾ پيڪيج ڪريو ۽ ان کي CI تي ورچوئل مانيٽر سان هلايو، ته جيئن اهو سمجهي ته اهو حقيقي ليپ ٽاپ تي هلي رهيو آهي. پر اهو ڪم ڪيو.

اهو پڻ ان دور ۾ هو جو اسان گهڻو ڪجهه لکڻ شروع ڪيو اوزار جا امتحان ۽ لاڳو ڪيو ويو اسڪرين شاٽ ٽيسٽ. اهو تڏهن ٿيندو آهي جڏهن هڪ ريفرنس اسڪرين شاٽ هڪ الڳ ننڍي ڏيک لاءِ ٺاهيو ويندو آهي، ۽ ٽيسٽ ۾ ڏسڻ مان هڪ اسڪرين شاٽ وٺڻ ۽ ان کي معياري سڌي طرح پکسل في پکسل سان موازنہ ڪرڻ هوندو آهي. جيڪڏهن ڪو تفاوت آهي، ته ان جو مطلب اهو آهي ته ترتيب ڪٿي غلط ٿي وئي آهي يا انداز ۾ ڪجهه غلط آهي.

پر اوزارن جا امتحان ۽ اسڪرين شاٽ ٽيسٽ کي ڊوائيسز تي هلائڻ جي ضرورت آھي: ايموليٽرز تي يا حقيقي ڊوائيسز تي. انهي ڳالهه تي غور ڪندي ته اتي تمام گهڻا تجربا آهن ۽ اهي اڪثر هلائي رهيا آهن، هڪ مڪمل فارم جي ضرورت آهي. توھان جو پنھنجو فارم شروع ڪرڻ تمام گھڻو محنت طلب آھي، تنھنڪري اسان کي ھڪڙو تيار ٿيل اختيار مليو آھي - Firebase Test Lab.

فائر بيس ٽيسٽ ليب

اهو چونڊيو ويو ڇاڪاڻ ته فائر بيس هڪ گوگل پراڊڪٽ آهي، مطلب ته اهو قابل اعتماد هجڻ گهرجي ۽ ڪڏهن به مرڻ جو امڪان ناهي. قيمتون مناسب آهن: $5 في ڪلاڪ هڪ حقيقي ڊوائيس جي آپريشن، 1 $ في ڪلاڪ هڪ ايموليٽر جي آپريشن جو.

اسان جي CI ۾ فائر بيس ٽيسٽ ليب کي لاڳو ڪرڻ ۾ لڳ ڀڳ ٽي هفتا لڳا.

پر ٽيم وڌندي رهي، ۽ فائر بيس، بدقسمتي سان، اسان کي ختم ڪرڻ شروع ڪيو. ان وقت هن وٽ ڪو به SLA نه هو. ڪڏهن ڪڏهن Firebase اسان کي انتظار ڪيو جيستائين ڊوائيسز جو گهربل تعداد ٽيسٽ لاءِ مفت نه هجي، ۽ انهن کي فوري طور تي عمل ڪرڻ شروع نه ڪيو، جيئن اسان چاهيون ٿا. قطار ۾ انتظار ڪرڻ ۾ اڌ ڪلاڪ لڳي ويو، جيڪو تمام ڊگهو وقت آهي. اوزار جا امتحان هر PR تي هلايا ويا، دير سان واقعي ترقي کي سست ڪيو، ۽ پوء مهيني بل هڪ گول رقم سان آيو. عام طور تي، اهو فيصلو ڪيو ويو ته فائر بيس کي ڇڏڻ ۽ گهر ۾ ڪم ڪرڻ، ڇو ته ٽيم ڪافي وڌي چڪي هئي.

Docker + Python + bash

اسان Docker ورتو، ان ۾ ايميوليٽرز ڀريو، هڪ سادي پروگرام Python ۾ لکيو، جيڪو صحيح وقت تي گهربل ورزن ۾ ايموليٽرن جو گهربل تعداد آڻيندو آهي ۽ جڏهن ضروري هجي ته روڪي ٿو. ۽، يقينا، بيش اسڪرپٽ جا ٻه - اسان انهن کان سواء ڪٿي هوندا؟

پنج هفتا لڳي ويا اسان جي پنهنجي ٽيسٽ ماحول ٺاهڻ ۾.

نتيجي طور، هر پل جي درخواست لاء چيڪن جي هڪ وسيع ضم-بلاڪنگ لسٽ هئي:

  • آرڪ اسيمبلي؛
  • جونيٽ ٽيسٽ؛
  • لينٽ؛
  • Android اسٽوڊيو چيڪ؛
  • اوزار جا امتحان؛
  • اسڪرين شاٽ ٽيسٽ.

هن ڪيترن ئي ممڪن ڀڃڪڙي کي روڪيو. ٽيڪنيڪل طور تي سڀ ڪجهه ڪم ڪيو، پر ڊولپرز شڪايت ڪئي ته نتيجن جو انتظار تمام ڊگهو هو.

ڪيترو ڊگهو ڊگهو آهي؟ اسان ڊيٽا اپ لوڊ ڪيو Bitbucket ۽ TeamCity کان تجزيو سسٽم ۾ ۽ اهو محسوس ڪيو اوسط انتظار جو وقت 45 منٽ. اهو آهي، هڪ ڊولپر، جڏهن پل جي درخواست کولڻ، تعمير جي نتيجن لاء اوسط 45 منٽن تي انتظار ڪري ٿو. منهنجي خيال ۾، اهو تمام گهڻو آهي، ۽ توهان انهي وانگر ڪم نٿا ڪري سگهو.

يقينا، اسان اسان جي سڀني تعميرات کي تيز ڪرڻ جو فيصلو ڪيو.

اچو ته رفتار کي وڌايو

اهو ڏسي ته تعميرات اڪثر قطار ۾ بيٺا آهن، پهرين شيء اسان ڪندا آهيون وڌيڪ هارڊويئر خريد ڪيو - وسيع ترقي آسان ترين آهي. عمارتون قطار ۾ بيهڻ بند ٿي ويون، پر انتظار جو وقت ٿورڙو گهٽجي ويو، ڇاڪاڻ ته ڪجهه چيڪن پاڻ کي تمام ڊگهو وقت ورتو.

چيڪ کي هٽائڻ جيڪي تمام ڊگهو وٺن ٿا

اسان جي مسلسل انضمام انهن قسمن جي غلطين ۽ مسئلن کي پڪڙي سگهي ٿي.

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

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

هن درجي بندي جي بنياد تي، اسان چيڪن جي پوري لسٽ کي ڇڪايو. لينٽ پار ڪيو ۽ ان جي لانچ کي رات جو دير سان ملتوي ڪري ڇڏيو: صرف ان لاءِ ته اها رپورٽ پيش ڪري ته پروجيڪٽ ۾ ڪيترا مسئلا هئا. اسان ٽيڪنيڪل قرض سان الڳ الڳ ڪم ڪرڻ تي اتفاق ڪيو، ۽ Android اسٽوڊيو چيڪ مڪمل طور تي ڇڏي ويا. ڊاڪر ۾ Android اسٽوڊيو انسپيڪشن هلائڻ لاءِ دلچسپ لڳي ٿو، پر سپورٽ ۾ تمام گهڻي تڪليف جو سبب بڻجندو آهي. Android اسٽوڊيو ورزن ۾ ڪا به تازه ڪاري جو مطلب آهي ناقابل فهم بگ سان جدوجهد. اسڪرين شاٽ ٽيسٽ کي سپورٽ ڪرڻ پڻ ڏکيو هو، ڇاڪاڻ ته لائبريري تمام مستحڪم نه هئي ۽ غلط مثبت هئا. اسڪرين شاٽ ٽيسٽ کي چيڪ لسٽ مان ڪڍيو ويو آهي.

نتيجي طور، اسان وٽ رهجي ويا هئا:

  • آرڪ اسيمبلي؛
  • جونيٽ ٽيسٽ؛
  • اوزار جا امتحان.

Gradle ريموٽ ڪيش

بغير ڳري چيڪن جي، سڀ ڪجھ بهتر ٿي ويو. پر ڪمال جي ڪا حد ناهي!

اسان جي اپليڪيشن اڳ ۾ ئي 150 گريڊ ماڊلز ۾ ورهايل هئي. Gradle ريموٽ ڪيش عام طور تي هن معاملي ۾ سٺو ڪم ڪري ٿو، تنهنڪري اسان ان کي ڪوشش ڪرڻ جو فيصلو ڪيو.

Gradle ريموٽ ڪيش هڪ خدمت آهي جيڪا انفرادي ماڊلز ۾ انفرادي ڪمن لاءِ تعميراتي نمونن کي ڪيش ڪري سگهي ٿي. Gradle، اصل ۾ ڪوڊ گڏ ڪرڻ جي بدران، ريموٽ ڪيش کي دٻائڻ لاء HTTP استعمال ڪري ٿو ۽ پڇي ٿو ته ڪو ماڻهو اڳ ۾ ئي اهو ڪم ڪيو آهي. جيڪڏهن ها، اهو صرف نتيجو ڊائون لوڊ ڪري ٿو.

Gradle ريموٽ ڪيش کي هلائڻ آسان آهي ڇاڪاڻ ته Gradle هڪ Docker تصوير مهيا ڪري ٿو. اسان اهو ڪم ٽن ڪلاڪن ۾ ڪري ورتو.

توهان سڀني کي ڪرڻو هو ڊڪر لانچ ڪيو ۽ منصوبي ۾ هڪ لائن لکو. پر جيتوڻيڪ اهو جلدي شروع ڪري سگهجي ٿو، اهو تمام گهڻو وقت وٺندو هر شي کي سٺو ڪم ڪرڻ لاء.

هيٺ ڏنل ڪيش مسز گراف آهي.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

بلڪل شروع ۾، ڪيش مسز جو سيڪڙو اٽڪل 65 هو. ٽن هفتن کان پوءِ، اسان ان قدر کي 20 سيڪڙو تائين وڌائڻ ۾ ڪامياب ٿي ويا. اهو ظاهر ٿيو ته اهي ڪم جيڪي Android ايپليڪيشن گڏ ڪري ٿي انهن ۾ عجيب منتقلي انحصار آهي، جنهن جي ڪري Gradle ڪيش کي وڃائي ڇڏيو.

ڪيش کي ڳنڍڻ سان، اسان تعمير کي تمام تيز ڪيو. پر اسيمبليء جي اضافي ۾، اوزار جا امتحان پڻ آهن، ۽ اهي هڪ ڊگهو وقت وٺندا آهن. شايد سڀني تجربن کي هر پل جي درخواست لاء هلائڻ جي ضرورت ناهي. معلوم ڪرڻ لاء، اسان اثر تجزيو استعمال ڪندا آهيون.

اثر جو تجزيو

ڇڪڻ جي درخواست تي، اسان گڏ ڪريون ٿا گٽ ڊف ۽ تبديل ٿيل گرڊل ماڊل ڳوليو.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

اهو سمجھ ۾ اچي ٿو ته صرف اوزار جا امتحان هلائڻ جيڪي تبديل ٿيل ماڊلز ۽ سڀني ماڊلز کي چيڪ ڪن ٿا جيڪي انهن تي ڀاڙين ٿا. پاڙيسري ماڊلز لاءِ ٽيسٽ هلائڻ جو ڪو به مقصد ناهي: اتي ڪوڊ تبديل نه ٿيو آهي ۽ ڪجھ به نه ٽوڙي سگهي ٿو.

اوزار جا امتحان ايترو سادو نه آهن، ڇاڪاڻ ته اهي لازمي طور تي مٿين سطح جي ايپليڪيشن ماڊل ۾ واقع هجن. اسان هيورسٽڪس استعمال ڪيو بائيٽ ڪوڊ تجزيو سان اهو سمجهڻ لاءِ ته هر ٽيسٽ جو تعلق ڪهڙي ماڊل سان آهي.

اوزارن جي ٽيسٽن جي آپريشن کي اپڊيٽ ڪرڻ ته جيئن اھي صرف ان ۾ شامل ماڊلز کي جانچڻ ۾ اٽڪل اٺ ھفتا لڳا.

معائنن کي تيز ڪرڻ لاءِ قدمن ڪاميابيءَ سان ڪم ڪيو آهي. 45 منٽن کان وٺي اسان اٽڪل 15 تائين وياسون. اهو اڳ ۾ ئي عام آهي ته هڪ ڪلاڪ جي هڪ چوٿون انتظار ڪرڻ لاء.

پر هاڻ ڊولپر شڪايت ڪرڻ شروع ڪري ڇڏيا آهن ته انهن کي سمجهه ۾ نه ٿو اچي ته ڪهڙيون عمارتون شروع ٿي رهيون آهن، لاگ ڪٿي ڏسڻ لاءِ، بلڊ لال ڇو آهي، ڪهڙي ٽيسٽ ناڪام ٿي آهي وغيره.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

موٽ ۾ مسئلا ترقي کي سست ڪن ٿا، تنهنڪري اسان هر پي آر بابت واضح ۽ تفصيلي ڄاڻ مهيا ڪرڻ جي ڪوشش ڪئي ۽ ممڪن طور تي تعمير ڪيو. اسان Bitbucket to PR ۾ تبصرن سان شروع ڪيو، ظاهر ڪيو ته ڪهڙي تعمير ناڪام ٿي ۽ ڇو، ۽ Slack ۾ ٽارگيٽ ڪيل پيغام لکيا. آخر ۾، اسان پيج لاءِ پي آر ڊيش بورڊ ٺاھيو آھي انھن سڀني تعميرات جي فهرست سان جيڪي ھن وقت ھلائي رھيون آھن ۽ انھن جي حالت: قطار، ھلندڙ، حادثو يا مڪمل. توھان تعمير تي ڪلڪ ڪري سگھوٿا ۽ ان جي لاگ ڏانھن وڃو.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

تفصيلي راءِ ڏيڻ تي ڇهه هفتا گذري ويا.

منصوبو

اچو ته تازو تاريخ ڏانهن وڃو. موٽڻ واري مسئلي کي حل ڪرڻ کان پوء، اسان هڪ نئين سطح تي پهچي چڪا آهيون - اسان پنهنجي ايموليٽر فارم ٺاهڻ جو فيصلو ڪيو. جڏهن اتي ڪيترائي تجربا ۽ ايموليٽر آهن، انهن کي منظم ڪرڻ ڏکيو آهي. نتيجي طور، اسان جا سڀئي ايموليٽر لچڪدار وسيلن جي انتظام سان k8s ڪلستر ڏانھن ويا.

ان کان سواء، ٻيا منصوبا آهن.

  • واپسي Lint (۽ ٻيا جامد تجزيو). اسان اڳ ۾ ئي هن هدايت ۾ ڪم ڪري رهيا آهيون.
  • هر شي کي پي آر بلاڪر تي هلائي آخر کان آخر تائين ٽيسٽ سڀني SDK نسخن تي.

تنهن ڪري، اسان Avito ۾ مسلسل انضمام جي ترقي جي تاريخ کي ڇڪايو آهي. هاڻي مان هڪ تجربيڪار نقطه نظر کان ڪجهه صلاح ڏيڻ چاهيان ٿو.

صلاحون

جيڪڏهن مان صرف هڪ نصيحت ڏئي سگهان ٿو ته اهو هي هوندو:

مھرباني ڪري شيل اسڪرپٽ سان محتاط رھو!

بش هڪ تمام لچڪدار ۽ طاقتور اوزار آهي، اهو تمام آسان ۽ تيز آهي لکت لکڻ لاءِ. پر توهان ان سان گڏ هڪ جال ۾ پئجي سگهو ٿا، ۽، بدقسمتي سان، اسان ان ۾ پئجي ويا.

اهو سڀ ڪجهه سادي اسڪرپٽ سان شروع ٿيو جيڪي اسان جي تعميراتي مشينن تي هلن ٿيون:

#!/usr/bin/env bash
./gradlew assembleDebug

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

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

توهان تصور ڪري سگهو ٿا مزدورن جي قيمتن جي ترقي لاءِ اهڙي لکت جي. مان توهان کي صلاح ڏيان ٿو ته توهان هن چڪر ۾ نه وڃو.

ڇا متبادل ٿي سگهي ٿو؟

  • ڪا به لکت واري ٻولي. ڏانهن لکو پٿون يا ڪوٽلن اسڪرپٽ وڌيڪ آسان ڇو ته اهو پروگرامنگ آهي، نه اسڪرپٽ.
  • يا فارم ۾ سڀ تعمير منطق بيان ڪريو حسب ضرورت گريڊ جا ڪم توهان جي منصوبي لاء.

اسان فيصلو ڪيو ته ٻئي آپشن کي چونڊيو، ۽ ھاڻي اسان منظم طور تي سڀني بش اسڪرپٽس کي حذف ڪري رھيا آھيون ۽ گھڻا ڪسٽم گريڊ ڪم لکي رھيا آھيون.

ترڪيب #2: ڪوڊ ۾ انفراسٽرڪچر اسٽور.

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

اسڪرپٽ کي پروجيڪٽ ۾ محفوظ ڪري سگھجي ٿو. ماحول سان ڇا ڪجي؟

ھدايت #3: ڊڪر ماحول سان مدد ڪري سگھي ٿو.

اهو ضرور مدد ڪندو Android ڊولپرز؛ iOS وٽ اڃا تائين ناهي، بدقسمتي سان.

هي هڪ سادي ڊاکر فائل جو هڪ مثال آهي جنهن ۾ jdk ۽ android-sdk شامل آهن:

FROM openjdk:8

ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" 
    ANDROID_HOME="/usr/local/android-sdk" 
    ANDROID_VERSION=26 
    ANDROID_BUILD_TOOLS_VERSION=26.0.2

# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android 
    && cd "$ANDROID_HOME" 
    && curl -o sdk.zip $SDK_URL 
    && unzip sdk.zip 
    && rm sdk.zip 
    && yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses

# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" 
    "platforms;android-${ANDROID_VERSION}" 
    "platform-tools"

RUN mkdir /application
WORKDIR /application

هن Docker فائل کي لکڻ کان پوءِ (مان توهان کي هڪ راز ٻڌايان ٿو، توهان کي ان کي لکڻ جي ضرورت ناهي، پر صرف ان کي GitHub مان تيار ڪيل ڇڪيو) ۽ تصوير کي گڏ ڪيو، توهان کي هڪ ورچوئل مشين ملندي جنهن تي توهان ايپليڪيشن ٺاهي سگهو ٿا. ۽ جونيٽ ٽيسٽون هلائڻ.

ٻه مکيه سبب هي آهن ڇو ته اهو احساس آهي اسڪاليبلٽي ۽ ورجائيبل. ڊاڪر استعمال ڪندي، توهان تڪڙو ڪري سگهو ٿا درجن جي تعمير ايجنٽ جيڪي اڳئين ماحول وانگر ساڳيو ماحول هوندا. هي CI انجنيئرن جي زندگي کي تمام آسان بڻائي ٿو. اهو تمام آسان آهي android-sdk کي ڊاکر ۾ ڌڪڻ، پر ايموليٽرن سان اهو ٿورو وڌيڪ ڏکيو آهي: توهان کي ٿورو محنت ڪرڻو پوندو (يا GitHub مان ختم ٿيل ڊائون لوڊ ٻيهر).

ٽپ نمبر 4: اهو نه وساريو ته معائنو معائنن لاءِ نه پر ماڻهن لاءِ ڪيو ويندو آهي.

جلدي ۽، سڀ کان اهم، واضح راءِ ڊولپرز لاءِ تمام ضروري آهي: ڇا ڀڃي، ڪهڙي ٽيسٽ ناڪام ٿي، مان ڪٿي ٺاهي سگهان ٿو.

ترڪيب #5: لڳاتار انٽيگريشن کي ترقي ڪندي عملي رهو.

واضح طور تي سمجھو ته توهان ڪهڙي قسم جي غلطين کي روڪڻ چاهيو ٿا، ڪيترا وسيلا، وقت، ۽ ڪمپيوٽر جو وقت توهان خرچ ڪرڻ لاءِ تيار آهيو. چيڪ جيڪي تمام ڊگهو وٺن ٿا، مثال طور، رات جو دير سان ملتوي ڪري سگهجي ٿو. ۽ انهن مان جيڪي نه پڪڙي اهم غلطيون مڪمل طور تي ڇڏي ڏنو وڃي.

ھدايت #6: تيار ٿيل اوزار استعمال ڪريو.

ھاڻي ڪيتريون ئي ڪمپنيون آھن جيڪي ڪلائوڊ سي آءِ مهيا ڪن ٿيون.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

اهو ننڍڙو ٽيمن لاء سٺو حل آهي. توهان کي ڪنهن به شيءِ جي مدد ڪرڻ جي ضرورت ناهي، صرف ٿورا پئسا ڏيو، پنهنجي ايپليڪيشن کي ٺاهيو ۽ اوزارن جا امتحان به هلايو.

ھدايت #7: ھڪڙي وڏي ٽيم ۾، گھر ۾ حل وڌيڪ منافعي وارا آھن.

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

اقتصاديات اسان جي پوري زندگي کي بيان ڪري ٿي، بشمول مسلسل انضمام. مون اسان جي مسلسل انضمام جي ترقي جي هر مرحلي لاء مزدورن جي قيمتن جو هڪ شيڊول ٺاهيو.

موبائل ڊولپمينٽ ٽيم ۾ CI جو ارتقا

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

اسان ان خيال سان شروع ڪيو ته آٽوميشن جي ضرورت آهي ڇو ته ماڻهو قيمتي آهن، اهي غلطيون ڪن ٿا ۽ سست آهن. پر ماڻهو پڻ خودڪار. تنهن ڪري، سڀئي ساڳيا مسئلا خودڪار تي لاڳو ٿين ٿا.

  • خودڪار قيمت آهي. مزدور جي شيڊول کي ياد رکو.
  • جڏهن اهو خودڪار طريقي سان اچي ٿو، ماڻهو غلطي ڪندا آهن.
  • ڪڏهن ڪڏهن اهو خودڪار ڪرڻ لاء تمام سست آهي، ڇاڪاڻ ته هر شيء انهي طريقي سان ڪم ڪري ٿي. ٻيو ڪجهه بهتر ڇو، اهو سڀ ڪجهه مسلسل انضمام ڇو؟

پر مون وٽ انگ اکر آهن: 20 سيڪڙو اسيمبلين ۾ غلطيون پڪڙجي ويون آهن. ۽ اهو نه آهي ڇو ته اسان جا ڊولپرز خراب ڪوڊ لکندا آهن. اهو ئي سبب آهي ته ڊولپرز کي يقين آهي ته جيڪڏهن اهي ڪجهه غلطي ڪن ٿا، اهو ترقي ۾ ختم نه ٿيندو، اهو خودڪار چيڪن ذريعي پڪڙيو ويندو. ان جي مطابق، ڊولپرز وڌيڪ وقت خرچ ڪري سگھن ٿا ڪوڊ ۽ دلچسپ شيون لکڻ جي، بجاءِ مقامي طور تي ڪجھ هلائڻ ۽ جانچڻ جي.

مسلسل انضمام جي مشق ڪريو. پر اعتدال ۾.

رستي جي ذريعي، نڪولائي نيسٽروف نه رڳو پاڻ کي عظيم رپورٽون ڏئي ٿو، پر پروگرام ڪميٽي جو ميمبر پڻ آهي. AppsConf ۽ ٻين کي توهان جي لاءِ بامعنيٰ تقرير تيار ڪرڻ ۾ مدد ڪري ٿي. ايندڙ ڪانفرنس جي پروگرام جي مڪمليت ۽ افاديت جو اندازو لڳائي سگهجي ٿو عنوانن ۾ شيڊول. ۽ تفصيل لاءِ، 22-23 اپريل تي Infospace تي اچو.

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

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