Isibonelo sokuqalisa Ukuhlanganisa Okuqhubekayo usebenzisa i-BuildBot

Isibonelo sokuqalisa Ukuhlanganisa Okuqhubekayo usebenzisa i-BuildBot
(Isithombe ngu I-Computerizer kusukela Pixabay)

Sawubona!

Igama lami ngingu Evgeniy Cherkin, ngingumenzi wezinhlelo ethimbeni labathuthukisi enkampanini yezimayini I-Polymetal.

Lapho uqala noma iyiphi iphrojekthi enkulu, uqala ukucabanga: "Iyiphi isoftware engcono kakhulu ongayisebenzisa ukuyisevisa?" Iphrojekthi ye-IT idlula ezigabeni ezimbalwa ngaphambi kokukhipha inguqulo elandelayo. Kuhle uma uchungechunge lwalezi zigaba luzenzakalela. Inqubo ezenzakalelayo yokukhipha inguqulo entsha yephrojekthi ye-IT ngokwayo ibizwa Ukuhlanganiswa okuqhubekayo. I-BuildBot waba umsizi omuhle kithi ekwenzeni lolu hlelo.

Kulesi sihloko nginqume ukunikeza umbono jikelele wamathuba I-BuildBot. Ikwazi ukwenzani le software? Ungasondela kanjani kuye nokuthi ungakha kanjani UBUDLELWANE OBUYISEBENZA OKUSEBENZAYO naye? Ungakwazi ukusebenzisa ulwazi lwethu ngokwakho ngokudala isevisi esebenzayo yokwakha nokuhlola iphrojekthi yakho emshinini wakho.

Okuqukethwe

Okuqukethwe

1. Kungani BuildBot?
2. Umqondo oholwa nguBuildMaster
3. Ukufakwa
4. Izinyathelo zokuqala

5. Ukumisa. Isinyathelo ngesinyathelo iresiphi

5.1 I-BuildmasterConfig
Abasebenzi be-5.2
5.3 shintsha_umthombo
5.4 abahleli

5.5 I-BuildFactory
Abakhi abangama-5.6

6. Isibonelo sokucushwa kwakho

6.1 Endleleni eya enkosini yakho.cfg
6.2 Ukusebenza nge-svn
6.3 Incwadi eya kuwe: Izintatheli zigunyaziwe ukuthi zimemezele

Sikwenzile! Siyakuhalalisela

1. Kungani BuildBot?

Ngaphambilini ku-habr-e ngihlangane nama-athikili mayelana nokusetshenziswa Ukuhlanganiswa okuqhubekayo usebenzisa I-BuildBot... Ngokwesibonelo, Lena Ngithole ifundisa kakhulu. Kukhona esinye isibonelo - elula. Lezi zihloko zingafakwa izinongo isibonelo esivela kumanuwali, futhi lokhu kungukuthi ngemva kwalokho, ngesiNgisi. I-coupe yenza isiqalo esihle. Ngemva kokufunda lezi zihloko, cishe uzofuna okuthile ngokushesha I-BuildBot yenza.

Ima! Ingabe ukhona oke wayisebenzisa ngempela kumaphrojekthi abo? Kuvele yebo eziningi balusebenzise emisebenzini yabo. Ingatholakala izibonelo ukusetshenziswa kwe I-BuildBot nasezinqolobaneni zekhodi ye-Google.

Ngakho-ke yini i-logic yabantu abayisebenzisayo I-Buildbot? Ngemuva kwakho konke, akhona amanye amathuluzi: I-CruiseControl и Jenkins. Ngizophendula ngale ndlela. Ngemisebenzi eminingi Jenkins futhi iqiniso liyokwanela. Ekugcineni, I-BuildBot - kuvumelana nezimo kakhudlwana, kuyilapho izinkinga zixazululwa lapho kalula njengaku Jenkins. Ukuzikhethela kungokwakho. Kodwa njengoba sifuna ithuluzi lephrojekthi eqondiwe ekhulayo, kungani ungakhethi ezovumela, kusukela ezinyathelweni ezilula, ukuthola isistimu yokwakha enokusebenzelana kanye nesixhumi esibonakalayo esiyingqayizivele.

Kulabo iphrojekthi yabo ehlosiwe ebhalwe nge-python, umbuzo uphakama: "Kungani ungakhethi uhlelo lokuhlanganisa olunokuxhumana okucacile ngokolimi olusetshenziswe kuphrojekthi?" Futhi manje sekuyisikhathi sokwethula izinzuzo I-BuildBot.

Ngakho, "i-quartet yezinsimbi" yethu. Mina ngokwami, ngizihlonze izici ezine I-BuildBot:

  1. Iwuhlaka lomthombo ovulekile ngaphansi kwelayisensi ye-GPL
  2. Lokhu ukusetshenziswa kwe-python njengethuluzi lokumisa kanye nencazelo yezenzo ezidingekayo
  3. Leli yithuba lokuthola impendulo emshinini okwenzeka kuwo umhlangano
  4. Lezi, ekugcineni, izimfuneko ezincane zoMsingathi. Ukuthunyelwa kudinga i-python nokusontiwe, futhi akudingi umshini obonakalayo nomshini we-java.

2. Umqondo oholwa nguBuildMaster

Isibonelo sokuqalisa Ukuhlanganisa Okuqhubekayo usebenzisa i-BuildBot

Okuphakathi nesakhiwo sokusabalalisa umsebenzi I-BuildMaster. Kuyisevisi ukuthi:

  • ugcina umkhondo izinguquko esihlahleni somthombo wephrojekthi
  • ithumela imiyalo okufanele yenziwe yinkonzo Yabasebenzi ukwakha iphrojekthi futhi iyihlole
  • iyazisa abasebenzisi mayelana nemiphumela yezenzo ezithathiwe

I-BuildMaster kulungiswe ngefayela master.cfg. Leli fayela likuyimpande I-BuildMaster. Kamuva ngizobonisa ukuthi le mpande idalwe kanjani. Ifayela ngokwalo master.cfg iqukethe iskripthi se-python esisebenzisa izingcingo I-BuildBot.

Into elandelayo ebaluleke kakhulu I-BuildBot unegama Umsebenzi. Le nsizakalo ingethulwa komunye umsingathi one-OS ehlukile, noma mhlawumbe kuleyo lapho I-BuildMaster. Ingase futhi ibe khona endaweni elungiselelwe ngokukhethekile enamaphakheji ayo kanye nezinto eziguquguqukayo. Lezi zindawo ezibonakalayo zingalungiswa kusetshenziswa izinsiza ze-python ezifana i-virtual, iv.

I-BuildMaster isakaza imiyalo kuwo wonke umuntu Umsebenzi-y, futhi naye, uyazigcwalisa. Okusho ukuthi, kuvela ukuthi inqubo yokwakha nokuhlola iphrojekthi ingaqhubeka Umsebenzi-e esebenzisa iWindows nakwesinye Isisebenzi esisebenzisa i-Linux.

Hlola amakhodi omthombo wephrojekthi avela ngakunye Umsebenzi-e.

3. Ukufakwa

Ngakho, asihambe. Ngizobe ngisebenzisa Ubuntu 18.04 njengomsingathi. Ngizobeka eyodwa kuyo I-BuildMaster-a kanye nokukodwa Umsebenzi-a. Kodwa okokuqala udinga ukufaka i-python3.7:

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

Kulabo abadinga i-python3.7.2 esikhundleni se-3.7.1, ungenza okulandelayo:


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

Isinyathelo esilandelayo ukufaka Ifakwe ku-Tweet и I-BuildBot, kanye namaphakheji akuvumela ukuthi usebenzise ukusebenza okwengeziwe I-BuildBot-I.


/*Все что под 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. Izinyathelo zokuqala

Isikhathi sokudala I-BuildMaster. Izoba kufolda yethu /home/habr/master.

mkdir master
buildbot create-master master # Собственно сдесь и создаем

Okulandelayo. Asidale Umsebenzi. Izoba kufolda yethu /ikhaya/ikhaya/umsebenzi.

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

Uma ugijima Umsebenzi, bese ngokuzenzakalelayo izodala ngaphakathi /ikhaya/ikhaya/umsebenzi ifolda enegama lephrojekthi, eshiwo ku master.cfg. Futhi kufolda enegama lephrojekthi izodala uhla lwemibhalo ukwakha, futhi sizoqhubeka sikwenza Hlola. Uhla lwemibhalo olusebenzayo lwe Umsebenzi-futhi izoba yinkomba /home/habr/yourProject/build.

"I-Golden Key
Futhi manje engikubhalele isigaba esedlule: iskripthi leso Master uzofuna kusuka Umsebenzi-futhi kwenziwe ukude kulolu hlu lwemibhalo ngeke kusetshenziswe ngoba iskripthi asinazo izimvume zokuqalisa. Ukuze ulungise isimo, uzodinga ukhiye --umask=0o22, evimbela ukubhala kulolu hlu lwemibhalo, kodwa izogcina amalungelo okuqalisa. Futhi yilokho kuphela esikudingayo.

I-BuildMaster и Umsebenzi sungula ukuxhumana nomunye nomunye. Kuyenzeka ukuthi ihlukane futhi Umsebenzi elinde isikhathi esithile ukuze aphendule I-BuildMaster-A. Uma kungekho mpendulo, uxhumano luqalwa kabusha. Ukhiye --gcina uphila=60 edingekayo nje ukukhombisa isikhathi ngemuva kwalokho ukuxhuma iqalisa kabusha.

5. Ukumisa. Isinyathelo ngesinyathelo iresiphi

Ukucushwa I-BuildMaster wenziwa ohlangothini lomshini lapho sikhiphe khona umyalo dala-master. Esimweni sethu, lolu wuhlu lwemibhalo /home/habr/master. Ifayela lokucushwa master.cfg alikho okwamanje, kodwa umyalo ngokwawo usuvele udale ifayela master.cmg.sampuli. Udinga ukuqamba kabusha kube master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Asivule lesi master.cfg. Ake sibheke ukuthi ihlanganisani. Futhi emva kwalokho, ake sizame ukwenza ifayela lethu lokumisa.

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 I-BuildmasterConfig

c = BuildmasterConfig = {} 

I-BuildmasterConfig — Isichazamazwi esiyisisekelo sefayela lokumisa. Kufanele ifakwe efayeleni lokumisa. Ukuze kube lula ukusetshenziswa, isiteketiso sethulwa kukhodi yokumisa "c". Izihloko okhiye в c["ukhiyeFromDist"] ziyizici ezingashintshi zokusebenzelana nazo I-BuildMaster. Kukhiye ngamunye, into ehambisanayo ishintshwa njengenani.

Abasebenzi be-5.2

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

Lesi sikhathi sibonisa I-BuildMaster-y uhlu lwe Umsebenzi-s. Mina uqobo Umsebenzi sakha ephakeme, ekhombisa igama lakho-isisebenzi и iphasiwedi. Manje badinga ukucaciswa kunalokho isibonelo-isisebenzi и kudlule .

5.3 shintsha_umthombo

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

Ngokhiye shintsha_umthombo isichazamazwi c sithola ukufinyelela kuhlu lapho sifuna ukubeka khona into evotela inqolobane ngekhodi yomthombo wephrojekthi. Isibonelo sisebenzisa inqolobane ye-Git ephendulwa ngezikhathi ezithile.

I-agumenti yokuqala yindlela eya endaweni yakho yokugcina.

sebenza imele indlela eya kufolda lapho eceleni Umsebenzi-isihlobo sendlela /home/habr/worker/yourProject/build git izogcina inguqulo yendawo yendawo yokugcina.

legatsha iqukethe igatsha elithile endaweni yokugcina okufanele ilandelwe.

i-pollIsikhathi iqukethe inani lamasekhondi ngemva kwalokho I-BuildMaster izophenya inqolobane ngezinguquko.

Kunezindlela ezimbalwa zokulandelela izinguquko endaweni yephrojekthi.

Indlela elula yile Ukuphenya, okusho ukuthi I-BuildMaster ngezikhathi ezithile uvotela iseva ngenqolobane. Uma yenza ibonise izinguquko endaweni yokugcina, ke I-BuildMaster izodala into yangaphakathi ngokubambezeleka okuthile Guqula bese uyithumela kumphathi womcimbi Umhleli, ezokwethula izinyathelo zokwakha nokuhlola iphrojekthi Umsebenzi-e. Phakathi kwalezi zinyathelo kuzovezwa buyekeza inqolobane. Ivuliwe impela UmsebenziLokhu kuzodala ikhophi yendawo yendawo yokugcina. Imininingwane yalolu hlelo izovezwa ngezansi ezigabeni ezimbili ezilandelayo. (5.4 и 5.5).

Indlela enhle kakhulu yokulandelela izinguquko endaweni yokugcina ukuthumela imilayezo ngokuqondile isuka kuseva eyisingatha kuya kuyo I-BuildMaster- mayelana nokushintsha amakhodi omthombo wephrojekthi. Kulokhu, ngokushesha nje lapho unjiniyela enza yenza, iseva enenqolobane yephrojekthi izothumela umlayezo I-BuildMaster-y. Futhi yena, uzoyinqamula ngokudala into PBChangeSource. Okulandelayo, le nto izodluliselwa kokuthi Umhleli, okwenza kusebenze izinyathelo zokwakha iphrojekthi nokuyivivinya. Ingxenye ebalulekile yale ndlela isebenza nayo hook-server scripts endaweni yokugcina. Embhalweni hook-a, unesibopho sokucubungula izenzo uma yenza-e, udinga ukushayela insiza sendchange futhi ucacise ikheli lenethiwekhi I-BuildMaster-A. Udinga futhi ukucacisa imbobo yenethiwekhi ezolalela PBChangeSource. PBChangeSource, ngendlela, iyingxenye I-BuildMaster-A. Le ndlela izodinga imvume admin-a kuseva lapho inqolobane yephrojekthi ikhona. Uzodinga kuqala ukwenza isipele sendawo yokugcina.

5.4 abahleli


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"]))

abahleli - lokhu kuyisici esisebenza njengesiqalisi esiqala lonke uchungechunge lokuhlanganisa nokuhlolwa kwephrojekthi.
Isibonelo sokuqalisa Ukuhlanganisa Okuqhubekayo usebenzisa i-BuildBot

Lezo zinguquko ezirekhodiwe shintsha_umthombo, iguqulwe ohlelweni lomsebenzi I-BuildBot-a ukuphikisa Guqula futhi manje zonke Sheduler ngokusekelwe kuzo, yakha izicelo zokuqala inqubo yokwakha iphrojekthi. Kodwa-ke, iphinde inqume ukuthi lezi zicelo zidluliselwa nini emgqeni. Into Builder igcina ulayini wezicelo futhi ilandelela isimo somhlangano wamanje ngokuhlukile Umsebenzi-e. Builder ikhona I-BuildMaster-e futhi Umsebenzi-e. Uthumela ne I-BuildMaster-a ku Umsebenzi-futhi isivele iqondile ukwakha - uchungechunge lwezinyathelo okufanele zilandelwe.
Siyabona ukuthi esibonelweni samanje enjalo abahleli 2 izingcezu zenziwa. Ngaphezu kwalokho, ngayinye inohlobo lwayo.

I-SingleBranchScheduler - elinye lamakilasi aziwa kakhulu ohlelweni. Ibuka igatsha elilodwa futhi iqalwa wushintsho olurekhodiwe kulo. Lapho ebona izinguquko, angabambezela ukuthumela isicelo sokwakha (kuhlehlisa isikhathi esishiwo kupharamitha ekhethekile treeStableTimer) In Igama isetha igama leshejuli elizoboniswa kulo I-BuildBot- I-interface yewebhu. IN ShintshaIsihlungi kumiswa isisefo, ngemva kokudlula lapho izinguquko egatsheni zishukumisela isimiso ukuba sithumele isicelo sokwakhiwa. IN builderNames igama libonisiwe umakhi-a, esizoyibeka kamuva. Igama kithi lizofana negama lephrojekthi: iProject yakho.

I-ForceScheduler into elula kakhulu. Lolu hlobo lweshejuli luqalwa ngokuchofoza igundane I-BuildBot- I-interface yewebhu. Amapharamitha ane-essence efanayo ne-in I-SingleBranchScheduler.

PS No. 3. Mhlawumbe izofika kahle
Ngezikhathi ezithile ishejuli esebenza ngezikhathi ezithile ezinqunyelwe. Ucingo lubukeka kanjena


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

5.5 I-BuildFactory


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": "."}))

i-periodicBuildTimer icacisa isikhathi sale periodicity ngamasekhondi.

I-BuildFactory yakha ethize ukwakha, okuyinto ke umakhi ithumela ku Umsebenzi. I I-BuildFactory ikhombisa izinyathelo okumele zilandelwe Umsebenzi-y. Izinyathelo zengezwa ngokubiza indlela engezaIsinyathelo

Isinyathelo sokuqala esingeziwe kulesi sibonelo siwukuthi git clean -d -f -f –xke ukuphuma kwe-git. Эти действия заложены в параметре indlela, okungashiwongo ngokucacile kodwa okubonisa inani elizenzakalelayo fresh. Ipharamitha imodi='okukhuphukayo' ibonisa ukuthi amafayela avela kuhla lwemibhalo lapho ifayela le i-chechout, ngenkathi engekho endaweni yokugcina, hlala ungathintekile.

Isinyathelo sesibili esingeziwe sibiza iskripthi Isivivinyo ngepharamitha Sawubona eceleni Umsebenzi-a kusuka kumhlahlandlela /home/habr/worker/yourProject/build nge-variable yemvelo PATHONPATH=... Ngakho-ke, ungakwazi ukubhala izikripthi zakho futhi uzisebenzise eceleni Umsebenzi-a zonke izinyathelo util.ShellCommand. Le mibhalo ingafakwa ngqo endaweni yokugcina. Bese kuthi ngo i-chechout-e bazowela kuzo /home/habr/worker/yourProject/build. Kodwa-ke, kukhona "ama-buts" amabili:

  1. Umsebenzi kumele idalwe ngokhiye --umask ukuze ingavimbeli amalungelo okusebenzisa ngemva Hlola-I.
  2. ngesikhathi git ukusunduza-e yalezi zikripthi ozidingayo ukuze ucacise isakhiwo okuphathekayoukuze kamuva i-chechout-e ayizange ilahlekelwe ilungelo lokusebenzisa iskripthi se-Git.

Abakhi abangama-5.6


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

Mayelana nokuthi kuyini Builder watshelwa lapha. Manje ngizokutshela kabanzi mayelana nendlela yokuyidala. I-BuilderConfig ungumakhi umakhi. Abaklami abanjalo ku c['builders'] ungacacisa eziningana, njengoba leli shidi lezinto umakhi uhlobo. Manje ake sibhale kabusha isibonelo kusuka I-BuildBot, ukuyisondeza emsebenzini wethu.


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

Manje ngizokutshela ngamapharamitha I-BuilderConfig.

Igama icacisa igama umakhi-a. Lapha sayiqamba iProject yakho... Lokhu kusho ukuthi ku Umsebenzi- yona kanye le ndlela izokwakhiwa /home/habr/worker/yourProject/build. Sheduler ufuna umakhi ngaleli gama nje.

amagama abasebenzi iqukethe ishidi Umsebenzi-s. Ngayinye yazo kumele yengezwe kuyo c['abasebenzi'].

kwemboni - ethize ukwakha, ehlotshaniswa nayo umakhi. Uzothumela into ukwakha on Umsebenzi ukuqedela zonke izinyathelo ezifakwe kulokhu ukwakha-I.

6. Isibonelo sokucushwa kwakho

Nasi isibonelo sesakhiwo sephrojekthi engiphakamisa ukusisebenzisa I-BuildBot
.

Sizosebenzisa njengesistimu yokulawula inguqulo svn. Inqolobane ngokwayo izotholakala ohlotsheni oluthile lwamafu. Nali ikheli lalelifu svn.host/svn/yourProject/trunk. Efwini ngaphansi svn kukhona igama lomsebenzisi le-akhawunti: umsebenzisi, passwd: iphasiwedi. Imibhalo emele izinyathelo ukwakha-a izophinde ibe segatsheni svn, kufolda ehlukile i-buildbot/worker_linux. Le mibhalo itholakala endaweni yokugcina impahla elondoloziwe iyasebenza.

I-BuildMaster и Umsebenzi gijima kumsingathi ofanayo project.host .I-BuildMaster igcina amafayela ayo kufolda /home/habr/master. Umsebenzi igcinwa ngendlela elandelayo /ikhaya/ikhaya/umsebenzi. Inqubo yokuxhumana I-BuildMaster-a futhi Umsebenzi-a yenziwa nge-port 4000 ngokuya ngephrothokholi I-BuildBot-a, okungukuthi 'pb' Iphrothokholi.

Iphrojekthi okuhlosiwe ibhalwe ngokuphelele ngePython. Umsebenzi ukulandelela izinguquko zayo, ukudala ifayela elisebenzisekayo, ukukhiqiza imibhalo, nokwenza ukuhlolwa. Esimeni sokwehluleka, bonke onjiniyela badinga ukuthumela umlayezo nge-imeyili esho ukuthi kukhona isenzo esingaphumelelanga.

Isibonisi sewebhu I-BuildBot sizoxhuma ku-port 80 ye project.host. Akudingekile ukufaka i-Apatch. Njengengxenye yomtapo wolwazi elisontiwe isivele ikhona iseva yewebhu, I-BuildBot uyayisebenzisa.

Ukugcina imininingwane yangaphakathi I-BuildBot sizosebenzisa isikwele.

Kudingeka umsingathi ukuze kuthunyelwe i-imeyili smtp.your.domain - ivumela ukuthumela izincwadi ngeposi [i-imeyili ivikelwe] ngaphandle kokuqinisekisa. Futhi kumsingathi 'smtp ' Amaminithi azwakala ku-post 1025.

Kunabantu ababili abahilelekile kule nqubo: admin и umsebenzisi. ilawula I-BuildBot. umsebenzisi ngumuntu ozibophezelayo yenza-s.

Ifayela elithengekayo likhiqizwa nge i-pyinstaller. Amadokhumenti akhiqizwa nge i-oksijeni.

Ngalolu hlelo lwezakhiwo ngibhale lokhu: 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"
}

Okokuqala udinga dala I-BuildMaster-a futhi Umsebenzi-a. Bese unamathisela leli fayela master.cfg в /home/habr/master.

Isinyathelo esilandelayo ukuqala isevisi I-BuildMastera


sudo buildbot start /home/habr/master

Bese uqala isevisi Umsebenzi-a


buildbot-worker start /home/habr/worker

Ilungile! Manje I-Buildbot izolandelela izinguquko futhi icuphe yenza-y ku svn, ukwenza izinyathelo zokwakha nokuhlola iphrojekthi ngezakhiwo ezingenhla.

Ngezansi ngizochaza ezinye izici zalokhu okungenhla master.cfg.

6.1 Endleleni eya enkosini yakho.cfg


Ngisabhala okwami master.cfg Amaphutha amaningi azokwenziwa, ngakho-ke kuzodingeka ukufunda ifayela lokungena. Igcinwa njenge I-BuildMaster-ec indlela ephelele /home/habr/master/twistd.log, futhi eceleni Umsebenzi-a ngendlela ephelele /home/habr/worker/twistd.log. Njengoba ufunda iphutha futhi ulilungisa, uzodinga ukuqala kabusha isevisi I-BuildMaster-a. Nansi indlela okwenziwa ngayo:


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

6.2 Ukusebenza nge-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)

Okokuqala, ake sibheke svn_poller. Lokhu kuseyisixhumi esibonakalayo esifanayo, sivota njalo inqolobane kanye ngomzuzu. Esimweni esinjalo svn_poller ingena egatsheni kuphela isiqu. Ipharamitha engaqondakali split_file=util.svn.split_file_alwaystrunk ubeka imithetho: indlela yokuhlukanisa isakhiwo sefolda svn emagatsheni. Ubuye ubanikeze izindlela ezihambisanayo. Ngesikhathi sayo split_file_njalo trunk yenza inqubo ibe lula ngokuthi indawo yokugcina iqukethe kuphela isiqu.

В Abahleli kukhonjisiwe ShintshaIsihlungiobonayo None futhi ihlobanisa igatsha nayo isiqu ngokwenhlangano enikeziwe nge split_file_njalo trunk. Ukuphendula izinguquko ku isiqu, Yethula umakhi enegama iProject yakho.

izakhiwo lapha kuyadingeka ukuze umlawuli athole uhlu lwamakheli emiphumela yokwakha neyokuhlola njengomnikazi wenqubo.

Isinyathelo ukwakha-a Hlola ekwazi ukususa ngokuphelele noma yimaphi amafayela atholakala kunguqulo yasendaweni yendawo yokugcina Umsebenzi-A. Bese wenza ngokugcwele svn isibuyekezo. Imodi ilungiswa ngepharamitha imodi=egcwele, indlela=okusha. Ipharamitha misaOnTailure uthi uma svn isibuyekezo будет выполнен с ошибкой, то весь процесс сборки и тестирования следует приостановить, так как дальнейшие действия не имеют смысла.

6.3 Incwadi eya kuwe: Izintatheli zigunyaziwe ukuthi zimemezele


Izintatheli iyisevisi yokuthumela izaziso nge-imeyili.


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]

Angakwazi ukuthumela imilayezo izindlela ezahlukene.

I-MailNotifier isebenzisa i-imeyili ukuthumela izaziso.

isifanekiso_html usetha isifanekiso sombhalo sephephabhuku. I-HTML isetshenziselwa ukudala imakhaphu. Ishintshwa injini ijinja2 (ingafaniswa ne django). I-BuildBot inesethi yezinto eziguquguqukayo amanani azo ashintshwa abe isifanekiso phakathi nenqubo yokukhiqiza umbhalo womlayezo. Lezi zinhlobonhlobo zivalelwe {{ izikaki ezigoqeke kabili }}. Ngokwesibonelo, isifinyeto ibonisa isimo semisebenzi eqediwe, okungukuthi, impumelelo noma ukwehluleka. A amaphrojekthi izokhipha iProject yakho. Ngakho-ke, sebenzisa imiyalo yokulawula ku ijinja2, okuguquguqukayo I-BuildBot-a kanye nentambo ye-python amathuluzi okufometha, ungakha umlayezo ofundisa kakhulu.

I-MailNotifier iqukethe izimpikiswano ezilandelayo.

kusuka ku-addr – ikheli lapho wonke umuntu ezothola kulo incwajana.

sendToInterestedUsers=Iqiniso lithumela umlayezo kumnikazi nakumsebenzisi owenze yenza.

Bheka - isijobelelo okufanele sengezwe emagameni abasebenzisi abathola iphephandaba. Ngakho admin ukuthi umsebenzisi uzoyithola kanjani i-newsletter ekhelini [i-imeyili ivikelwe].

i-relayhost icacisa igama lomethuleli lapho iseva ivulwa khona smtp, a smptPort icacisa inombolo yembobo elalelayo smtp iseva.

imodi="isexwayiso" uthi ukuthunyelwa kweposi kufanele kwenziwe kuphela uma kunesinyathelo esisodwa ukwakha-a, okuphele ngokwehluleka kwesimo noma isexwayiso. Endabeni yempumelelo, asikho isidingo sokuthumela i-newsletter.

extraRecipients iqukethe uhlu lwabantu okufanele kuthunyelwe kubo i-imeyili ngaphezu komnikazi kanye nomuntu owenze lokhu yenza.

umyalezoFormatter kuyinto ecacisa ifomethi yomlayezo, isifanekiso sawo, kanye nesethi yeziguquguqukayo ezitholakala kuzo ijinja2. Izinketho ezifana wantProperties=True и wantSteps=Iqiniso chaza le sethi yezinto eziguquguqukayo ezitholakalayo.

nge['services']=[sendMessageToAll] inikeza uhlu lwezinsizakalo, phakathi kwazo okwethu kuzoba Intatheli.

Sikwenzile! Siyakuhalalisela

Sakhe okwethu ukucupha futhi sabona ukusebenza ekwaziyo. I-BuildBot. Lokhu, ngicabanga, kwanele ukuqonda ukuthi leli thuluzi liyadingeka yini ukudala iphrojekthi yakho. Ingabe unesithakazelo kuye? Ingabe kuzoba usizo kuwe? Ingabe ukhululekile ukusebenza naye? Khona-ke angibhali ngeze lesi sihloko.

Futhi ngokuqhubekayo. Ngingathanda ukusebenzisa umphakathi wochwepheshe I-BuildBot, yaba banzi, kwahunyushwa izincwadi zokufundisa, kwaba nezibonelo ezengeziwe.

Siyabonga nonke ngokunaka kwenu. Ngikufisela inhlanhla.

Source: www.habr.com

Engeza amazwana