BuildBot سان مسلسل انضمام جو مثال لاڳو ڪرڻ

BuildBot سان مسلسل انضمام جو مثال لاڳو ڪرڻ
(تصوير پاران ڪمپيوٽرائيزر کان Pixabay)

هيلو!

منهنجو نالو آهي Evgeniy Cherkinمان هڪ کان کني ڪمپني ۾ هڪ ترقياتي ٽيم تي پروگرامر آهيان پوليٽيڪل.

جڏهن ڪنهن به وڏي منصوبي کي شروع ڪندي، توهان سوچڻ شروع ڪيو: "ڪهڙو سافٽ ويئر ان جي خدمت ڪرڻ لاء استعمال ڪرڻ بهتر آهي؟" هڪ آئي ٽي پروجيڪٽ ايندڙ ورزن کي جاري ڪرڻ کان پهريان ڪيترن ئي مرحلن مان گذري ٿو. اهو سٺو آهي جڏهن انهن مرحلن جو سلسلو خودڪار آهي. آئي ٽي پروجيڪٽ جو نئون ورزن جاري ڪرڻ جو خودڪار عمل پاڻ کي سڏيو ويندو آهي مسلسل پابندي. BuildBot هن عمل کي لاڳو ڪرڻ ۾ اسان لاء هڪ سٺو مددگار ثابت ٿيو.

هن آرٽيڪل ۾ مون فيصلو ڪيو ته ممڪنن جو هڪ جائزو مهيا ڪرڻ BuildBot. هي سافٽ ويئر ڇا جي قابل آهي؟ هن سان ڪيئن رجوع ڪجي ۽ هن سان هڪ عام اثرائتو ڪم ڪندڙ رشتو ڪيئن قائم ڪجي؟ توھان پنھنجي مشين تي پنھنجي پروجيڪٽ جي تعمير ۽ جانچ ڪرڻ لاءِ ڪم ڪندڙ سروس ٺاھڻ سان پنھنجو تجربو پاڻ لاڳو ڪري سگھو ٿا.

Contents

Contents

1. ڇو BuildBot؟
2. تصور BuildMaster جي اڳواڻي ۾
3. تنصيب
4. پهريون قدم

5. ترتيب. قدم بہ قدم نسخو

5.1 BuildmasterConfig
5.2 ڪارڪنن
5.3 تبديلي_ذريعو
5.4 شيڊيولر

5.5 تعمير ڪارخانو
5.6 تعمير ڪندڙ

6. توهان جي پنهنجي ترتيب جو مثال

6.1 توهان جي master.cfg جي رستي تي
6.2 svn سان ڪم ڪرڻ
6.3 توهان ڏانهن خط: صحافي اعلان ڪرڻ جا مجاز آهن

اسان ڪيو! مبارڪون

1. ڇو BuildBot؟

اڳ ۾ حبر-اي تي عمل درآمد بابت مضمونن ۾ آيا مسلسل پابندي استعمال ڪندي BuildBot. مثال، هي هڪ مون کي اهو سڀ کان وڌيڪ معلوماتي مليو. ٻيو مثال آهي- وڌيڪ آسان. اهي مضمون موسمي ٿي سگهن ٿا دستور مان مثال۽ ان ان کان پوء، انگريزيء ۾. ڪوپ هڪ سٺو شروعاتي نقطو ٺاهي ٿو. انهن مضمونن کي پڙهڻ کان پوء، توهان شايد فوري طور تي ڪجهه چاهيو ٿا BuildBot ڪرڻ.

رکو! ڇا ڪنهن واقعي ان کي پنهنجي منصوبن ۾ استعمال ڪيو آهي؟ اهو نڪتو ته ها گھڻا ان کي پنهنجي ڪمن ۾ لاڳو ڪيو. ملي سگهي ٿو مثال استعمال ڪرڻ BuildBot ۽ گوگل ڪوڊ آرڪائيوز ۾.

پوء ماڻهن کي استعمال ڪرڻ جي منطق ڇا آهي بلڊ بوٽ؟ سڀ کان پوء، اتي ٻيا اوزار آهن: CruiseControl и جينکن. مان هن طرح جواب ڏيندس. گهڻن ڪمن لاءِ جينکن ۽ سچ ڪافي ٿيندو. ان جي بدلي ۾، BuildBot - وڌيڪ موافقت، جڏهن ته مسئلا اتي ئي حل ڪيا ويا آهن جيئن صرف اندر جينکن. چونڊ توهان جي آهي. پر جيئن ته اسان ترقي پذير ٽارگيٽ پروجيڪٽ لاءِ هڪ اوزار ڳولي رهيا آهيون، ڇو نه هڪ اهڙو چونڊيو جيڪو اجازت ڏيندو، سادو قدمن کان شروع ڪندي، هڪ تعميراتي نظام حاصل ڪرڻ لاءِ جنهن ۾ انٽرفيس ۽ هڪ منفرد انٽرفيس هجي.

انهن لاءِ جن جو ٽارگيٽ پروجيڪٽ پٿون ۾ لکيل آهي، سوال پيدا ٿئي ٿو: ”ڇو نه هڪ انٽيگريشن سسٽم چونڊيو جنهن ۾ پروجيڪٽ ۾ استعمال ٿيندڙ ٻولي جي لحاظ کان واضح انٽرفيس هجي؟ ۽ هاڻي اهو وقت آهي فائدا پيش ڪرڻ جو BuildBot.

تنهن ڪري، اسان جو "ساز quartet". پاڻ لاءِ، مون چار خصوصيتن جي نشاندهي ڪئي آهي BuildBot:

  1. اهو GPL لائسنس جي تحت هڪ کليل ذريعو فريم ورڪ آهي
  2. ھي آھي python جو استعمال ھڪ ٺاھ جوڙ جي اوزار جي طور تي ۽ گھربل عملن جي وضاحت
  3. اهو هڪ موقعو آهي ته مشين مان جواب حاصل ڪرڻ جو جنهن تي اسيمبلي ٿيندي آهي
  4. اهي آهن، آخرڪار، ميزبان لاءِ گهٽ ۾ گهٽ گهربل. مقرري لاءِ پٿون ۽ موڙيندڙ جي ضرورت آهي، ۽ ورچوئل مشين ۽ جاوا مشين جي ضرورت ناهي.

2. تصور BuildMaster جي اڳواڻي ۾

BuildBot سان مسلسل انضمام جو مثال لاڳو ڪرڻ

ڪم جي تقسيم جي فن تعمير جو مرڪز آهي تعمير ماسٽر. اها هڪ خدمت آهي جيڪا:

  • ٽريڪ رکي ٿو منصوبي جي ماخذ جي وڻ ۾ تبديليون
  • موڪلي ٿو ڪمانڊ جيڪي ڪم ڪندڙ سروس پاران پروجيڪٽ کي تعمير ڪرڻ ۽ ان کي جانچڻ لاءِ عمل ڪرڻ گهرجن
  • اطلاع ڏئي ٿو استعمال ڪندڙن جي عملن جي نتيجن بابت

تعمير ماسٽر فائل ذريعي ترتيب ڏنل master.cfg. ھي فائل روٽ ۾ آھي تعمير ماسٽر. بعد ۾ مان ڏيکاريندس ته هي روٽ ڪيئن ٺهيل آهي. فائل پاڻ master.cfg هڪ python اسڪرپٽ تي مشتمل آهي جيڪا ڪال استعمال ڪري ٿي BuildBot.

ايندڙ سڀ کان اهم اعتراض BuildBot هڪ نالو آهي ورڪر. هي خدمت ڪنهن ٻئي ميزبان تي مختلف OS سان شروع ڪري سگهجي ٿي، يا شايد هڪ تي جتي تعمير ماسٽر. اهو پڻ موجود ٿي سگھي ٿو خاص طور تي تيار ڪيل ورچوئل ماحول ۾ پنهنجي پيڪيجز ۽ متغيرن سان. اهي مجازي ماحول تيار ڪري سگھجن ٿا python افاديت استعمال ڪندي virtualenv, venv.

تعمير ماسٽر هر ڪنهن کي حڪم نشر ڪري ٿو ورڪر-y، ۽ هو، موڙ ۾، انهن کي پورو ڪري ٿو. اهو آهي، اهو ظاهر ٿئي ٿو ته هڪ منصوبي جي تعمير ۽ جانچ جو عمل جاري ٿي سگهي ٿو ورڪر-e ونڊوز هلائيندڙ ۽ ٻئي ورڪر تي لينڪس هلائيندڙ.

چيڪ آئوٽ ڪريو پروجيڪٽ جو ذريعو ڪوڊ هر هڪ تي ٿئي ٿو ورڪر-اي

3. تنصيب

سو، اچو ته هلون. مان استعمال ڪندس Ubuntu 18.04 ميزبان طور. مان ان تي هڪ رکي ڇڏيندس تعمير ماسٽر- هڪ ۽ هڪ ورڪر-ا پر پهرين توهان کي python3.7 انسٽال ڪرڻ جي ضرورت آهي:

sudo apt-get update
sudo apt-get install python3.7

انهن لاءِ جن کي 3.7.2 جي بدران python3.7.1 جي ضرورت آهي، توهان هيٺيان ڪري سگهو ٿا:


sudo apt-get update
sudo apt-get software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get install python3.7
sudo ln -fs /usr/bin/python3.7 /usr/bin/python3
pip3 install --upgrade pip

ايندڙ قدم انسٽال ڪرڻ آهي ٽوئيٽ ڪيو и 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 # Собственно сдесь и создаем

اڳيون قدم. اچو ته ٺاهي ورڪر. اهو اسان جي فولڊر ۾ هوندو گھر/هبر/ ڪم ڪندڙ.

mkdir worker
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker localhost:4000 yourWorkerName password

جڏهن توهان هلندا آهيو ورڪر، پوءِ ڊفالٽ طور ان ۾ ٺاهي ويندي گھر/هبر/ ڪم ڪندڙ پروجيڪٽ جي نالي سان فولڊر، جنهن ۾ بيان ڪيو ويو آهي 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. ۽ اچو ته ڏسو ته اهو ڇا تي مشتمل آهي. ۽ ان کان پوء، اچو ته اسان جي پنهنجي ترتيب واري فائيل ٺاهڻ جي ڪوشش ڪريو.

master.cfg

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
    'git://github.com/buildbot/hello-world.git',
         workdir='gitpoller-workdir', branch='master',
         pollInterval=300))
                        
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
        name="all",
        change_filter=util.ChangeFilter(branch='master'),
        treeStableTimer=None,
        builderNames=["runtests"]))
c['schedulers'].append(schedulers.ForceScheduler(
        name="force",
        builderNames=["runtests"]))
                        
factory = util.BuildFactory()
                        
factory.addStep(steps.Git(repourl='git://github.com/buildbot/hello-world.git', mode='incremental'))
factory.addStep(steps.ShellCommand(command=["trial", "hello"],
                                   env={"PYTHONPATH": "."}))
                        
c['builders'] = []
c['builders'].append(
    util.BuilderConfig(name="runtests",
    workernames=["example-worker"],
    factory=factory))
                         
c['services'] = []
                        
c['title'] = "Hello World CI"
c['titleURL'] = "https://buildbot.github.io/hello-world/"
                        
                        
c['buildbotURL'] = "http://localhost:8010/"
                        
c['www'] = dict(port=8010,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}))
                        
c['db'] = {
    'db_url' : "sqlite:///state.sqlite",
}

5.1 BuildmasterConfig

c = BuildmasterConfig = {} 

BuildmasterConfig - ترتيب واري فائل جي بنيادي لغت. ان کي ترتيب ڏيڻ واري فائل ۾ شامل ڪيو وڃي. استعمال جي آسانيءَ لاءِ، تشڪيل ڪوڊ ۾ ھڪڙو عرف متعارف ڪرايو ويو آھي "ج". عنوان ڪيشيون в c["keyFromDist"] سان تعامل لاءِ مقرر ٿيل عنصر آهن تعمير ماسٽر. هر چاٻي لاء، لاڳاپيل اعتراض هڪ قدر جي طور تي متبادل آهي.

5.2 ڪارڪنن

c['workers'] = [worker.Worker("example-worker", "pass")]

هن ڀيري اسان اشارو ڪريون ٿا تعمير ماسٽر-y جي فهرست ورڪر-ايس. پاڻ ورڪر اسان پيدا ڪيو اعلي، اشارو توهان جو ڪم ڪندڙ جو نالو и پاسورڊ. هاڻي انهن جي بدران وضاحت ڪرڻ جي ضرورت آهي مثال- ڪم ڪندڙ и نڪري .

5.3 تبديلي_ذريعو

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
                            'git://github.com/buildbot/hello-world.git',
                             workdir='gitpoller-workdir', branch='master',
                             pollInterval=300))                

چاٻي ذريعي تبديلي_ذريعو ڊڪشنري c اسان لسٽ تائين پهچون ٿا جتي اسان هڪ اعتراض رکڻ چاهيون ٿا جيڪو پروجيڪٽ جي سورس ڪوڊ سان مخزن کي پول ڪري ٿو. مثال استعمال ڪري ٿو Git مخزن جيڪو ڪجهه وقفن تي پول ڪيو ويو آهي.

پهريون دليل توهان جي مخزن جو رستو آهي.

ڪم ڪندڙ فولڊر ڏانهن رستو ڏيکاري ٿو جتي پاسي تي ورڪر- رستي سان لاڳاپيل /home/habr/worker/yourProject/build git مخزن جي مقامي ورزن کي ذخيرو ڪندو.

شاخ مخزن ۾ هڪ مخصوص شاخ تي مشتمل آهي جنهن جي پيروي ڪرڻ گهرجي.

پولنگ جو وقفو جنهن کان پوءِ سيڪنڊن جو تعداد شامل آهي تعمير ماسٽر تبديلين لاءِ مخزن کي پول ڪندو.

پروجيڪٽ جي مخزن ۾ تبديلين کي ٽريڪ ڪرڻ جا ڪيترائي طريقا آهن.

سادو طريقو آهي ووٽ، جنهن جو مطلب آهي تعمير ماسٽر وقتي طور تي سرور کي مخزن سان گڏ ڪري ٿو. جيڪڏهن انجام ڏيو repository ۾ تبديلين کي ظاهر ڪيو، پوء تعمير ماسٽر ڪجهه دير سان هڪ اندروني اعتراض ٺاهيندو تبديل ڪريو ۽ ان کي ايونٽ ھينڊلر ڏانھن موڪليو اسپيڊيور، جيڪو منصوبي جي تعمير ۽ جانچ ڪرڻ لاءِ قدم شروع ڪندو ورڪر-اي انهن مرحلن مان اشارو ڪيو ويندو ڪاري مخزن بلڪل تي ورڪرهي مخزن جي مقامي ڪاپي ٺاهيندو. ھن عمل جا تفصيل ھيٺ ڏنل ٻن حصن ۾ بيان ڪيا ويندا. (5.4 и 5.5).

مخزن ۾ تبديلين کي ٽريڪ ڪرڻ جو هڪ اڃا به وڌيڪ خوبصورت طريقو آهي پيغامن کي سڌو سنئون سرور کان موڪلڻ جيڪو ان کي ميزباني ڪري رهيو آهي. تعمير ماسٽر- پروجيڪٽ جي سورس ڪوڊ کي تبديل ڪرڻ بابت. انهي صورت ۾، جيترو جلدي ڊولپر ٺاهي ٿو انجام ڏيو، سرور پروجيڪٽ جي مخزن سان گڏ هڪ پيغام موڪليندو تعمير ماسٽر-ي. ۽ هو، موڙ ۾، هڪ اعتراض ٺاهي ان کي مداخلت ڪندو PBCchangeSource. اڳيون، هي اعتراض ڏانهن منتقل ڪيو ويندو اسپيڊيور، جيڪو پروجيڪٽ ٺاهڻ ۽ ان کي جانچڻ لاءِ قدمن کي چالو ڪري ٿو. هن طريقي جو هڪ اهم حصو ڪم ڪري رهيو آهي ٿلهو- مخزن ۾ سرور اسڪرپٽ. لکت ۾ ٿلهو-a، عملن جي پروسيسنگ لاء ذميوار جڏهن انجام ڏيو-e، توھان کي استعمال ڪرڻ جي ضرورت آھي موڪلڻ ۽ نيٽ ورڪ ايڊريس بيان ڪريو تعمير ماسٽر-اي. توھان کي پڻ بيان ڪرڻ جي ضرورت آھي نيٽ ورڪ پورٽ جيڪو ٻڌندو PBCchangeSource. PBCchangeSourceرستي ۾، حصو آهي تعمير ماسٽر-اي. هن طريقي جي اجازت جي ضرورت پوندي پنهنجا-a سرور تي جتي پروجيڪٽ مخزن واقع آهي. توھان کي پھريون ڀيرو ضرورت پوندي مخزن جو بيڪ اپ.

5.4 شيڊيولر


c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
        name="all",
        change_filter=util.ChangeFilter(branch='master'),
        treeStableTimer=None,
        builderNames=["runtests"]))
c['schedulers'].append(schedulers.ForceScheduler(
        name="force",
        builderNames=["runtests"]))

شيڊيولر - اھو ھڪڙو عنصر آھي جيڪو ھڪڙو محرڪ طور ڪم ڪري ٿو جيڪو سڄي منصوبي جي اسيمبلي ۽ جانچ جي سلسلي کي شروع ڪري ٿو.
BuildBot سان مسلسل انضمام جو مثال لاڳو ڪرڻ

اهي تبديليون جيڪي رڪارڊ ڪيون ويون آهن تبديلي_ذريعو، ڪم جي عمل ۾ تبديل ٿيل BuildBot- اعتراض ڪرڻ تبديل ڪريو ۽ هاڻي هر شيڊولر انهن جي بنياد تي، اهو پروجيڪٽ جي تعمير جي عمل کي شروع ڪرڻ لاء درخواستون ٺاهي ٿو. بهرحال، اهو پڻ طئي ڪري ٿو جڏهن اهي درخواستون قطار ڏانهن وڌيڪ منتقل ڪيون وينديون آهن. هڪ اعتراض تعمير ڪرڻ وارو درخواستن جي قطار کي محفوظ ڪري ٿو ۽ موجوده اسيمبليءَ جي حالت کي الڳ تي ٽريڪ ڪري ٿو ورڪر-اي تعمير ڪرڻ وارو تي موجود آهي تعمير ماسٽر-اي ۽ تي ورڪر-اي هن سان گڏ موڪلي ٿو تعمير ماسٽر- هڪ تي ورڪر- ۽ اڳ ۾ ئي مخصوص کپن - قدمن جو هڪ سلسلو جنهن جي پيروي ڪرڻ گهرجي.
اسان ڏسون ٿا ته موجوده مثال ۾ شيڊيولر 2 ٽڪرا ٺهيل آهن. ان کان سواء، هر هڪ پنهنجي قسم آهي.

سنگل برانچ شيڊيولر - شيڊول تي سڀ کان وڌيڪ مشهور طبقن مان هڪ. اهو هڪ شاخ ڏسي ٿو ۽ ان ۾ رڪارڊ ٿيل تبديلي طرفان شروع ڪيو ويو آهي. جڏهن هو تبديلين کي ڏسي ٿو، هو تعمير جي درخواست موڪلڻ ۾ دير ڪري سگهي ٿو (خاص پيٽرولر ۾ بيان ڪيل مدت لاءِ ملتوي ڪريو وڻ اسٽيبل ٽائمر) ۾ نالو شيڊول جو نالو مقرر ڪري ٿو جيڪو ڏيکاريو ويندو BuildBot- ويب انٽرفيس. IN فلٽر تبديل ڪريو هڪ فلٽر مقرر ڪيو ويو آهي، جنهن کي پاس ڪرڻ کان پوء برانچ ۾ تبديليون تعمير لاء درخواست موڪلڻ لاء شيڊول کي تيز ڪري ٿو. IN تعمير ڪندڙ جا نالا نالو ظاهر ڪيو ويو آهي تعمير ڪرڻ وارو-a، جيڪو اسان ٿوري دير بعد مقرر ڪنداسين. اسان جي صورت ۾ نالو ساڳيو ٿيندو پروجيڪٽ جو نالو: توهان جو منصوبو.

فورس شيڊيولر هڪ تمام سادي شيء. هن قسم جي شيڊول کي مائوس جي ذريعي ڪلڪ ڪيو ويندو آهي BuildBot- ويب انٽرفيس. پيرا ميٽرز ۾ ساڳيو جوهر آهي سنگل برانچ شيڊيولر.

پي ايس نمبر 3. ٿي سگهي ٿو اهو ڪم ۾ ايندو
وقتي بنياد هڪ شيڊول آهي جيڪو هڪ خاص وقت تي مقرر ٿيل تعدد تي هلندو آهي. ڪال ڪجهه هن طرح نظر اچي ٿي


from buildbot.plugins import schedulers
nightly = schedulers.Periodic(name="daily",
                              builderNames=["full-solaris"],
                              periodicBuildTimer=24*60*60)
c['schedulers'] = [nightly]                    

5.5 تعمير ڪارخانو


factory = util.BuildFactory()
                        
factory.addStep(steps.Git(repourl='git://github.com/buildbot/hello-world.git', mode='incremental'))
factory.addStep(steps.ShellCommand(command=["trial", "hello"],
                                   env={"PYTHONPATH": "."}))

periodicBuildTimer هن دور جي وقت کي سيڪنڊن ۾ بيان ڪري ٿو.

تعمير ڪارخانو هڪ مخصوص ٺاهي ٿو کپن، جيڪو پوءِ تعمير ڪرڻ وارو ڏانهن موڪلي ٿو ورڪر. جي تعمير ڪارخانو جي پيروي ڪرڻ جي قدمن جي نشاندهي ڪري ٿو ورڪر-ي. طريقن کي سڏڻ سان قدم شامل ڪيا ويا آهن قدم شامل ڪريو

هن مثال ۾ پهريون شامل قدم آهي git صاف -d -f -f -xپوءِ گيٽ چڪاس. اهي عمل پيراگراف ۾ شامل آهن طريقو، جيڪو واضح طور تي بيان نه ڪيو ويو آهي پر هڪ ڊفالٽ قدر جو مطلب آهي تازو. پيرا ميٽر موڊ = 'وڌندڙ' ظاهر ڪري ٿو ته فائلون ڊاريڪٽري مان آهن جتي چيڪ آئوٽ، جڏهن ته مخزن مان غائب، اڻڄاتل رهي.

ٻيو شامل ڪيل قدم اسڪرپٽ کي سڏي رهيو آهي پرک پيرا ميٽر سان هيلو پاسي تي ورڪر- ڊاريڪٽري مان /home/habr/worker/yourProject/build ماحولياتي تبديليءَ سان PATHONPATH=... اهڙيءَ طرح، توهان پنهنجون اسڪرپٽ لکي سگهو ٿا ۽ انهن کي پاسي تي هلائي سگهو ٿا. ورڪر- هر قدم util.ShellCommand. اهي اسڪرپٽ سڌو سنئون مخزن ۾ رکي سگهجن ٿيون. پوء تي چيڪ آئوٽ-اِن ۾ پئجي ويندا /home/habr/worker/yourProject/build. تنهن هوندي به، اتي ٻه آهن "پر":

  1. ورڪر چاٻي سان ٺاهيو وڃي --ماسڪ انهي ڪري ته اهو بعد ۾ عملدرآمد جي حقن کي بلاڪ نٿو ڪري چيڪ آئوٽ ڪريو-دي.
  2. تي گٽ پٽي-e انھن لکتن مان توھان کي ملڪيت جي وضاحت ڪرڻ جي ضرورت آھي قابل عملتنهنڪري بعد ۾ چيڪ آئوٽ-e گيٽ اسڪرپٽ تي عمل ڪرڻ جو حق نه وڃايو.

5.6 تعمير ڪندڙ


c['builders'] = []
c['builders'].append(util.BuilderConfig(name="runtests",
                                        workernames=["example-worker"],
                                        factory=factory))

بابت ڇا آهي تعمير ڪرڻ وارو ٻڌايو ويو هتي. هاڻي آئون توهان کي وڌيڪ تفصيل سان ٻڌايان ٿو ته ان کي ڪيئن ٺاهيو. BuilderConfig هڪ تعمير ڪندڙ آهي تعمير ڪرڻ وارو. اهڙن ڊزائنر ۾ ج['بلڊرز'] توھان ڪيترن ئي بيان ڪري سگھو ٿا، ڇاڪاڻ⁠تہ ھي ھڪڙي شيٽ آھي تعمير ڪرڻ وارو قسم. هاڻي اچو ته ان مثال کي ٻيهر لکون BuildBot، ان کي اسان جي ڪم جي ويجهو آڻيندي.


c['builders'] = []
c['builders'].append(util.BuilderConfig(name="yourProject",
                                            workernames=["yourWorkerName"],
                                            factory=factory))

ھاڻي مان توھان کي ٻڌايان ٿو پيرا ميٽرز بابت 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' پروٽوڪول

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

ويب ڊسپلي BuildBot اسان پورٽ 80 سان ڳنڍينداسين پروجيڪٽ. ميزبان. Apatch انسٽال ڪرڻ ضروري ناهي. لائبريريءَ جو حصو ڪٽيو اتي اڳ ۾ ئي هڪ ويب سرور آهي، BuildBot استعمال ڪري ٿو.

اندروني معلومات کي ذخيرو ڪرڻ لاء BuildBot جي اسڪوائر.

ميلنگ لاءِ ميزبان گھربل آھي smtp.your.domain - اهو ميل کان خط موڪلڻ جي اجازت ڏئي ٿو [ايميل محفوظ ٿيل] بغير تصديق جي. ميزبان تي پڻ.smtp منٽ پوسٽ 1025 تي ٻڌو پيو وڃي.

اتي ٻه ماڻهو عمل ۾ ملوث آهن: پنهنجا и يوزر. منتظم منتظم BuildBot. استعمال ڪندڙ اهو شخص آهي جيڪو ڪم ڪري رهيو آهي انجام ڏيو-ايس.

قابل عمل فائل ذريعي ٺاهي وئي آهي پائي انسٽالر. دستاويز ذريعي ٺاهيل آهي آڪسيجن.

هن فن تعمير لاءِ مون هي لکيو آهي: master.cfg:

master.cfg


import os, re
from buildbot.plugins import steps, util, schedulers, worker, changes, reporters

c= BuildmasterConfig ={}

c['workers'] = [ worker.Worker('yourWorkerName', 'password') ]
c['protocols'] = {'pb': {'port': 4000}} 


svn_poller = changes.SVNPoller(repourl="https://svn.host/svn/yourProject/trunk",
                                svnuser="user",
                                svnpasswd="password",
                                pollinterval=60,
				split_file=util.svn.split_file_alwaystrunk
                                )

c['change_source'] =  svn_poller

hourlyscheduler = schedulers.SingleBranchScheduler(
                                name="your-project-schedulers",
				change_filter=util.ChangeFilter(branch=None),
                                builderNames=["yourProject"],
				properties = {'owner': 'admin'}
                                )

c['schedulers'] = [hourlyscheduler]

checkout = steps.SVN(repourl='https://svn.host/svn/yourProject/trunk',
                        mode='full',
                        method='fresh',
                        username="user",
                        password="password",
                        haltOnFailure=True)

	
projectHost_build = util.BuildFactory()  


cleanProject = steps.ShellCommand(name="Clean",
                 command=["buildbot/worker_linux/pyinstaller_project", "clean"]
                                )
buildProject = steps.ShellCommand(name="Build",
                 command=["buildbot/worker_linux/pyinstaller_project", "build"]
                                )
doxyProject = steps.ShellCommand(name="Update Docs",
                                command=["buildbot/worker_linux/gendoc", []]
                                )
testProject = steps.ShellCommand(name="Tests",
                                command=["python","tests/utest.py"],
                                env={'PYTHONPATH': '.'}
                                )

projectHost_build.addStep(checkout)
projectHost_build.addStep(cleanProject)
projectHost_build.addStep(buildProject)
projectHost_build.addStep(doxyProject)
projectHost_build.addStep(testProject)


c['builders'] = [
        util.BuilderConfig(name="yourProject", workername='yourWorkerName', factory=projectHost_build)
]


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]

c['title'] = "The process of bulding"
c['titleURL'] = "http://project.host:80/"

c['buildbotURL'] = "http://project.host"

c['www'] = dict(port=80,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}))


c['db'] = {
    'db_url' : "sqlite:///state.sqlite"
}

پهرين توهان کي ضرورت آهي ٺاهيو تعمير ماسٽر-a ۽ ورڪر-ا پوءِ هن فائل کي پيسٽ ڪريو master.cfg в /گھر/هبر/ماسٽر.

ايندڙ قدم خدمت شروع ڪرڻ آهي تعمير ماسٽرالف


sudo buildbot start /home/habr/master

پوء خدمت شروع ڪريو ورڪر-a


buildbot-worker start /home/habr/worker

تيار! هاڻي بلڊ بوٽ تبديلين کي ٽريڪ ڪندو ۽ ٽرگر ڪندو انجام ڏيو- ۾ svnمٿي ڏنل فن تعمير سان هڪ منصوبي جي تعمير ۽ جانچ جي مرحلن کي انجام ڏيڻ.

هيٺ آئون مٿي بيان ڪيل ڪجهه خاصيتن کي بيان ڪندس master.cfg.

6.1 توهان جي master.cfg جي رستي تي


لکڻ دوران منهنجي master.cfg ڪيتريون ئي غلطيون ڪيون وينديون، تنهنڪري لاگ فائل پڙهڻ جي ضرورت پوندي. جي طور تي ذخيرو ٿيل آهي تعمير ماسٽر- ec مطلق رستو /home/habr/master/twistd.log، ۽ پاسي تي ورڪر- هڪ مڪمل رستو سان /home/habr/worker/twistd.log. جئين توهان غلطي پڙهي ۽ ان کي درست ڪريو، توهان کي خدمت ٻيهر شروع ڪرڻ جي ضرورت پوندي تعمير ماسٽر-ا هتي اهو ڪيئن ڪيو ويو آهي:


sudo buildbot stop /home/habr/master
sudo buildbot upgrade-master /home/habr/master
sudo buildbot start /home/habr/master

6.2 svn سان ڪم ڪرڻ


svn_poller = changes.SVNPoller(repourl="https://svn.host/svn/yourProject/trunk",
                               svnuser="user",
                               svnpasswd="password",
                               pollinterval=60,
                               split_file=util.svn.split_file_alwaystrunk
                        )

c['change_source'] =  svn_poller

hourlyscheduler = schedulers.SingleBranchScheduler(
                            name="your-project-schedulers",
                            change_filter=util.ChangeFilter(branch=None),
                            builderNames=["yourProject"],
                            properties = {'owner': 'admin'}
                        )

c['schedulers'] = [hourlyscheduler]

checkout = steps.SVN(repourl='https://svn.host/svn/yourProject/trunk',
                     mode='full',
                     method='fresh',
                     username="user",
                     password="password",
                     haltOnFailure=True)

پهرين، اچو ته هڪ نظر وٺو 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]

هو پيغام موڪلي سگهي ٿو مختلف طريقا.

ميل نوٽيفائر اطلاع موڪلڻ لاءِ اي ميل استعمال ڪري ٿو.

ٽيمپليٽ_html نيوز ليٽر لاءِ ٽيڪسٽ ٽيمپليٽ سيٽ ڪري ٿو. HTML مارڪ اپ ٺاهڻ لاء استعمال ڪيو ويندو آهي. اهو انجڻ جي ذريعي تبديل ڪيو ويو آهي جنجا 2 (سان مقابلو ڪري سگهجي ٿو django). BuildBot وٽ متغيرن جو ھڪڙو سيٽ آھي جنھن جا قدر ميسيج ٽيڪسٽ ٺاھڻ جي عمل دوران ٽيمپليٽ ۾ تبديل ڪيا ويندا آھن. اهي متغيرات ۾ بند ٿيل آهن {{ double curly braces }}. مثال طور، خلاصو مڪمل ٿيل عملن جي حالت ڏيکاري ٿو، يعني ڪاميابي يا ناڪامي. اي منصوبن نڪرندو توهان جو منصوبو. تنهن ڪري، استعمال ڪندي ڪنٽرول حڪمن ۾ جنجا 2، متغير BuildBot-a ۽ python string فارميٽنگ جا اوزار، توھان ھڪڙو معلوماتي پيغام ٺاھي سگھو ٿا.

ميل نوٽيفائر ھيٺ ڏنل دليلن تي مشتمل آھي.

اضافي کان - ائڊريس جنهن تان هرڪو نيوز ليٽر وصول ڪندو.

دلچسپي رکندڙ استعمال ڪندڙن کي موڪليو= سچو پيغام موڪلي ٿو مالڪ ۽ استعمال ڪندڙ کي جيڪو ٺاهيو انجام ڏيو.

ڏسو - ھڪڙو لاڳاپو جيڪو شامل ڪيو وڃي انھن جي نالن سان جيڪي نيوز ليٽر وصول ڪن ٿا. سو پنهنجا ڪيئن صارف ايڊريس تي نيوز ليٽر حاصل ڪندو [ايميل محفوظ ٿيل].

relayhost ھوسٽ جو نالو بيان ڪري ٿو جنھن تي سرور کوليو ويو آھي smtpهڪ smptPort ٻڌندڙ پورٽ نمبر بيان ڪري ٿو smtp سرور

موڊ = ڊيڄاريندڙ چوي ٿو ته ميلنگ صرف ٿيڻ گهرجي جيڪڏهن گهٽ ۾ گهٽ هڪ قدم آهي کپن-a، جيڪو اسٽيٽس جي ناڪامي يا ڊيڄاريندڙ سان ختم ٿيو. ڪاميابي جي صورت ۾، خبر ليٽ موڪلڻ جي ڪا ضرورت ناهي.

اضافي وصول ڪندڙ انهن ماڻهن جي هڪ فهرست تي مشتمل آهي جن کي ميل موڪلڻ گهرجي ان کان علاوه مالڪ ۽ ان شخص جنهن انجام ڏيو.

پيغام فارميٽ ھڪڙو اعتراض آھي جيڪو بيان ڪري ٿو پيغام جي شڪل، ان جي ٽيمپليٽ، ۽ متغير جو ھڪڙو سيٽ جنجا 2. اختيارن جهڙوڪ چاهي ملڪيت = سچ и چاهيو قدم = سچ دستياب متغيرن جي ھن سيٽ جي وضاحت ڪريو.

سان ['خدمتون'] = [sendMessageToAll] خدمتن جي هڪ فهرست مهيا ڪري ٿي، جن مان اسان جي هوندي رپورٽر.

اسان ڪيو! مبارڪون

اسان اسان جي پنهنجي ترتيب ٺاهي ۽ ڪارڪردگي کي ڏٺو ته اهو قابل آهي. BuildBot. اهو، منهنجو خيال آهي، اهو سمجهڻ لاء ڪافي آهي ته ڇا هي اوزار توهان جي پروجيڪٽ ٺاهڻ جي ضرورت آهي. ڇا توهان هن ۾ دلچسپي وٺندا آهيو؟ ڇا اهو توهان لاء مفيد ٿيندو؟ ڇا هو ڪم ڪرڻ لاء آرام سان آهي؟ پوءِ مان هي مضمون بيڪار نه لکي رهيو آهيان.

۽ اڳتي. مان چاهيان ٿو پروفيشنل ڪميونٽي استعمال ڪندي BuildBot، وسيع ٿي ويا، دستور العمل ترجمو ڪيا ويا، ۽ اڃا به وڌيڪ مثال هئا.

توهان جي ڌيان لاء توهان سڀني جي مهرباني. سدا خوشقسمت رهو.

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

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