جڏهن ڪنهن به وڏي منصوبي کي شروع ڪندي، توهان سوچڻ شروع ڪيو: "ڪهڙو سافٽ ويئر ان جي خدمت ڪرڻ لاء استعمال ڪرڻ بهتر آهي؟" هڪ آئي ٽي پروجيڪٽ ايندڙ ورزن کي جاري ڪرڻ کان پهريان ڪيترن ئي مرحلن مان گذري ٿو. اهو سٺو آهي جڏهن انهن مرحلن جو سلسلو خودڪار آهي. آئي ٽي پروجيڪٽ جو نئون ورزن جاري ڪرڻ جو خودڪار عمل پاڻ کي سڏيو ويندو آهي مسلسل پابندي. BuildBot هن عمل کي لاڳو ڪرڻ ۾ اسان لاء هڪ سٺو مددگار ثابت ٿيو.
هن آرٽيڪل ۾ مون فيصلو ڪيو ته ممڪنن جو هڪ جائزو مهيا ڪرڻ BuildBot. هي سافٽ ويئر ڇا جي قابل آهي؟ هن سان ڪيئن رجوع ڪجي ۽ هن سان هڪ عام اثرائتو ڪم ڪندڙ رشتو ڪيئن قائم ڪجي؟ توھان پنھنجي مشين تي پنھنجي پروجيڪٽ جي تعمير ۽ جانچ ڪرڻ لاءِ ڪم ڪندڙ سروس ٺاھڻ سان پنھنجو تجربو پاڻ لاڳو ڪري سگھو ٿا. Contents
ڪم جي تقسيم جي فن تعمير جو مرڪز آهي تعمير ماسٽر. اها هڪ خدمت آهي جيڪا:
ٽريڪ رکي ٿو منصوبي جي ماخذ جي وڻ ۾ تبديليون
موڪلي ٿو ڪمانڊ جيڪي ڪم ڪندڙ سروس پاران پروجيڪٽ کي تعمير ڪرڻ ۽ ان کي جانچڻ لاءِ عمل ڪرڻ گهرجن
اطلاع ڏئي ٿو استعمال ڪندڙن جي عملن جي نتيجن بابت
تعمير ماسٽر فائل ذريعي ترتيب ڏنل master.cfg. ھي فائل روٽ ۾ آھي تعمير ماسٽر. بعد ۾ مان ڏيکاريندس ته هي روٽ ڪيئن ٺهيل آهي. فائل پاڻ master.cfg هڪ python اسڪرپٽ تي مشتمل آهي جيڪا ڪال استعمال ڪري ٿي BuildBot.
ايندڙ سڀ کان اهم اعتراض BuildBot هڪ نالو آهي ورڪر. هي خدمت ڪنهن ٻئي ميزبان تي مختلف OS سان شروع ڪري سگهجي ٿي، يا شايد هڪ تي جتي تعمير ماسٽر. اهو پڻ موجود ٿي سگھي ٿو خاص طور تي تيار ڪيل ورچوئل ماحول ۾ پنهنجي پيڪيجز ۽ متغيرن سان. اهي مجازي ماحول تيار ڪري سگھجن ٿا python افاديت استعمال ڪندي virtualenv, venv.
تعمير ماسٽر هر ڪنهن کي حڪم نشر ڪري ٿو ورڪر-y، ۽ هو، موڙ ۾، انهن کي پورو ڪري ٿو. اهو آهي، اهو ظاهر ٿئي ٿو ته هڪ منصوبي جي تعمير ۽ جانچ جو عمل جاري ٿي سگهي ٿو ورڪر-e ونڊوز هلائيندڙ ۽ ٻئي ورڪر تي لينڪس هلائيندڙ.
چيڪ آئوٽ ڪريو پروجيڪٽ جو ذريعو ڪوڊ هر هڪ تي ٿئي ٿو ورڪر-اي
3. تنصيب
سو، اچو ته هلون. مان استعمال ڪندس Ubuntu 18.04 ميزبان طور. مان ان تي هڪ رکي ڇڏيندس تعمير ماسٽر- هڪ ۽ هڪ ورڪر-ا پر پهرين توهان کي python3.7 انسٽال ڪرڻ جي ضرورت آهي:
ايندڙ قدم انسٽال ڪرڻ آهي ٽوئيٽ ڪيو и BuildBot، انهي سان گڏ پيڪيجز جيڪي توهان کي اضافي ڪارڪردگي استعمال ڪرڻ جي اجازت ڏين ٿا BuildBot-دي.
/*Все что под sudo будет установленно для всех пользователей в директорию /usr/local/lib/python3.7/dist-packages*/
#На хосте который производит мониторинг Worker-ов
sudo pip install twisted #Библиотека twisted
sudo pip install buildbot #BuildMaster
#Дополнительный функционал
pip install pysqlite3 #Устанавливаем базу sqllite в учебных целях
pip install jinja2 #framework наподобие django, для web и для почтовых рассыллок
pip install autobahn #Web cокеты для связи BuildMaster->Worker
pip install sqlalchemy sqlalchemy-migrate #Для отображения схемы базы данных
#Для Web отображения BuildBot-a
pip install buildbot-www buildbot-grid-view buildbot-console-view buildbot-waterfall-view
pip install python-dateutil #Отображение дат в web
#На стороне хоста который непосредственно осуществляет сборку и тестирование
pip install buildbot-worker #Worker
#Дополнительный функционал
sudo pip install virtualenv #Виртуальная среда
4. پهريون قدم
ٺاهڻ جو وقت تعمير ماسٽر. اهو اسان جي فولڊر ۾ هوندو /گھر/هبر/ماسٽر.
mkdir master
buildbot create-master master # Собственно сдесь и создаем
جڏهن توهان هلندا آهيو ورڪر، پوءِ ڊفالٽ طور ان ۾ ٺاهي ويندي گھر/هبر/ ڪم ڪندڙ پروجيڪٽ جي نالي سان فولڊر، جنهن ۾ بيان ڪيو ويو آهي master.cfg. ۽ فولڊر ۾ پروجيڪٽ جي نالي سان هڪ ڊاريڪٽري ٺاهي ويندي کپن، ۽ ان کي جاري رکندو چيڪ آئوٽ ڪريو. لاء ڪم ڪندڙ ڊاريڪٽري ورڪر-۽ اهو هڪ ڊاريڪٽري بڻجي ويندو /home/habr/yourProject/build.
”گولڊن ڪنجي
۽ ھاڻي ڇا لاءِ مون پوئين پيراگراف لکيو آھي: ھڪڙو اسڪرپٽ جيڪو ماسٽر کان مطالبو ڪندو ورڪر-۽ هن ڊاريڪٽري ۾ ريموٽ طور تي ڪيو ويندو ان تي عمل نه ڪيو ويندو ڇاڪاڻ ته اسڪرپٽ کي هلائڻ جي اجازت ناهي. صورتحال کي درست ڪرڻ لاء، توهان کي هڪ چاٻي جي ضرورت پوندي --umask = 0o22، جيڪو هن ڊاريڪٽري ڏانهن لکڻ کان منع ڪري ٿو، پر لانچ جا حق برقرار رکندو. ۽ اهو سڀ ڪجهه اسان جي ضرورت آهي.
تعمير ماسٽر и ورڪر هڪ ٻئي سان تعلق قائم ڪرڻ. اهو ٿئي ٿو ته اهو بند ٿي وڃي ٿو ۽ ورڪر جي جواب لاء ڪجهه وقت جي انتظار ۾ تعمير ماسٽر-اي. جيڪڏهن ڪو جواب نه آهي، ڪنيڪشن ٻيهر شروع ڪيو ويندو. چاٻي --رکڻ = 60 صرف ان کان پوء وقت جي نشاندهي ڪرڻ جي ضرورت آهي سان ڳنڍڻ ريبوٽس.
5. ترتيب. قدم بہ قدم نسخو
ڪنفگريشن تعمير ماسٽر مشين جي پاسي تي ڪيو ويو آهي جتي اسان حڪم جاري ڪيو ٺاهڻ وارو ماسٽر. اسان جي صورت ۾، هي هڪ ڊاريڪٽري آهي /گھر/هبر/ماسٽر. ٺاھ جوڙ فائيل master.cfg اڃا موجود ناهي، پر ڪمانڊ پاڻ ئي فائل ٺاهي چڪو آهي master.cmg.sample. توھان کي ان کي تبديل ڪرڻ جي ضرورت آھي master.cfg.sample в master.cfg
mv master.cfg.sample master.cfg
اچو ته ان کي کوليو master.cfg. ۽ اچو ته ڏسو ته اهو ڇا تي مشتمل آهي. ۽ ان کان پوء، اچو ته اسان جي پنهنجي ترتيب واري فائيل ٺاهڻ جي ڪوشش ڪريو.
BuildmasterConfig - ترتيب واري فائل جي بنيادي لغت. ان کي ترتيب ڏيڻ واري فائل ۾ شامل ڪيو وڃي. استعمال جي آسانيءَ لاءِ، تشڪيل ڪوڊ ۾ ھڪڙو عرف متعارف ڪرايو ويو آھي "ج". عنوان ڪيشيون в c["keyFromDist"] سان تعامل لاءِ مقرر ٿيل عنصر آهن تعمير ماسٽر. هر چاٻي لاء، لاڳاپيل اعتراض هڪ قدر جي طور تي متبادل آهي.
چاٻي ذريعي تبديلي_ذريعو ڊڪشنري c اسان لسٽ تائين پهچون ٿا جتي اسان هڪ اعتراض رکڻ چاهيون ٿا جيڪو پروجيڪٽ جي سورس ڪوڊ سان مخزن کي پول ڪري ٿو. مثال استعمال ڪري ٿو Git مخزن جيڪو ڪجهه وقفن تي پول ڪيو ويو آهي.
پهريون دليل توهان جي مخزن جو رستو آهي.
ڪم ڪندڙ فولڊر ڏانهن رستو ڏيکاري ٿو جتي پاسي تي ورڪر- رستي سان لاڳاپيل /home/habr/worker/yourProject/build git مخزن جي مقامي ورزن کي ذخيرو ڪندو.
شاخ مخزن ۾ هڪ مخصوص شاخ تي مشتمل آهي جنهن جي پيروي ڪرڻ گهرجي.
پولنگ جو وقفو جنهن کان پوءِ سيڪنڊن جو تعداد شامل آهي تعمير ماسٽر تبديلين لاءِ مخزن کي پول ڪندو.
پروجيڪٽ جي مخزن ۾ تبديلين کي ٽريڪ ڪرڻ جا ڪيترائي طريقا آهن.
سادو طريقو آهي ووٽ، جنهن جو مطلب آهي تعمير ماسٽر وقتي طور تي سرور کي مخزن سان گڏ ڪري ٿو. جيڪڏهن انجام ڏيو repository ۾ تبديلين کي ظاهر ڪيو، پوء تعمير ماسٽر ڪجهه دير سان هڪ اندروني اعتراض ٺاهيندو تبديل ڪريو ۽ ان کي ايونٽ ھينڊلر ڏانھن موڪليو اسپيڊيور، جيڪو منصوبي جي تعمير ۽ جانچ ڪرڻ لاءِ قدم شروع ڪندو ورڪر-اي انهن مرحلن مان اشارو ڪيو ويندو ڪاري مخزن بلڪل تي ورڪرهي مخزن جي مقامي ڪاپي ٺاهيندو. ھن عمل جا تفصيل ھيٺ ڏنل ٻن حصن ۾ بيان ڪيا ويندا. (5.4 и 5.5).
مخزن ۾ تبديلين کي ٽريڪ ڪرڻ جو هڪ اڃا به وڌيڪ خوبصورت طريقو آهي پيغامن کي سڌو سنئون سرور کان موڪلڻ جيڪو ان کي ميزباني ڪري رهيو آهي. تعمير ماسٽر- پروجيڪٽ جي سورس ڪوڊ کي تبديل ڪرڻ بابت. انهي صورت ۾، جيترو جلدي ڊولپر ٺاهي ٿو انجام ڏيو، سرور پروجيڪٽ جي مخزن سان گڏ هڪ پيغام موڪليندو تعمير ماسٽر-ي. ۽ هو، موڙ ۾، هڪ اعتراض ٺاهي ان کي مداخلت ڪندو PBCchangeSource. اڳيون، هي اعتراض ڏانهن منتقل ڪيو ويندو اسپيڊيور، جيڪو پروجيڪٽ ٺاهڻ ۽ ان کي جانچڻ لاءِ قدمن کي چالو ڪري ٿو. هن طريقي جو هڪ اهم حصو ڪم ڪري رهيو آهي ٿلهو- مخزن ۾ سرور اسڪرپٽ. لکت ۾ ٿلهو-a، عملن جي پروسيسنگ لاء ذميوار جڏهن انجام ڏيو-e، توھان کي استعمال ڪرڻ جي ضرورت آھي موڪلڻ ۽ نيٽ ورڪ ايڊريس بيان ڪريو تعمير ماسٽر-اي. توھان کي پڻ بيان ڪرڻ جي ضرورت آھي نيٽ ورڪ پورٽ جيڪو ٻڌندو PBCchangeSource. PBCchangeSourceرستي ۾، حصو آهي تعمير ماسٽر-اي. هن طريقي جي اجازت جي ضرورت پوندي پنهنجا-a سرور تي جتي پروجيڪٽ مخزن واقع آهي. توھان کي پھريون ڀيرو ضرورت پوندي مخزن جو بيڪ اپ.
periodicBuildTimer هن دور جي وقت کي سيڪنڊن ۾ بيان ڪري ٿو.
تعمير ڪارخانو هڪ مخصوص ٺاهي ٿو کپن، جيڪو پوءِ تعمير ڪرڻ وارو ڏانهن موڪلي ٿو ورڪر. جي تعمير ڪارخانو جي پيروي ڪرڻ جي قدمن جي نشاندهي ڪري ٿو ورڪر-ي. طريقن کي سڏڻ سان قدم شامل ڪيا ويا آهن قدم شامل ڪريو
هن مثال ۾ پهريون شامل قدم آهي git صاف -d -f -f -xپوءِ گيٽ چڪاس. اهي عمل پيراگراف ۾ شامل آهن طريقو، جيڪو واضح طور تي بيان نه ڪيو ويو آهي پر هڪ ڊفالٽ قدر جو مطلب آهي تازو. پيرا ميٽر موڊ = 'وڌندڙ' ظاهر ڪري ٿو ته فائلون ڊاريڪٽري مان آهن جتي چيڪ آئوٽ، جڏهن ته مخزن مان غائب، اڻڄاتل رهي.
ٻيو شامل ڪيل قدم اسڪرپٽ کي سڏي رهيو آهي پرک پيرا ميٽر سان هيلو پاسي تي ورڪر- ڊاريڪٽري مان /home/habr/worker/yourProject/build ماحولياتي تبديليءَ سان PATHONPATH=... اهڙيءَ طرح، توهان پنهنجون اسڪرپٽ لکي سگهو ٿا ۽ انهن کي پاسي تي هلائي سگهو ٿا. ورڪر- هر قدم util.ShellCommand. اهي اسڪرپٽ سڌو سنئون مخزن ۾ رکي سگهجن ٿيون. پوء تي چيڪ آئوٽ-اِن ۾ پئجي ويندا /home/habr/worker/yourProject/build. تنهن هوندي به، اتي ٻه آهن "پر":
ورڪر چاٻي سان ٺاهيو وڃي --ماسڪ انهي ڪري ته اهو بعد ۾ عملدرآمد جي حقن کي بلاڪ نٿو ڪري چيڪ آئوٽ ڪريو-دي.
تي گٽ پٽي-e انھن لکتن مان توھان کي ملڪيت جي وضاحت ڪرڻ جي ضرورت آھي قابل عملتنهنڪري بعد ۾ چيڪ آئوٽ-e گيٽ اسڪرپٽ تي عمل ڪرڻ جو حق نه وڃايو.
ھاڻي مان توھان کي ٻڌايان ٿو پيرا ميٽرز بابت BuilderConfig.
نالو نالو بيان ڪري ٿو تعمير ڪرڻ وارو-ا هتي اسان ان جو نالو رکيو توهان جو منصوبو... هن جو مطلب آهي ته تي ورڪر- اھو ئي رستو ٺاھيو ويندو /home/habr/worker/yourProject/build. شيڊولر ڳولڻ تعمير ڪرڻ وارو صرف هن نالي سان.
ڪم ڪندڙ جا نالا ورق تي مشتمل آهي ورڪر-ايس. جن مان هر هڪ کي شامل ڪيو وڃي ج['مزدور'].
ڪارخانو - مخصوص کپن، جنهن سان لاڳاپيل آهي تعمير ڪرڻ وارو. هو اعتراض موڪليندو کپن تي ورڪر ھن ۾ شامل سڀني مرحلن کي مڪمل ڪرڻ لاء کپن-دي.
6. توهان جي پنهنجي ترتيب جو مثال
هتي هڪ مثال آهي پروجيڪٽ آرڪيٽيڪچر جنهن کي مان لاڳو ڪرڻ جي تجويز پيش ڪريان ٿو BuildBot .
اسان هڪ ورزن ڪنٽرول سسٽم طور استعمال ڪنداسين svn. مخزن پاڻ کي ڪنهن قسم جي ڪڪر ۾ واقع هوندو. هتي هن بادل جو پتو آهي svn.host/svn/yourProject/trunk. بادل جي هيٺان svn اتي هڪ کاتي جو نالو آهي: يوزر, passwd: پاسورڊ. اسڪرپٽ جيڪي قدمن جي نمائندگي ڪن ٿا کپن-a به برانچ ۾ svn، هڪ الڳ فولڊر ۾ buildbot/worker_linux. اهي اسڪرپٽ محفوظ ڪيل ملڪيت سان مخزن ۾ واقع آهن عملدرآمد.
تعمير ماسٽر и ورڪر ساڳئي ميزبان تي هلائي پروجيڪٽ. ميزبان .تعمير ماسٽر ان جي فائلن کي فولڊر ۾ محفوظ ڪري ٿو /گھر/هبر/ماسٽر. ورڪر اهو هيٺين رستي ۾ ذخيرو ٿيل آهي گھر/هبر/ ڪم ڪندڙ. رابطي جو عمل تعمير ماسٽر-a ۽ ورڪر-a پروٽوڪول جي مطابق پورٽ 4000 ذريعي ڪيو ويندو آهي BuildBot-a، اهو آهي 'pb' پروٽوڪول
ٽارگيٽ پروجيڪٽ مڪمل طور تي پٿون ۾ لکيل آهي. ڪم آهي ان جي تبديلين کي ٽريڪ ڪرڻ، هڪ قابل عمل فائل ٺاهي، دستاويز ٺاهي، ۽ جانچ کي منظم ڪرڻ. ناڪامي جي صورت ۾، سڀني ڊولپرز کي اي ميل ذريعي پيغام موڪلڻ جي ضرورت آهي ته اتي هڪ ناڪام عمل آهي.
لکڻ دوران منهنجي master.cfg ڪيتريون ئي غلطيون ڪيون وينديون، تنهنڪري لاگ فائل پڙهڻ جي ضرورت پوندي. جي طور تي ذخيرو ٿيل آهي تعمير ماسٽر- ec مطلق رستو /home/habr/master/twistd.log، ۽ پاسي تي ورڪر- هڪ مڪمل رستو سان /home/habr/worker/twistd.log. جئين توهان غلطي پڙهي ۽ ان کي درست ڪريو، توهان کي خدمت ٻيهر شروع ڪرڻ جي ضرورت پوندي تعمير ماسٽر-ا هتي اهو ڪيئن ڪيو ويو آهي:
پهرين، اچو ته هڪ نظر وٺو svn_poller. اهو اڃا تائين ساڳيو انٽرفيس آهي، باقاعده هڪ منٽ ۾ هڪ ڀيرو مخزن جي پولنگ. هن معاملي ۾ svn_poller صرف شاخ تائين رسائي ٽٻڪن. پراسرار نموني split_file=util.svn.split_file_alwaystrunk قاعدن کي سيٽ ڪري ٿو: فولڊر جي جوڙجڪ کي ڪيئن ٽوڙڻ svn شاخن تي. هو انهن کي لاڳاپا رستا پڻ پيش ڪري ٿو. ان جي بدلي ۾ split_file_alwaystruunk اهو چئي عمل کي آسان بڻائي ٿو ته مخزن ۾ صرف شامل آهي ٽٻڪن.
В شيڊولرز اشارو ڪيو فلٽر تبديل ڪريوجيڪو ڏسي ٿو ڪو ۽ ان سان هڪ شاخ جوڙيو ٽٻڪن جي ذريعي ڏنل انجمن جي مطابق split_file_alwaystruunk. ۾ تبديلين جو جواب ٽٻڪن، لانچ تعمير ڪرڻ وارو نالي سان توهان جو منصوبو.
ملڪيت هتي اهو ضروري آهي ته منتظم کي پروسيس جي مالڪ جي طور تي تعمير ۽ جانچ جي نتيجن جي ميلنگ لسٽون حاصل ڪري.
قدم کپن-a چيڪ آئوٽ ڪريو مخزن جي مقامي ورزن ۾ واقع ڪنهن به فائل کي مڪمل طور تي حذف ڪرڻ جي قابل ورڪر-اي. ۽ پوء مڪمل ڪريو svn اپڊيٽ. موڊ پيٽرولر ذريعي ترتيب ڏنل آهي موڊ = پورو, طريقو = تازو. پيرا ميٽر haltOnTailure چوي ٿو ته جيڪڏھن svn اپڊيٽ غلطي سان عمل ڪيو ويندو، پوء تعمير ۽ جانچ جي سڄي عمل کي معطل ڪيو وڃي، ڇاڪاڻ ته وڌيڪ عملن جو مطلب نه آهي.
6.3 توهان ڏانهن خط: صحافي اعلان ڪرڻ جا مجاز آهن
رپورٽر اي ميل ذريعي اطلاع موڪلڻ لاءِ هڪ خدمت آهي.
template_html=u'''
<h4>Статус построенного релиза: {{ summary }}</h4>
<p>Используемый сервис для постраения: {{ workername }}</p>
<p>Проект: {{ projects }}</p>
<p>Для того что бы посмотреть интерфейс управления пройдите по ссылке: {{ buildbot_url }}</p>
<p>Для того что бы посмотреть результат сборки пройдите по ссылке: {{ build_url }}</p>
<p>Используя WinSCP можно подключиться к серверу c ip:xxx.xx.xxx.xx. Войдя под habr/password, забрать собранный executable файл с директории ~/worker/yourProject/build/dist.</p>
<p><b>Построение было произведено через Buildbot</b></p>
'''
sendMessageToAll = reporters.MailNotifier(fromaddr="[email protected]",
sendToInterestedUsers=True,
lookup="your.domain",
relayhost="smtp.your.domain",
smtpPort=1025,
mode="warnings",
extraRecipients=['[email protected]'],
messageFormatter=reporters.MessageFormatter(
template=template_html,
template_type='html',
wantProperties=True,
wantSteps=True)
)
c['services'] = [sendMessageToAll]
موڊ = ڊيڄاريندڙ چوي ٿو ته ميلنگ صرف ٿيڻ گهرجي جيڪڏهن گهٽ ۾ گهٽ هڪ قدم آهي کپن-a، جيڪو اسٽيٽس جي ناڪامي يا ڊيڄاريندڙ سان ختم ٿيو. ڪاميابي جي صورت ۾، خبر ليٽ موڪلڻ جي ڪا ضرورت ناهي.
اضافي وصول ڪندڙ انهن ماڻهن جي هڪ فهرست تي مشتمل آهي جن کي ميل موڪلڻ گهرجي ان کان علاوه مالڪ ۽ ان شخص جنهن انجام ڏيو.
پيغام فارميٽ ھڪڙو اعتراض آھي جيڪو بيان ڪري ٿو پيغام جي شڪل، ان جي ٽيمپليٽ، ۽ متغير جو ھڪڙو سيٽ جنجا 2. اختيارن جهڙوڪ چاهي ملڪيت = سچ и چاهيو قدم = سچ دستياب متغيرن جي ھن سيٽ جي وضاحت ڪريو.
سان ['خدمتون'] = [sendMessageToAll] خدمتن جي هڪ فهرست مهيا ڪري ٿي، جن مان اسان جي هوندي رپورٽر.
اسان ڪيو! مبارڪون
اسان اسان جي پنهنجي ترتيب ٺاهي ۽ ڪارڪردگي کي ڏٺو ته اهو قابل آهي. BuildBot. اهو، منهنجو خيال آهي، اهو سمجهڻ لاء ڪافي آهي ته ڇا هي اوزار توهان جي پروجيڪٽ ٺاهڻ جي ضرورت آهي. ڇا توهان هن ۾ دلچسپي وٺندا آهيو؟ ڇا اهو توهان لاء مفيد ٿيندو؟ ڇا هو ڪم ڪرڻ لاء آرام سان آهي؟ پوءِ مان هي مضمون بيڪار نه لکي رهيو آهيان.
۽ اڳتي. مان چاهيان ٿو پروفيشنل ڪميونٽي استعمال ڪندي BuildBot، وسيع ٿي ويا، دستور العمل ترجمو ڪيا ويا، ۽ اڃا به وڌيڪ مثال هئا.
توهان جي ڌيان لاء توهان سڀني جي مهرباني. سدا خوشقسمت رهو.