Umzekelo wokuphumeza uHlanganiso oluqhubekayo usebenzisa i-BuildBot

Umzekelo wokuphumeza uHlanganiso oluqhubekayo usebenzisa i-BuildBot
(Umfanekiso ngo Ikhompyuter ku Pixabay)

Sawubona!

Igama lam ndingu Evgeniy Cherkin, Ndingumdwelisi wenkqubo kwiqela lophuhliso kwinkampani yezimayini Ipolymetal.

Xa uqala nayiphi na iprojekthi enkulu, uqala ukucinga: "Yeyiphi isoftware eyona ilungileyo ukuyisebenzisela ukuyinikezela?" Iprojekthi ye-IT ihamba ngenani lezigaba ngaphambi kokukhulula inguqulo elandelayo. Kulungile xa ikhonkco lezi zigaba zizenzekelayo. Inkqubo ezenzekelayo yokukhupha inguqulelo entsha yeprojekthi ye-IT ngokwayo ibizwa Ukuhlanganiswa okuqhubekayo. BuildBot uvele waba ngumncedisi olungileyo kuthi ekuphumezeni le nkqubo.

Kweli nqaku ndagqiba ekubeni ndinike isishwankathelo samathuba BuildBot. Yintoni le software ekwaziyo? Indlela yokusondela kuye kunye nendlela yokwakha UBUDLELWANE BOKUSEBENZA OKUSEBENZAYO kunye naye? Ungafaka amava ethu ngokwakho ngokwenza inkonzo esebenzayo yokwakha kunye nokuvavanya iprojekthi yakho kumatshini wakho.

Iziqulatho

Iziqulatho

1. Kutheni i-BuildBot?
2. Ingcamango ekhokelwa nguBuildMaster
3. Ufakelo
4. Amanyathelo okuqala

5. Uqwalaselo. Inyathelo ngenyathelo iresiphi

5.1 BuildmasterConfig
Abasebenzi be5.2
5.3 utshintsho_umthombo
5.4 abacwangcisi

5.5 Umzi-mveliso woKwakha
5.6 abakhi

6. Umzekelo wolungelelwaniso lwakho

6.1 Endleleni eya enkosini yakho.cfg
6.2 Ukusebenza nge-svn
6.3 Ileta eya kuwe: Iintatheli zigunyaziswe ukuba zibhengeze

Siyenzile! Sivuyisana nawe

1. Kutheni i-BuildBot?

Ngaphambili kwi-habr-e ndifumene amanqaku malunga nokuphunyezwa Ukuhlanganiswa okuqhubekayo usebenzisa BuildBot. Umzekelo, Le Ndiyifumene iyeyona ifundisayo. Kukho omnye umzekelo - elula ngakumbi. La manqaku anokunongwa umzekelo ovela kwincwadana, kwaye oku emva koko, ngesiNgesi. I-coupe yenza isiqalo esihle. Emva kokufunda la manqaku, mhlawumbi uya kufuna okuthile ngoko nangoko BuildBot yenza.

Yeka! Ngaba ukhona umntu oye wayisebenzisa kwiiprojekthi zabo? Kuvela ukuba ewe ezininzi balusebenzise kwimisebenzi yabo. Inokufumaneka imizekelo sebenzisa BuildBot nakwiindawo zokugcina zekhowudi zikaGoogle.

Ngoko yintoni ingqiqo yabantu abasebenzisa I-Buildbot? Ngapha koko, kukho ezinye izixhobo: Ulawulo lokuhamba emanzini и Jenkins. Ndiza kuphendula ngolu hlobo. Kwimisebenzi emininzi Jenkins kwaye inyaniso iya kwanela. Ngexesha layo, BuildBot - ukulungelelaniswa ngakumbi, ngelixa iingxaki zisonjululwa apho ngokulula njengaku Jenkins. Ukhetho lolwakho. Kodwa ekubeni sikhangele isixhobo sokuphuhlisa iprojekthi ekujoliswe kuyo, kutheni ungakhethi enye eya kuvumela, ukuqala kumanyathelo alula, ukufumana inkqubo yokwakha enokusebenzisana kunye nojongano olulodwa.

Kwabo iprojekthi ekujoliswe kuyo ibhalwe kwi-python, umbuzo uvela: "Kutheni ungakhethi inkqubo yokudibanisa enomsebenzi ocacileyo ngokubhekiselele kulwimi olusetyenziswe kwiprojekthi?" Kwaye ngoku lixesha lokubonisa izibonelelo BuildBot.

Ke, "iquartet yezixhobo" zethu. Kum, ndizichonge izinto ezine BuildBot:

  1. Sisikhokelo somthombo ovulekileyo phantsi kwelayisensi ye-GPL
  2. Oku kukusetyenziswa kwepython njengesixhobo soqwalaselo kunye nenkcazo yezenzo ezifunekayo
  3. Eli lithuba lokufumana impendulo kumatshini apho indibano yenzeke khona
  4. Ezi, ekugqibeleni, zezona mfuno zisezantsi zomamkeli. Ukusasazwa kufuna ipithon kwaye ijijekile, kwaye ayifuni umatshini wenyani kunye nomatshini we-java.

2. Ingcamango ekhokelwa nguBuildMaster

Umzekelo wokuphumeza uHlanganiso oluqhubekayo usebenzisa i-BuildBot

Okusembindini wolwakhiwo lonikezelo lomsebenzi kuku BuildMaster. Yinkonzo ethi:

  • ugcina umkhondo utshintsho kumthi womthombo weprojekthi
  • iyathumela imiyalelo ekufuneka yenziwe yinkonzo yoMsebenzi ukwakha iprojekthi kunye nokuvavanya
  • iyazisa abasebenzisi malunga neziphumo zezenzo ezithathiweyo

BuildMaster iqwalaselwe ngefayile inkosi.cfg. Le fayile ikwingcambu BuildMaster. Kamva ndiza kubonisa indlela le ngcambu idalwe ngayo. Ifayile ngokwayo inkosi.cfg iqulethe iscript yepython esebenzisa iifowuni BuildBot.

Okulandelayo eyona nto ibalulekileyo BuildBot unegama UmSebenzi. Le nkonzo inokuqaliswa kwenye inginginya ene-OS eyahlukileyo, okanye mhlawumbi kwenye apho BuildMaster. Inokubakho kwimeko engqongileyo elungiselelwe ngokukodwa eneepakethe zayo kunye nezinto eziguquguqukayo. Ezi meko bume zinokulungiswa kusetyenziswa izinto zepython ezifana virtualenv, vev.

BuildMaster isasaza imiyalelo kumntu wonke UmSebenzi-y, kwaye naye, uyawazalisekisa. Oko kukuthi, kuvela ukuba inkqubo yokwakha kunye nokuvavanya iprojekthi inokuqhubeka UmSebenzi-e eqhuba iiWindows kunye nomnye uMsebenzi oqhuba iLinux.

Phuma Iikhowudi zomthombo weprojekthi zenzeka kwindawo nganye UmSebenzi-e.

3. Ufakelo

Ngoko, masihambe. Ndiza kusebenzisa Ubuntu 18.04 njengomamkeli. Ndiza kubeka enye kuyo BuildMaster-a kunye nenye UmSebenzi-a. Kodwa kuqala kufuneka ufake i-python3.7:

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

Kwabo bafuna i-python3.7.2 endaweni ye-3.7.1, unokwenza oku kulandelayo:


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

Inyathelo elilandelayo kukufaka Ifakwe kuTwitter и BuildBot, kunye neephakheji ezikuvumela ukuba usebenzise umsebenzi owongezelelweyo 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. Amanyathelo okuqala

Ixesha lokudala BuildMaster. Iya kuba kwifolda yethu /home/habr/master.

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

Inyathelo elilandelayo. Masidale UmSebenzi. Iya kuba kwifolda yethu /ikhaya/habr/umsebenzi.

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

Xa ubaleka UmSebenzi, ngoko ngokungagqibekanga iyakwenza ngaphakathi /ikhaya/habr/umsebenzi incwadi enegama leprojekthi, echazwe kuyo inkosi.cfg. Kwaye kwifolda enegama leprojekthi iya kudala uvimba weefayili Ukwakha, kwaye iya kuqhubeka isenza phuma. Uluhlu olusebenzayo lwe UmSebenzi-kwaye iya kuba lulawulo /home/habr/yourProject/build.

"Isitshixo segolide
Kwaye ngoku into endiyibhalele umhlathi odlulileyo: iskripthi eso Master iya kufuna ukusuka UmSebenzi-kwaye yenziwe ukude kolu lawulo aluyi kuphunyezwa kuba iscript asinazo iimvume zokusebenzisa. Ukulungisa imeko, uya kufuna isitshixo --umask=0o22NONE Kwaye yiloo nto kuphela esiyifunayo.

BuildMaster и UmSebenzi sungula unxibelelwano omnye nomnye. Kwenzeka ukuba ikhefu kwaye UmSebenzi elinde ixesha elithile impendulo evela BuildMaster-A. Ukuba akukho mpendulo, uxhulumaniso luqalwa kwakhona. Isitshixo --gcina uphila=60 kufuneka nje ukubonisa ixesha emva koko xhuma reboots.

5. Uqwalaselo. Inyathelo ngenyathelo iresiphi

Isimo BuildMaster iqhutywa kwicala lomatshini apho senze khona umyalelo dala-inkosi. Kwimeko yethu, olu luluhlu /home/habr/master. Ifayile yoqwalaselo inkosi.cfg ayikabikho, kodwa umyalelo ngokwawo sele udale ifayile master.cmg.isampulu. Kufuneka uyinike igama kwakhona inkosi.cfg.isampulu в inkosi.cfg

mv master.cfg.sample master.cfg

Masivule le inkosi.cfg. Kwaye makhe sijonge ukuba iqulathe ntoni na. Kwaye emva koko, makhe sizame ukwenza eyethu ifayile yoqwalaselo.

inkosi.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 — isichazi-magama esisisiseko sefayile yoqwalaselo. Kufuneka ifakwe kwifayile yoqwalaselo. Ukusebenziseka lula, i-alias yaziswa kwikhowudi yoqwalaselo "c". Izihloko yezitshixo в c["keyFromDist"] zizinto ezisisigxina zokunxibelelana nazo BuildMaster. Kwiqhosha ngalinye, into ehambelanayo ifakwa endaweni yexabiso.

Abasebenzi be5.2

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

Ngeli xesha sibonisa BuildMaster-y uluhlu lwe UmSebenzi-s. Mna UmSebenzi sidale ephakamileyo, ebonisa igama lakho lomsebenzisi и inombolo yokuvula. Ngoku kufuneka zichazwe endaweni yoko umzekelo-umsebenzi и kudlule .

5.3 utshintsho_umthombo

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

Ngesitshixo change_source isichazi-magama c sifumana ukufikelela kuluhlu apho sifuna ukubeka into evotela indawo yokugcina kunye nekhowudi yomthombo weprojekthi. Umzekelo usebenzisa indawo yokugcina yeGit ephononongwa ngamaxesha athile.

Ingxoxo yokuqala yindlela eya kwindawo yakho yokugcina.

workdir imele umendo kulawulo apho kwicala UmSebenzi-isalamane kwindlela /home/habr/worker/yourProject/build git iya kugcina inguqulelo yendawo yokugcina.

yesebe iqulethe isebe elithile kwindawo yokugcina ekufuneka ilandelwe.

Isithuba sokuvota iqulathe inani lemizuzwana emva koko BuildMaster iya kuvota indawo yokugcina utshintsho.

Kukho iindlela ezininzi zokulandelela utshintsho kwindawo yokugcina iprojekthi.

Eyona ndlela ilula yile U ku polisa, nto leyo ethetha ukuba BuildMaster ngamaxesha athile uvotela umncedisi ngovimba. Ukuba zibophe ibonise utshintsho kwindawo yokugcina, ngoko BuildMaster izakudala into yangaphakathi ngokulibaziseka okuthile utshintsho kwaye uyithumele kumphathi wesiganeko Ishedyuli, eya kuqalisa amanyathelo okwakha nokuvavanya iprojekthi UmSebenzi-e. Phakathi kwala manyathelo kuya kuboniswa update indawo yokugcina. Ngokuchanekileyo kwi UmSebenziOku kuya kudala ikopi yendawo yokugcina. Iinkcukacha zale nkqubo ziya kuchazwa apha ngezantsi kumacandelo amabini alandelayo. (5.4 и 5.5).

Eyona ndlela intle ngakumbi yokulandelela utshintsho kwindawo yokugcina kukuthumela imiyalezo ngokuthe ngqo kwiseva eyibamba BuildMaster- malunga nokutshintsha iikhowudi zomthombo weprojekthi. Kule meko, ngokukhawuleza ukuba umphuhlisi enze zibophe, umncedisi onovimba weprojekthi uya kuthumela umyalezo BuildMaster-y. Kwaye yena, uya kuyinqanda ngokudala into PBChangeSource. Okulandelayo, le nto iya kudluliselwa ku Ishedyuli, eyenza amanyathelo okwakha iprojekthi kwaye ayivavanye. Inxalenye ebalulekileyo yale ndlela isebenza nayo ikhonkco-izikripthi zeseva kwindawo yokugcina. Kwiskripthi ikhonkco-a, uxanduva lokucwangcisa iintshukumo xa zibophe-e, kufuneka ufowunele usetyenziso thumela utshintsho kwaye ucacise idilesi yenethiwekhi BuildMaster-A. Kufuneka kwakhona uchaze i-port yenethiwekhi eya kumamela PBChangeSource. PBChangeSource, ngendlela, yinxalenye BuildMaster-A. Le ndlela iya kufuna imvume admin-a kumncedisi apho indawo yokugcina iprojekthi ikhona. Kuya kufuneka kuqala wenze i-backup yendawo yokugcina.

5.4 abacwangcisi


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

abacwangcisi - le nto yinto esebenza njenge-trigger eqala lonke ikhonkco lokuhlanganisa kunye novavanyo lweprojekthi.
Umzekelo wokuphumeza uHlanganiso oluqhubekayo usebenzisa i-BuildBot

Olo tshintsho lurekhodiweyo change_source, iguqulwe kwinkqubo yomsebenzi BuildBot-a ukuchasa utshintsho kwaye ngoku yonke Sheduler ngokusekelwe kubo, yakha izicelo zokuqalisa inkqubo yokwakha iprojekthi. Nakuba kunjalo, ikwamisela ukuba ezi zicelo zigqithiselwa nini na emgceni. Into umakhi igcina umgca wezicelo kwaye ilandelela imeko yendibano yangoku ngokwahlukileyo UmSebenzi-kwaye. umakhi ikhona BuildMaster-e kwaye uqhubeke UmSebenzi-e. Uthumela kunye BuildMaster-a qhubeka UmSebenzi-kwaye sele icacisiwe Ukwakha - Uluhlu lwamanyathelo ekufuneka alandelwe.
Siyabona ukuba kumzekelo wangoku onjalo abacwangcisi Iziqwenga ezi-2 zenziwe. Ngaphezu koko, ngamnye unohlobo lwayo.

SingleBranchScheduler - enye yeeklasi ezidumileyo kwishedyuli. Ijonga isebe elinye kwaye ishukunyiswa lutshintsho olurekhodiweyo kuyo. Xa ebona utshintsho, unokulibazisa ukuthumela isicelo sokwakha (libazise ixesha elichazwe kwipharamitha ekhethekileyo treeStableTimer). NGAPHAKATHI igama icwangcisa igama leshedyuli eliza kuboniswa kulo BuildBot-ujongano lwewebhu. IN Guqula isihluzi icebo lokucoca licwangcisiwe, emva kokudlula apho utshintsho kwisebe luqhubele ucwangciso ukuthumela isicelo sokwakhiwa. IN builderNames igama libonisiwe umakhi-a, esiza kuyibeka kamva kancinane. Igama kwimeko yethu liya kufana negama leprojekthi: iProjekthi yakho.

ForceScheduler into elula kakhulu. Olu hlobo lweshedyuli iqalwa ngonqakrazo lwe mouse ngapha BuildBot-ujongano lwewebhu. Iiparamitha zinondoqo ofanayo nowoku SingleBranchScheduler.

P.S. Inombolo yesi-3. Mhlawumbi kuya kuba luncedo
Ngamaxesha athile lucwangciso oluqhutywa ngamaxesha athile amiselweyo. Umnxeba ujongeka ngolu hlobo


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

5.5 Umzi-mveliso woKwakha


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 ixela ixesha lale periodicity kwimizuzwana.

YakhaFactory yenza into ethile Ukwakha, nto leyo ke umakhi ithumela ku UmSebenzi. Ku YakhaFactory ibonisa amanyathelo aza kulandelwa UmSebenzi-y. Amanyathelo ongezwa ngokubiza indlela dibanisaInyathelo

Inyathelo lokuqala elongezelelweyo kulo mzekelo git clean -d -f -f -xke ukuphuma kwe-git. Ezi zenzo zibandakanyiwe kwipharamitha indlela, engachazwanga ngokucacileyo kodwa ethetha ixabiso elimiselweyo olutsha... Ipharamitha indlela='yongeza' ibonisa ukuba iifayile zisuka kulawulo apho i chechout, ngelixa ilahlekile kwindawo yokugcina, ihlale ingachukunyiswa.

Inyathelo lesibini elongezelelweyo libiza iskripthi trial ngeparameter mholweni ecaleni UmSebenzi-a ukusuka kulawulo /home/habr/worker/yourProject/build ngoguqulo lokusingqongileyo PATHONPATH=... Ngoko ke, ungabhala ezakho izikripti kwaye uziphumeze ecaleni. UmSebenzi-a inyathelo ngalinye util.ShellCommand. Ezi zikripthi zinokubekwa ngokuthe ngqo kwindawo yokugcina. Emva koko ngo chechout-e baya kuwela /home/habr/worker/yourProject/build. Nangona kunjalo, kukho ezimbini "iingxaki":

  1. UmSebenzi kufuneka yenziwe ngesitshixo --umask ukuze ingavali amalungelo ophumezo emva phuma-I.
  2. e git Push-e kwezi scripts kufuneka uchaze ipropati iyathethekaukuze kamva chechout-e khange iphulukane nelungelo lokusebenzisa iGit script.

5.6 abakhi


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

Malunga nokuba yintoni na umakhi waxelelwa apha. Ngoku ndiza kukuxelela ngakumbi malunga nendlela yokuyidala. BuilderConfig ngumakhi umakhi. Abaqulunqi abanjalo kwi c['builders'] ungakhankanya ezininzi, kuba eli liphepha lezinto umakhi uhlobo. Ngoku makhe siphinde sibhale umzekelo ukusuka BuildBot, ukuyisondeza kumsebenzi wethu.


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

Ngoku ndiza kukuxelela malunga neeparamitha BuilderConfig.

igama ixela igama umakhi-a. Apha sayithiya igama iProjekthi yakho... Oku kuthetha ukuba kwi UmSebenzi- le ndlela iya kwenziwa /home/habr/worker/yourProject/build. Sheduler Ndikhangela i umakhi nje ngeli gama.

amagama abasebenzi iqulathe iphepha UmSebenzi-s. Nganye kuzo kufuneka yongezwe kuyo c['abasebenzi'].

umzi-mveliso - ngqo Ukwakha, enxulunyaniswa nayo umakhi. Uya kuthumela into Ukwakha phezu UmSebenzi ukugqiba onke amanyathelo aqukiweyo koku Ukwakha-I.

6. Umzekelo wolungelelwaniso lwakho

Nanku umzekelo woyilo lweprojekthi endicebisa ukuba ndiwuphumeze BuildBot
.

Siza kusebenzisa njengenkqubo yolawulo loguqulelo svn. Uvimba ngokwawo uya kuba kuhlobo oluthile lwelifu. Nantsi idilesi yelifu svn.host/svn/yourProject/trunk. Efini ngaphantsi svn kukho igama lomsebenzisi leakhawunti: umsebenzisi, passwd: inombolo yokuvula. Izikripthi ezimele amanyathelo Ukwakha-a iya kuba sebeni svn, kulawulo olwahlukileyo buildbot/worker_linux. Ezi zikripthi zikwindawo yokugcina izinto ezigciniweyo ukuphunyezwa.

BuildMaster и UmSebenzi baleka kwinginginya enye project.host .BuildMaster igcina iifayile zayo kulawulo /home/habr/master. UmSebenzi igcinwa ngendlela elandelayo /ikhaya/habr/umsebenzi. Inkqubo yonxibelelwano BuildMaster-a kunye UmSebenzi-a iqhutyelwa nge-port 4000 ngokweprotocol BuildBot-a, oko kukuthi 'pb' iprotocol.

Iprojekthi ekujoliswe kuyo ibhalwe ngokupheleleyo kwiPython. Umsebenzi kukulandelela utshintsho lwayo, ukudala ifayile ephunyezwayo, ukuvelisa amaxwebhu, kunye nokuvavanya. Kwimeko yokusilela, bonke abaphuhlisi kufuneka bathumele umyalezo nge-imeyile echaza ukuba kukho isenzo esingaphumelelanga.

Umboniso wewebhu BuildBot siya kuqhagamshela kwizibuko 80 ngenxa project.host. Akuyimfuneko ukufaka i-Apatch. Njengenxalenye yethala leencwadi Ephosakeleyo sele ikhona iseva yewebhu, BuildBot uyayisebenzisa.

Ukugcina ulwazi lwangaphakathi lwe BuildBot siya kusebenzisa Isikwere.

Umamkeli uyafuneka ukuze uthunyelwe smtp.your.domain - ivumela ukuthumela iileta ezivela kwi-imeyile [imeyile ikhuselwe] ngaphandle kobunyani. Kwakhona kumphathi 'SMTP ' Imizuzu ivakala kwisithuba se-1025.

Kukho abantu ababini ababandakanyekayo kwinkqubo: admin и umsebenzisi. ilawula BuildBot. umsebenzisi ngumntu ozenzayo zibophe-s.

Ifayile ebambekayo yenziwe nge ipyinstaller. Amaxwebhu enziwa nge ioksijini.

Ngolu yilo lwezakhiwo ndibhale oku: inkosi.cfg:

inkosi.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"
}

Kuqala kufuneka ukudala BuildMaster-a kunye UmSebenzi-a. Emva koko coma le fayile inkosi.cfg в /home/habr/master.

Inyathelo elilandelayo kukuqalisa inkonzo BuildMastera


sudo buildbot start /home/habr/master

Emva koko qalisa inkonzo UmSebenzi-a


buildbot-worker start /home/habr/worker

Ulungile! Ngoku I-Buildbot izakulandelela utshintsho kunye nokuqalisa zibophe-y kwi svn, ukwenza amanyathelo okwakha kunye nokuvavanya iprojekthi kunye nolwakhiwo olungentla.

Ngezantsi ndiza kuchaza ezinye iimpawu ezingentla inkosi.cfg.

6.1 Endleleni eya enkosini yakho.cfg


Ngelixa ndibhala eyam inkosi.cfg Iimpazamo ezininzi ziya kwenziwa, ngoko ukufunda ifayile yelog kuya kufuneka. Igcinwe njenge BuildMaster-e kunye nendlela epheleleyo /home/habr/master/twistd.log, kwaye ecaleni UmSebenzi-a enendlela epheleleyo /home/habr/worker/twistd.log. Njengoko ufunda impazamo kwaye uyilungise, kuya kufuneka uqalise kwakhona inkonzo BuildMaster-a. Nantsi indlela eyenziwa 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, makhe sijonge svn_poller. Oku kuselujongano olufanayo, kuvotwa rhoqo indawo yokugcina kanye ngomzuzu. Kule meko svn_poller ifikelela kuphela kwisebe trunk. Ipharamitha engaqondakaliyo split_file=util.svn.split_file_alwaystrunk icwangcisa imigaqo: indlela yokwaphula isakhiwo sencwadi eneenkcukacha svn emasebeni. Ukwabanika neendlela ezilinganiselweyo. Ngexesha layo split_ifayile_ihlala inesiqu yenza lula inkqubo ngokuthi indawo yokugcina iqulethe kuphela trunk.

В Ishedyuli kubonisiwe Guqula isihluzingubani obonayo nanye kwaye inxulumanisa isebe nayo trunk ngokombutho onikiweyo nge split_ifayile_ihlala inesiqu. Ukuphendula kutshintsho kwi trunk, Iyazisa umakhi enegama iProjekthi yakho.

iipropati apha iyafuneka ukuze umlawuli afumane uluhlu lokuposa lolwakhiwo kunye neziphumo zovavanyo njengomnini wenkqubo.

Inyathelo Ukwakha-a phuma ekwazi ukucima ngokupheleleyo naziphi na iifayile ezibekwe kuguqulelo lobulali logcino UmSebenzi-A. Kwaye ke wenze ngokupheleleyo uhlaziyo lwesvn. Imowudi iqwalaselwe ngeparameter indlela=egcweleyo, indlela=ntsha... Ipharamitha HaltOnTailure uthi ukuba uhlaziyo lwesvn iya kuphunyezwa ngempazamo, emva koko yonke inkqubo yokwakha kunye nokuvavanya kufuneka inqunyanyiswe, ekubeni izenzo ezongezelelweyo azinangqiqo.

6.3 Ileta eya kuwe: Iintatheli zigunyaziswe ukuba zibhengeze


Ntatheli yinkonzo yokuthumela izaziso nge-imeyile.


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]

Uyakwazi ukuthumela imiyalezo iindlela ezahlukeneyo.

Isaziso semeyile isebenzisa i-imeyile ukuthumela izaziso.

itemplate_html icwangcisa ithempleyithi yokubhaliweyo yeleta yeendaba. I-HTML isetyenziselwa ukwenza uphawulo. Ilungiswa yi-injini ijinja2 (inokuthelekiswa ne django). BuildBot ineseti yezinto eziguquguqukayo amaxabiso afakwe endaweni yetemplate ngexesha lenkqubo yokuvelisa okubhaliweyo komyalezo. Ezi zantlukwano zivalelwe kwi- {{ iibrayisi ezigoqene kabini }}. Umzekelo, isishwankathelo ibonisa ubume bemisebenzi egqityiweyo, oko kukuthi, impumelelo okanye ukusilela. A iiprojekthi izakuvelisa iProjekthi yakho. Ke, usebenzisa imiyalelo yolawulo kwi ijinja2, izinto ezahlukeneyo BuildBot-a kunye nezixhobo zokufomatha umtya wepython, unokwenza umyalezo onolwazi kakhulu.

Isaziso semeyile iqulathe ezi mpikiswano zilandelayo.

usuka – idilesi apho wonke umntu uya kufumana incwadana yeendaba.

sendToInterestedUsers=Inyani ithumela umyalezo kumnini nakumsebenzisi owenze zibophe.

Jonga phezulu - isimamva ekufuneka songezwe kumagama abasebenzisi abafumana incwadana yeendaba. Ngoko admin indlela umsebenzisi aya kufumana ngayo incwadana yeendaba kwidilesi [imeyile ikhuselwe].

relayhost ixela igama lenginginya apho umncedisi avulwe khona SMTP, i smptPort ixela inani lezibuko elimameleyo SMTP umncedisi.

indlela="isilumkiso" ithi ukuposa makwenziwe kuphela ukuba kukho ubuncinci inyathelo elinye Ukwakha-a, ephele ngokusilela kwesimo okanye isilumkiso. Kwimeko yokuphumelela, akukho mfuneko yokuthumela incwadana yeendaba.

extraRecipients inoluhlu lwabantu ekufuneka ithunyelwe kubo ngeposi ukongeza kumnini kunye nomntu othe wathumela zibophe.

umyalezoFormatter yinto exela ifomati yomyalezo, itemplate yayo, kunye neqela lezinto eziguquguqukayo ezikhoyo ukusuka ijinja2. Iinketho ezifana wantProperties=Yinyani и wantSteps=Yinyani chaza le seti yezinto ezikhoyo.

nge['iinkonzo']=[sendMessageToAll] inikeza uluhlu lweenkonzo, phakathi kwazo ezethu ziya kuba umcholi-ndaba.

Siyenzile! Sivuyisana nawe

Senze ulungelelwaniso lwethu kwaye sabona ukusebenza olukwaziyo. BuildBot. Oku, ndicinga ukuba, kwanele ukuqonda ukuba ngaba esi sixhobo siyafuneka ukwenza iprojekthi yakho. Ngaba unomdla kuye? Ngaba iya kuba luncedo kuwe? Ngaba ukhululekile ukusebenza naye? Emva koko andibhali eli nqaku ilize.

Kwaye ngakumbi. Ndingathanda ukusetyenziswa koluntu oluchwepheshile BuildBot, yaba banzi, kwaguqulelwa iincwadi zemigaqo, yaye kwakukho nemizekelo engakumbi.

Enkosi nonke ngengqalelo yenu. Nqwenelela impumelelo.

umthombo: www.habr.com

Yongeza izimvo