Dæmi um útfærslu á Continuous Integration með BuildBot

Dæmi um útfærslu á Continuous Integration með BuildBot
(Mynd eftir Tölvuvél frá Pixabay)

РџСЂРІРμы!

Ég heiti Evgeniy Cherkin, Ég er forritari í þróunarteymi hjá námufyrirtæki Fjölmetal.

Þegar þú byrjar stórt verkefni byrjarðu að hugsa: "Hvaða hugbúnað er best að nota til að viðhalda því?" Upplýsingatækniverkefni fer í gegnum nokkur stig áður en næsta útgáfa er gefin út. Það er gott þegar keðja þessara þrepa er sjálfvirk. Sjálfvirkt ferli að gefa út nýja útgáfu af upplýsingatækniverkefni sjálfu er kallað Stöðug samþætting. BuildBot reyndist okkur góður aðstoðarmaður við innleiðingu þessa ferlis.

Í þessari grein ákvað ég að gefa yfirlit yfir möguleikana BuildBot. Hvað er þessi hugbúnaður fær um? Hvernig á að nálgast hann og hvernig á að byggja upp eðlilegt ÁRÁKVÆÐ VINNUtengsl við hann? Þú getur sótt reynslu okkar sjálfur með því að búa til virka þjónustu til að byggja og prófa verkefnið þitt á vélinni þinni.

efni

efni

1. Hvers vegna BuildBot?
2. Hugmynd undir forystu BuildMaster
3. Uppsetning
4. Fyrstu skrefin

5. Stillingar. Skref fyrir skref uppskrift

5.1 BuildmasterConfig
5.2 starfsmenn
5.3 change_source
5.4 tímasetningar

5.5 BuildFactory
5.6 byggingarmenn

6. Dæmi um þína eigin uppsetningu

6.1 Á leiðinni til húsbónda þíns.cfg
6.2 Unnið með svn
6.3 Bréf til þín: fréttamönnum er heimilt að lýsa yfir

Okkur tókst það! Til hamingju

1. Hvers vegna BuildBot?

Áður á habr-e rakst ég á greinar um framkvæmd Stöðug samþætting að nota BuildBot... Til dæmis, Þessi Mér fannst það fróðlegast. Það er annað dæmi - einfaldari. Þessar greinar geta verið kryddaðar dæmi úr handbókinniOg это eftir það á ensku. Coupé er góður upphafspunktur. Eftir að hafa lesið þessar greinar muntu líklega strax vilja eitthvað á BuildBot að gera.

Hættu! Hefur einhver raunverulega notað það í verkefnum sínum? Það kemur í ljós já margir beitt því í verkefnum sínum. Getur verið fundið dæmi nota BuildBot og í Google kóða skjalasafni.

Svo hver er rökfræðin í því að fólk noti Byggjabotn? Eftir allt saman, það eru önnur verkfæri: CruiseControl и Jenkins. Ég mun svara á þennan hátt. Fyrir flest verkefni Jenkins og sannleikurinn verður nóg. Aftur á móti, BuildBot - aðlögunarhæfara, á meðan vandamál eru leyst þar eins einfaldlega og í Jenkins. Valið er þitt. En þar sem við erum að leita að tæki fyrir markverkefni í þróun, hvers vegna ekki að velja eitt sem gerir, byrjað á einföldum skrefum, að fá smíðakerfi sem hefur gagnvirkni og einstakt viðmót.

Fyrir þá sem hafa markmiðsverkefnið skrifað í python, vaknar spurningin: "Af hverju ekki að velja samþættingarkerfi sem hefur skýrt viðmót hvað varðar tungumálið sem notað er í verkefninu?" Og nú er kominn tími til að kynna kosti BuildBot.

Svo, "hljóðfærakvartettinn" okkar. Fyrir sjálfan mig hef ég bent á fjóra eiginleika BuildBot:

  1. Það er opinn uppspretta rammi undir GPL leyfi
  2. Þetta er notkun python sem stillingartæki og lýsing á nauðsynlegum aðgerðum
  3. Þetta er tækifæri til að fá svar frá vélinni sem samsetningin fer fram á
  4. Þetta eru að lokum lágmarkskröfur fyrir gestgjafa. Uppsetning krefst python og brenglaður, og krefst ekki sýndarvél og Java vél.

2. Hugmynd undir forystu BuildMaster

Dæmi um útfærslu á Continuous Integration með BuildBot

Miðpunktur verkefnisdreifingararkitektúrsins er BuildMaster. Það er þjónusta sem:

  • heldur utan um breytingar á upprunatré verkefnisins
  • sendir skipanir sem ætti að framkvæma af Worker þjónustunni til að byggja verkefnið og prófa það
  • tilkynnir notendum um niðurstöður aðgerða sem gripið hefur verið til

BuildMaster stillt í gegnum skrá master.cfg. Þessi skrá er í rótinni BuildMaster. Síðar mun ég sýna hvernig þessi rót er búin til. Skráin sjálf master.cfg inniheldur python script sem notar kalla BuildBot.

Næst mikilvægasti hluturinn BuildBot hefur nafn Verkamaður. Hægt er að ræsa þessa þjónustu á öðrum hýsingaraðila með öðru stýrikerfi, eða kannski á þeim þar sem BuildMaster. Það getur líka verið til í sérútbúnu sýndarumhverfi með eigin pakka og breytum. Hægt er að útbúa þetta sýndarumhverfi með því að nota python tól eins og virtualenv, venv.

BuildMaster sendir út skipanir til allra Verkamaður-y, og hann aftur á móti uppfyllir þau. Það er, það kemur í ljós að ferlið við að byggja og prófa verkefni getur haldið áfram Verkamaður-e sem keyrir Windows og á öðrum Worker sem keyrir Linux.

Athuga frumkóðar verkefnis koma fyrir á hverjum Verkamaður-e.

3. Uppsetning

Svo, við skulum fara. Ég mun nota Ubuntu 18.04 sem gestgjafa. Ég set einn á það BuildMaster-a og einn Verkamaður-a. En fyrst þarftu að setja upp python3.7:

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

Fyrir þá sem þurfa python3.7.2 í stað 3.7.1 geturðu gert eftirfarandi:


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

Næsta skref er að setja upp Tweetaði и BuildBot, auk pakka sem gera þér kleift að nota viðbótarvirkni BuildBot-The.


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

Tími til að búa til BuildMaster. Það verður í möppunni okkar /heimili/bústaður/meistari.

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

Næsta skref. Við skulum búa til Verkamaður. Það verður í möppunni okkar /heimili/bústaður/starfsmaður.

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

Þegar þú hleypur Verkamaður, þá mun það sjálfgefið búa til í /heimili/bústaður/starfsmaður möppu með nafni verkefnisins, sem er tilgreint í master.cfg. Og í möppunni með nafni verkefnisins mun það búa til möppu byggja, og mun halda því áfram stöðva. Vinnuskrá fyrir Verkamaður-og það verður að skrá /home/habr/yourProject/build.

„Gullni lykill
Og nú það sem ég skrifaði fyrri málsgrein fyrir: handrit sem Meistari mun krefjast af Verkamaður-og gert fjarstýrt í þessari möppu verður ekki keyrt vegna þess að handritið hefur ekki leyfi til að keyra. Til að leiðrétta ástandið þarftu lykil --umask=0o22, sem bannar að skrifa í þessa möppu, en mun halda ræsingarréttindum. Og það er allt sem við þurfum.

BuildMaster и Verkamaður koma á tengslum við hvert annað. Það kemur fyrir að það brotnar af og Verkamaður beðið í nokkurn tíma eftir svari frá BuildMaster-A. Ef ekki er svarað er tengingin endurræst. Lykill --keepalive=60 þurfti bara að gefa til kynna tímann eftir það tengjast endurræsir.

5. Stillingar. Skref fyrir skref uppskrift

Stillingar BuildMaster er framkvæmt á hlið vélarinnar þar sem við framkvæmdum skipunina skapa-meistari. Í okkar tilviki er þetta skrá /heimili/bústaður/meistari. Stillingarskrá master.cfg er ekki til ennþá, en skipunin sjálf hefur þegar búið til skrána master.cmg.sample. Þú þarft að endurnefna það í master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Við skulum opna þennan master.cfg. Og við skulum skoða hvað það samanstendur af. Og eftir það skulum við reyna að búa til okkar eigin stillingarskrá.

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 — grunnorðabók yfir stillingarskrána. Það verður að vera með í stillingarskránni. Til að auðvelda notkun er samnefni kynnt í stillingarkóðanum "c". Titlar lyklar в c["keyFromDist"] eru fastir þættir til samspils við BuildMaster. Fyrir hvern lykil er samsvarandi hlutur settur í staðinn fyrir gildi.

5.2 starfsmenn

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

Að þessu sinni vísum við til BuildMaster-y listi yfir Verkamaður-s. Sjálfur Verkamaður við sköpuðum ofan, sem gefur til kynna þú-verkamannsnafn и lykilorð. Nú þarf að tilgreina þær í staðinn dæmi-vinnumaður и fara .

5.3 change_source

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

Með lykli breyta_uppsprettu orðabók c við fáum aðgang að listanum þar sem við viljum setja hlut sem skoðar geymsluna með frumkóða verkefnisins. Dæmið notar Git geymslu sem er spurt með ákveðnu millibili.

Fyrstu rökin eru leiðin að geymslunni þinni.

vinnustýri táknar slóðina að möppunni þar sem hún er til hliðar Verkamaður-a ættingja við slóðina /home/habr/worker/yourProject/build git mun geyma staðbundna útgáfu geymslunnar.

grein inniheldur ákveðna grein í geymslunni sem ætti að fylgja.

pollInterval inniheldur fjölda sekúndna eftir það BuildMaster mun skoða geymsluna fyrir breytingum.

Það eru nokkrar aðferðir til að fylgjast með breytingum á geymslu verkefnis.

Einfaldasta aðferðin er Mælingar, sem felur það í sér BuildMaster skoðar reglulega netþjóninn með geymslunni. Ef skuldbinda sig endurspeglaði breytingarnar á geymslunni, þá BuildMaster mun búa til innri hlut með nokkurri töf Breyta og sendu það til atburðarstjóra Tímaáætlun, sem mun hefja skrefin til að byggja og prófa verkefnið á Verkamaður-e. Meðal þessara skrefa verður tilgreint uppfærsla geymsla. Nákvæmlega á VerkamaðurÞetta mun búa til staðbundið afrit af geymslunni. Farið verður yfir upplýsingar um þetta ferli hér að neðan í næstu tveimur köflum. (5.4 и 5.5).

Enn glæsilegri aðferð til að fylgjast með breytingum á geymslu er að senda skilaboð beint frá þjóninum sem hýsir það til BuildMaster- um að breyta frumkóðum verkefnisins. Í þessu tilviki, um leið og verktaki gerir skuldbinda sig, þjónninn með verkefnageymslunni mun senda skilaboð BuildMaster-y. Og hann aftur á móti mun stöðva það með því að búa til hlut PBChangeSource. Næst verður þessi hlutur fluttur til Tímaáætlun, sem virkjar skrefin til að byggja verkefnið og prófa það. Mikilvægur hluti af þessari aðferð er að vinna með krókur-miðlara forskriftir í geymslunni. Í handritinu krókur-a, ábyrgur fyrir vinnslu aðgerða þegar skuldbinda sig-e, þú þarft að hringja í tólið sendabreyting og tilgreindu netfangið BuildMaster-A. Þú þarft líka að tilgreina netgáttina sem mun hlusta PBChangeSource. PBChangeSource, við the vegur, er hluti BuildMaster-A. Þessi aðferð mun krefjast leyfis Admin-a á þjóninum þar sem verkefnageymslan er staðsett. Þú þarft fyrst að taka öryggisafrit af geymslunni.

5.4 tímasetningar


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

tímaáætlunarmenn - þetta er þáttur sem virkar sem kveikja sem byrjar alla keðju samsetningar og prófunar á verkefninu.
Dæmi um útfærslu á Continuous Integration með BuildBot

Þær breytingar sem voru skráðar breyta_uppsprettu, umbreytt í vinnuferlinu BuildBot-a að mótmæla Breyta og nú á hverjum Sheduler byggt á þeim byggir það upp beiðnir um að hefja byggingarferli verkefnisins. Hins vegar ákvarðar það einnig hvenær þessar beiðnir eru fluttar frekar í biðröðina. Hlutur Byggir geymir biðröð af beiðnum og fylgist með stöðu núverandi samsetningar á sérstakri Verkamaður-e. Byggir er til á BuildMaster-e og áfram Verkamaður-e. Hann sendir með BuildMaster-a á Verkamaður-og þegar sérstakur byggja - röð skrefa sem þarf að fylgja.
Við sjáum að í núverandi dæmi slíkt tímaáætlunarmenn Búið er til 2 stykki. Þar að auki, hver hefur sína tegund.

SingleBranchScheduler – einn vinsælasti tíminn á dagskránni. Það fylgist með einni grein og er ræst af skráðri breytingu á henni. Þegar hann sér breytingar getur hann seinkað sendingu byggingarbeiðninnar (fresta fyrir tímabilið sem tilgreint er í sérstöku færibreytunni treeStableTimer). INN nafn setur heiti áætlunarinnar sem birtist í BuildBot-vefviðmót. IN Breyta síu sía er sett, eftir að hafa farið framhjá hvaða breytingar á útibúinu hvetja áætlunina til að senda beiðni um framkvæmdir. IN byggingarnöfn nafn er tilgreint byggir-a, sem við munum setja aðeins síðar. Nafnið í okkar tilviki verður það sama og verkefnisheitið: verkefnið þitt.

ForceScheduler mjög einfaldur hlutur. Þessi tegund af áætlun er sett af stað með músarsmelli í gegnum BuildBot-vefviðmót. Færibreyturnar hafa sama kjarna og í SingleBranchScheduler.

PS nr. 3. Kannski kemur það sér vel
Reglubundið er áætlun sem keyrir á ákveðinni tímabundinni tíðni. Símtalið lítur einhvern veginn svona út


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

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

periodicBuildTimer tilgreinir tíma þessa tímabils í sekúndum.

BuildFactory skapar ákveðinn byggja, sem þá byggir sendir til Verkamaður. Í BuildFactory gefur til kynna skrefin sem fylgja skal Verkamaður-y. Skrefum er bætt við með því að kalla aðferðina addStep

Fyrsta bætta skrefið í þessu dæmi er git hreint -d -f -f –x, þá git kassa. Þessar aðgerðir eru innifalin í færibreytunni aðferð, sem er ekki skýrt tilgreint en felur í sér sjálfgefið gildi ferskt... Parameter mode='stigvaxandi' gefur til kynna að skrárnar séu úr möppunni þar sem chechout, á meðan það vantar í geymsluna, er það ósnortið.

Annað skrefið sem bætt er við er að hringja í handritið rannsókn með færibreytu halló til hliðar Verkamaður-a úr möppu /home/habr/worker/yourProject/build með umhverfisbreytunni PATHONPATH=... Þannig geturðu skrifað eigin forskriftir og keyrt þau til hliðar Verkamaður-a hvert skref util.ShellCommand. Hægt er að setja þessar forskriftir beint inn í geymsluna. Síðan kl chechout-e þeir munu falla í /home/habr/worker/yourProject/build. Hins vegar eru tveir „en“:

  1. Verkamaður verður að búa til með lykli --umask þannig að það lokar ekki framkvæmdarétti eftir stöðva-The.
  2. á git ýta-e af þessum skriftum sem þú þarft til að tilgreina eignina afsakanlegtsvo að síðar chechout-e missti ekki réttinn til að keyra Git scriptið.

5.6 byggingarmenn


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

Um það sem er Byggir var sagt hér. Nú mun ég segja þér nánar um hvernig á að búa það til. BuilderConfig er byggingameistari byggir. Slíkir hönnuðir í c['smiðir'] þú getur tilgreint nokkra, þar sem þetta er blað af hlutum byggir gerð. Nú skulum við endurskrifa dæmið frá BuildBot, færa það nær verkefni okkar.


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

Nú skal ég segja þér frá breytunum BuilderConfig.

nafn tilgreinir nafnið byggir-a. Hér nefndum við það verkefnið þitt... Þetta þýðir að á Verkamaður- einmitt þessi leið verður til /home/habr/worker/yourProject/build. Sheduler Leita að byggir bara undir þessu nafni.

vinnumannsnöfn inniheldur blað Verkamaður-s. Hver þeirra verður að bæta við c['starfsmenn'].

verksmiðju - sérstakur byggja, sem það tengist byggir. Hann mun senda hlutinn byggja á Verkamaður til að ljúka öllum skrefum sem fylgja þessu byggja-The.

6. Dæmi um þína eigin uppsetningu

Hér er dæmið verkefnisarkitektúr sem ég legg til að innleiða í gegnum BuildBot
.

Við munum nota sem útgáfustýringarkerfi svn. Geymslan sjálf verður staðsett í einhvers konar skýi. Hér er heimilisfang þessa skýs svn.host/svn/yourProject/trunk. Í skýinu fyrir neðan svn það er notendanafn reiknings: notandi, lykilorð: lykilorð. Forskriftir sem tákna skref byggja-a verður líka í útibúinu svn, í sérstakri möppu buildbot/worker_linux. Þessar forskriftir eru staðsettar í geymslunni með vistuðu eigninni keyranlegur.

BuildMaster и Verkamaður keyra á sama vélinni project.host .BuildMaster geymir skrárnar sínar í möppu /heimili/bústaður/meistari. Verkamaður það er geymt á eftirfarandi slóð /heimili/bústaður/starfsmaður. Ferli samskipti BuildMaster-a og Verkamaður-a fer fram í gegnum höfn 4000 í samræmi við siðareglur BuildBot-a, það er 'pb' siðareglur.

Markverkefnið er að öllu leyti skrifað í Python. Verkefnið er að fylgjast með breytingum þess, búa til keyrsluskrá, búa til skjöl og framkvæma prófanir. Ef um bilun er að ræða þurfa allir forritarar að senda skilaboð með tölvupósti um að það sé misheppnuð aðgerð.

Vefskjár BuildBot við munum tengjast tengi 80 fyrir project.host. Það er ekki nauðsynlegt að setja upp Apatch. Sem hluti af bókasafninu brenglaður það er nú þegar vefþjónn, BuildBot notar það.

Til að geyma innri upplýsingar fyrir BuildBot við munum nota sqlite.

Gestgjafi er nauðsynlegur fyrir póstsendingar smtp.þitt.lén - það gerir kleift að senda bréf úr pósti [netvarið] án auðkenningar. Einnig á gestgjafanum 'SMTP ' Fundargerðin er tekin fyrir í pósti 1025.

Það eru tveir einstaklingar sem taka þátt í ferlinu: Admin и notandi. admin stjórnar BuildBot. notandi er sá sem skuldbindur sig skuldbinda sig-s.

Executable skrá er búin til í gegnum pyinstaller. Skjöl eru búin til í gegnum doxygen.

Fyrir þennan arkitektúr skrifaði ég þetta: 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"
}

Fyrst þú þarft slökkva á BuildMaster-a og Verkamaður-a. Límdu síðan þessa skrá master.cfg в /heimili/bústaður/meistari.

Næsta skref er að hefja þjónustuna BuildMaster-a


sudo buildbot start /home/habr/master

Byrjaðu síðan þjónustuna Verkamaður-a


buildbot-worker start /home/habr/worker

Tilbúið! Nú Byggjabotn mun fylgjast með breytingum og kveikja skuldbinda sig-y inn svn, framkvæma skrefin að byggja og prófa verkefni með ofangreindum arkitektúr.

Hér að neðan mun ég lýsa nokkrum eiginleikum ofangreinds master.cfg.

6.1 Á leiðinni til húsbónda þíns.cfg


Á meðan ég skrifa mitt master.cfg Margar villur verða gerðar, svo það verður að lesa annálaskrána. Það er geymt sem BuildMaster-ec alger leið /home/habr/master/twistd.log, og til hliðar Verkamaður-a með algerum slóð /home/habr/worker/twistd.log. Þegar þú lest villuna og lagar hana þarftu að endurræsa þjónustuna BuildMaster-a. Svona er það gert:


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

6.2 Unnið með 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)

Til að byrja, skulum við kíkja á svn_poller. Þetta er enn sama viðmótið, skoðar geymsluna reglulega einu sinni á mínútu. Í þessu tilfelli svn_poller kemst aðeins í útibúið skottinu. Dularfull breytu split_file=util.svn.split_file_alwaystrunk setur reglurnar: hvernig á að brjóta upp möppuskipulagið svn á greinunum. Hann býður þeim einnig upp á afstæðar leiðir. Aftur á móti split_file_alwaystrunk einfaldar ferlið með því að segja að geymslan inniheldur aðeins skottinu.

В Tímasetningar gefið til kynna Breyta síuhver sér ekkert og tengir útibú við það skottinu samkvæmt tilteknu samtökum í gegnum split_file_alwaystrunk. Að bregðast við breytingum á skottinu, Ræsir byggir með nafni verkefnið þitt.

eignir hér er það nauðsynlegt svo að stjórnandinn fái póstlista yfir byggingar- og prófunarniðurstöður sem eigandi ferlisins.

Skref byggja-a stöðva fær um að eyða öllum skrám sem eru staðsettar í staðbundinni útgáfu geymslunnar alveg Verkamaður-A. Og gerðu svo allt svn uppfærsla. Stillingin er stillt í gegnum færibreytuna háttur=fullur, aðferð=fersk... Parameter stoppOnTailure segir að ef svn uppfærsla verður keyrt með villu, þá ætti allt ferlið við byggingu og prófun að vera frestað, þar sem frekari aðgerðir eru ekki skynsamlegar.

6.3 Bréf til þín: fréttamönnum er heimilt að lýsa yfir


fréttamenn er þjónusta til að senda tilkynningar með tölvupósti.


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]

Hann getur sent skilaboð mismunandi leiðir.

MailNotifier notar tölvupóst til að senda tilkynningar.

sniðmát_html setur textasniðmát fyrir fréttabréfið. HTML er notað til að búa til merkingu. Það er breytt af vélinni jinja2 (má bera saman við django). BuildBot hefur sett af breytum þar sem gildum er skipt út í sniðmátið meðan á því stendur að búa til skilaboðatextann. Þessar breytur eru innan um {{ tvöfaldar krullaðar axlabönd }}. Til dæmis, Yfirlit sýnir stöðu lokið aðgerð, það er árangur eða mistök. A verkefni mun gefa út verkefnið þitt. Svo að nota stjórnskipanir í jinja2, breytur BuildBot-a og python strengjasniðunarverkfæri, þú getur búið til nokkuð fræðandi skilaboð.

MailNotifier inniheldur eftirfarandi rök.

fráaddr – heimilisfangið sem allir fá fréttabréfið frá.

sendToInterestedUsers=True sendir skilaboð til eiganda og notanda sem gerði skuldbinda sig.

horfðu upp — viðskeyti sem þarf að bæta við nöfn notenda sem fá fréttabréfið. Svo Admin hvernig notandi fær fréttabréfið á netfangið [netvarið].

relayhost tilgreinir hýsingarheitið sem þjónninn er opnaður á SMTP, a smptPort tilgreinir gáttarnúmerið sem hlustar SMTP miðlara.

mode="viðvörun" segir að póstsendingin eigi aðeins að fara fram ef það er að minnsta kosti eitt skref byggja-a, sem endaði með stöðubilun eða viðvörun. Ef vel tekst til er engin þörf á að senda fréttabréf.

aukaviðtakendur inniheldur lista yfir þá sem senda á póstinn til auk eiganda og þess sem framkvæmdi skuldbinda sig.

messageFormatter er hlutur sem tilgreinir skilaboðasniðið, sniðmát þess og mengi breytna sem eru tiltækar frá jinja2. Valmöguleikar eins og wantProperties=Satt и wantSteps=Satt skilgreina þetta sett af tiltækum breytum.

with['services']=[sendMessageToAll] veitir lista yfir þjónustu, þar á meðal okkar verður blaðamaður.

Okkur tókst það! Til hamingju

Við bjuggum til okkar eigin stillingar og sáum virknina sem hún er fær um. BuildBot. Þetta held ég að sé nóg til að skilja hvort þetta tól sé nauðsynlegt til að búa til verkefnið þitt. Hefur þú áhuga á honum? Mun það nýtast þér? Er þægilegt að vinna með honum? Þá er ég ekki að skrifa þessa grein til einskis.

Og lengra. Ég myndi vilja að fagsamfélagið noti BuildBot, varð víðara, handbækur þýddar og dæmin voru enn fleiri.

Þakka ykkur öllum fyrir athygli ykkar. Gangi þér vel.

Heimild: www.habr.com

Bæta við athugasemd