Näidisrakenduse pidev integreerimine BuildBotiga

Näidisrakenduse pidev integreerimine BuildBotiga
(Pilt autor Arvutiseade Alates Pixabay)

Tere!

Minu nimi on Jevgeni Tšerkin, Olen programmeerija kaevandusettevõtte arendusmeeskonnas Polümetall.

Iga suurt projekti alustades hakkate mõtlema: "Millist tarkvara on selle teenindamiseks kõige parem kasutada?" IT-projekt läbib enne järgmise versiooni väljaandmist mitu etappi. On hea, kui nende etappide ahel on automatiseeritud. IT-projekti enda uue versiooni väljalaskmise automatiseeritud protsessi nimetatakse Pidev integreerimine. BuildBot osutus meile selle protsessi elluviimisel heaks abiliseks.

Selles artiklis otsustasin anda ülevaate võimalustest BuildBot. Milleks see tarkvara võimeline on? Kuidas talle läheneda ja kuidas luua temaga normaalne TÕHUS TÖÖSUHE? Saate meie kogemusi ise rakendada, luues oma masinas oma projekti ehitamiseks ja testimiseks toimiva teenuse.

Sisu

Sisu

1. Miks BuildBot?
2. BuildMasteri juhitud kontseptsioon
3. Paigaldamine
4. Esimesed sammud

5. Konfiguratsioon. Samm-sammult retsept

5.1 BuildmasterConfig
5.2 töötajate
5.3 allika muutmine
5.4 planeerijad

5.5 BuildFactory
5.6 ehitajat

6. Teie enda konfiguratsiooni näide

6.1 Teel oma master.cfg
6.2 Töötamine svn-iga
6.3 Kiri teile: reporteritel on õigus deklareerida

Me tegime seda! Palju õnne

1. Miks BuildBot?

Varem kohtasin habr-e-s juurutamist puudutavaid artikleid Pidev integreerimine koos BuildBot... Näiteks, See Minu arvates oli see kõige informatiivsem. On veel üks näide - lihtsam. Neid artikleid saab maitsestada näide juhendistJa это pärast seda inglise keeles. Kupee on hea lähtepunkt. Pärast nende artiklite lugemist soovite tõenäoliselt kohe midagi selga panna BuildBot tegema.

Lõpeta! Kas keegi on seda oma projektides reaalselt kasutanud? Selgub, et jah palju rakendasid seda oma ülesannetes. Võib leida näiteid kasutama BuildBot ja Google'i koodiarhiivides.

Mis on siis inimeste kasutamise loogika Buildbot? Lõppude lõpuks on ka muid tööriistu: Autopiloot и Jenkins. Vastan nii. Enamiku ülesannete jaoks Jenkins ja tõest piisab. Omakorda BuildBot - kohanemisvõimelisem, samas kui probleemid lahendatakse seal sama lihtsalt kui sisse Jenkins. Valik on sinu. Aga kuna me otsime tööriista arendusprojekti sihtprojekti jaoks, siis miks mitte valida selline, mis võimaldab lihtsatest sammudest alustades saada interaktiivsuse ja ainulaadse liidesega ehitussüsteemi.

Neile, kelle sihtprojekt on kirjutatud pythonis, tekib küsimus: "Miks mitte valida integratsioonisüsteem, millel on projektis kasutatava keele osas selge liides?" Ja nüüd on aeg tutvustada eeliseid BuildBot.

Niisiis, meie "instrumentaalkvartett". Enda jaoks olen tuvastanud neli tunnust BuildBot:

  1. See on avatud lähtekoodiga raamistik GPL-i litsentsi alusel
  2. See on pythoni kasutamine konfiguratsioonitööriistana ja vajalike toimingute kirjeldus
  3. See on võimalus saada vastus masinalt, millel kokkupanek toimub
  4. Need on lõpuks hosti miinimumnõuded. Juurutamiseks on vaja pythonit ja keerutatud ning selleks pole vaja virtuaalmasinat ja Java-masinat.

2. BuildMasteri juhitud kontseptsioon

Näidisrakenduse pidev integreerimine BuildBotiga

Ülesande jaotamise arhitektuuri keskmes on BuildMaster. See on teenus, mis:

  • jälgib muudatused projekti lähtepuus
  • saadab käsud, mida töötaja teenus peaks projekti koostamiseks ja testimiseks täitma
  • teatab kasutajad tehtud toimingute tulemuste kohta

BuildMaster konfigureeritud faili kaudu master.cfg. See fail asub juurfailis BuildMaster. Hiljem näitan, kuidas see juur tekib. Fail ise master.cfg sisaldab pythoni skripti, mis kasutab kõnesid BuildBot.

Järgmine kõige olulisem objekt BuildBot See on nimi Töötaja. Seda teenust saab käivitada teises hostis, millel on erinev OS, või võib-olla selles, kus BuildMaster. See võib eksisteerida ka spetsiaalselt ettevalmistatud virtuaalses keskkonnas koos oma pakettide ja muutujatega. Neid virtuaalseid keskkondi saab ette valmistada näiteks pythoni utiliitide abil virtualenv, venv.

BuildMaster edastab käsklusi kõigile Töötaja-y, ja ta omakorda täidab need. See tähendab, et selgub, et projekti koostamise ja testimise protsess võib jätkuda Töötaja-e, kus töötab Windows ja mõnel teisel Linuxil töötaval töötajal.

Kassasse projekti lähtekoodid esinevad igaühel Töötaja-e.

3. Paigaldamine

Nii et lähme. Ma kasutan hostina Ubuntu 18.04. Ma panen ühe selle peale BuildMaster-a ja üks Töötaja-a. Kuid kõigepealt peate installima python3.7:

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

Neile, kes vajavad 3.7.2 asemel python3.7.1, saate teha järgmist.


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

Järgmine samm on installimine säutsus и BuildBot, samuti pakette, mis võimaldavad kasutada lisafunktsioone BuildBot-.


/*Все что под sudo будет установленно для всех пользователей в директорию /usr/local/lib/python3.7/dist-packages*/

#На хосте который производит мониторинг Worker-ов 
sudo pip install twisted #Библиотека twisted
sudo pip install buildbot #BuildMaster
#Дополнительный функционал
pip install pysqlite3 #Устанавливаем базу sqllite в учебных целях
pip install jinja2 #framework наподобие django, для web и для почтовых рассыллок
pip install autobahn #Web cокеты для связи BuildMaster->Worker
pip install sqlalchemy sqlalchemy-migrate #Для отображения схемы базы данных
#Для Web отображения BuildBot-a
pip install buildbot-www buildbot-grid-view buildbot-console-view buildbot-waterfall-view
pip install python-dateutil #Отображение дат в web
#На стороне хоста который непосредственно осуществляет сборку и тестирование 
pip install buildbot-worker #Worker
#Дополнительный функционал
sudo pip install virtualenv #Виртуальная среда 

4. Esimesed sammud

Aeg luua BuildMaster. See jääb meie kausta /home/habr/master.

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

Järgmine samm. Loome Töötaja. See jääb meie kausta /kodu/habr/tööline.

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

Kui jooksed Töötaja, siis vaikimisi luuakse see sisse /kodu/habr/tööline kaust projekti nimega, mis on märgitud master.cfg. Ja projekti nimega kaustas loob see kataloogi ehitama, ja teeb seda ka edaspidi kassasse. Töökataloog Töötaja- ja sellest saab kataloog /home/habr/yourProject/build.

"Kuldne võti
Ja nüüd, mille jaoks ma eelmise lõigu kirjutasin: skript, mis meister hakkab nõudma Töötaja-ja selles kataloogis kaugjuhtimisega tehtud toimingut ei käivitata, kuna skriptil pole käitamiseks õigusi. Olukorra parandamiseks vajate võtit --umask=0o22, mis keelab sellesse kataloogi kirjutamise, kuid säilitab käivitamisõigused. Ja see on kõik, mida me vajame.

BuildMaster и Töötaja luua omavahel side. Juhtub, et see katkeb ja Töötaja ootan mõnda aega vastust BuildMaster-A. Kui vastust ei tule, taaskäivitatakse ühendus. Võti --keepalive=60 lihtsalt tuli märkida aeg, mille möödudes ühendada taaskäivitab.

5. Konfiguratsioon. Samm-sammult retsept

Konfiguratsioon BuildMaster viiakse läbi masina sellel küljel, kus me käsku täitsime loo-meister. Meie puhul on see kataloog /home/habr/master. Konfiguratsioonifail master.cfg pole veel olemas, kuid käsk ise on faili juba loonud master.cmg.sample. Peate selle ümber nimetama master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Avame selle master.cfg. Ja vaatame, millest see koosneb. Ja pärast seda proovime teha oma konfiguratsioonifaili.

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 — konfiguratsioonifaili põhisõnastik. See peab sisalduma konfiguratsioonifailis. Kasutamise hõlbustamiseks lisatakse konfiguratsioonikoodis varjunimi "c". Pealkirjad klahvidest в c["keyFromDist"] on fikseeritud elemendid suhtlemiseks BuildMaster. Iga võtme puhul asendatakse väärtusena vastav objekt.

5.2 töötajate

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

Seekord näitame BuildMaster-y nimekiri Töötaja-s. mina ise Töötaja me lõime üle, mis näitab sina-töötaja-nimi и parool. Nüüd tuleb need hoopis täpsustada eeskuju-tööline и sooritama .

5.3 allika muutmine

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

Võtme järgi muuda_allikat sõnastik c saame juurdepääsu loendile, kuhu tahame paigutada objekti, mis küsib hoidlast projekti lähtekoodiga. Näidis kasutab Giti hoidlat, mida küsitakse teatud ajavahemike järel.

Esimene argument on tee teie hoidlasse.

töödirektor tähistab teed küljel asuva kausta juurde Töötaja- tee sugulane /home/habr/worker/yourProject/build git salvestab hoidla kohaliku versiooni.

filiaal sisaldab hoidlas kindlat haru, mida tuleks järgida.

pollInterval sisaldab sekundite arvu, mille järel BuildMaster küsitleb hoidlast muudatusi.

Projekti hoidlas muudatuste jälgimiseks on mitu meetodit.

Lihtsaim meetod on Küsitlused, mis viitab sellele BuildMaster küsitleb serverilt perioodiliselt hoidlast. Kui endale kajastas hoidlas toimunud muudatusi, siis BuildMaster loob teatud viivitusega sisemise objekti Muutma ja saatke see sündmuse haldurile Scheduler, mis käivitab sammud projekti koostamiseks ja testimiseks Töötaja-e. Nende sammude hulgas näidatakse ära ajakohastama hoidla. Täpselt peal TöötajaSee loob hoidlast kohaliku koopia. Selle protsessi üksikasju käsitletakse allpool kahes järgmises jaotises. (5.4 и 5.5).

Veelgi elegantsem meetod hoidlas toimuvate muudatuste jälgimiseks on sõnumite saatmine otse seda hostivast serverist BuildMaster- projekti lähtekoodide muutmise kohta. Sel juhul niipea, kui arendaja teeb endale, saadab projektihoidlaga server sõnumi BuildMaster-y. Ja ta omakorda peatab selle, luues objekti PBChangeSource. Järgmisena kantakse see objekt üle Scheduler, mis aktiveerib projekti koostamise ja testimise etapid. Selle meetodi oluline osa on töötamine konks-serveriskriptid hoidlas. Stsenaariumis konks-a, vastutab töötlemistoimingute eest, kui endale-e, peate helistama utiliiti saada muutus ja määrake võrguaadress BuildMaster-A. Samuti peate määrama võrgupordi, mis kuulab PBChangeSource. PBChangeSource, muide, on osa BuildMaster-A. See meetod nõuab luba admin-a serveris, kus asub projektihoidla. Esmalt peate hoidlast varukoopia tegema.

5.4 planeerijad


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

planeerijad – see on element, mis toimib päästikuna, mis käivitab kogu projekti kokkupaneku ja testimise ahela.
Näidisrakenduse pidev integreerimine BuildBotiga

Need muudatused, mis salvestati muuda_allikat, töö käigus muudetud BuildBot-a vastu vaielda Muutma ja nüüd iga Sheduler nende põhjal koostab see päringuid projekti koostamise protsessi alustamiseks. Kuid see määrab ka selle, millal need päringud järjekorda edasi kantakse. Objekt Ehitaja salvestab taotluste järjekorra ja jälgib praeguse koostu olekut eraldi Töötaja-ja. Ehitaja on olemas BuildMaster-e ja edasi Töötaja-e. Ta saadab kaasa BuildMaster-a sisse Töötaja-ja juba konkreetne ehitama - rida samme, mida tuleb järgida.
Näeme, et praeguses näites selline planeerijad Valmistatakse 2 tükki. Lisaks on igaühel oma tüüp.

SingleBranchScheduler – üks populaarsemaid tunde ajakavas. See jälgib ühte haru ja selle käivitab selles registreeritud muutus. Kui ta näeb muudatusi, võib ta ehituspäringu saatmist edasi lükata (lükkab eriparameetris määratud perioodiks treeStableTimer). IN nimi määrab kuvatava ajakava nime BuildBot- veebiliides. IN Muuda filtrit seatakse filter, mille läbimise järel muudatused harus kutsuvad ajakava saatma ehitustaotluse. IN ehitajanimed nimi on märgitud ehitaja-a, mille paneme paika veidi hiljem. Nimi meie puhul on sama, mis projekti nimi: teie Projekt.

ForceScheduler väga lihtne asi. Seda tüüpi ajakava käivitatakse hiireklõpsuga BuildBot- veebiliides. Parameetrite olemus on sama, mis jaotises SingleBranchScheduler.

PS nr 3. Ehk tuleb kasuks
Perioodiline on ajakava, mis jookseb kindlal ajal fikseeritud sagedusel. Kõne näeb välja umbes selline


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

perioodilineBuildTimer määrab selle perioodilisuse aja sekundites.

BuildFactory loob spetsiifilise ehitama, mis siis ehitaja saadab Töötaja. Sisse BuildFactory näitab samme, mida tuleb järgida Töötaja-y. Sammud lisatakse meetodi kutsumisega addStep

Selle näite esimene lisatud samm on git puhas -d -f -f -xSiis git kassasse. Need toimingud sisalduvad parameetris meetod, mis pole selgelt välja toodud, kuid viitab vaikeväärtusele värske... Parameeter mode='inkrementaalne' näitab, et failid pärinevad kataloogist, kus chechout, kuigi hoidlast puudub, jäävad puutumata.

Teine lisatud samm on skripti kutsumine kohtuprotsess parameetriga tere küljel Töötaja-a kataloogist /home/habr/worker/yourProject/build keskkonnamuutujaga PATHONPATH=... Seega saate kirjutada oma skripte ja neid küljel käivitada Töötaja- igal sammul util.ShellCommand. Neid skripte saab paigutada otse hoidlasse. Siis kl chechout-e nad kukuvad sisse /home/habr/worker/yourProject/build. Siiski on kaks "aga":

  1. Töötaja tuleb luua võtmega --umask et see pärast täitmisõigusi ei blokeeriks kassasse-.
  2. juures git push-üks neist skriptidest peate määrama atribuudi kõrvaldatavnii et hiljem chechout-e ei kaotanud Giti skripti täitmise õigust.

5.6 ehitajat


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

Selle kohta, mis on Ehitaja öeldi siin. Nüüd räägin teile üksikasjalikumalt, kuidas seda luua. BuilderConfig on konstruktor ehitaja. Sellised disainerid sisse c['ehitajad'] saate määrata mitu, kuna see on objektide leht ehitaja tüüp. Nüüd kirjutame näite ümber BuildBot, mis toob selle meie ülesandele lähemale.


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

Nüüd räägin teile parameetritest BuilderConfig.

nimi täpsustab nime ehitaja-a. Siin panime sellele nime teie Projekt... See tähendab, et edasi Töötaja- see tee luuakse /home/habr/worker/yourProject/build. Sheduler Otsin ehitaja just selle nimega.

tööliste nimed sisaldab lehte Töötaja-s. Igaüks neist tuleb lisada c['töötajad'].

tehas - konkreetne ehitama, millega see on seotud ehitaja. Ta saadab objekti ehitama edasi Töötaja et lõpetada kõik selles sisalduvad sammud ehitama-.

6. Teie enda konfiguratsiooni näide

Siin on näidisprojekti arhitektuur, mille teen ettepaneku läbi viia BuildBot
.

Kasutame versioonikontrollisüsteemina svn. Hoidla ise asub mingis pilves. Siin on selle pilve aadress svn.host/svn/yourProject/trunk. Pilves all svn seal on konto kasutajanimi: kasutaja, passwd: parool. Skriptid, mis tähistavad samme ehitama-a saab ka filiaalis svn, eraldi kaustas buildbot/worker_linux. Need skriptid asuvad hoidlas koos salvestatud atribuudiga käivitatav.

BuildMaster и Töötaja töötab samal hostil projekt.host .BuildMaster salvestab oma failid kausta /home/habr/master. Töötaja see salvestatakse järgmisele teele /kodu/habr/tööline. Protsessi kommunikatsioon BuildMaster-a ja Töötaja-a viiakse läbi pordi 4000 kaudu vastavalt protokollile BuildBot- a, see on 'pb' protokolli.

Sihtprojekt on kirjutatud täielikult Pythonis. Ülesandeks on selle muudatuste jälgimine, käivitatava faili loomine, dokumentatsiooni genereerimine ja testimine. Ebaõnnestumise korral peavad kõik arendajad saatma e-posti teel sõnumi, et toiming ebaõnnestus.

Veebi kuvamine BuildBot ühendame pordiga 80 projekt.host. Apatchi pole vaja installida. Raamatukogu osana väänatud veebiserver on juba olemas, BuildBot kasutab seda.

Sisemise teabe salvestamiseks BuildBot me kasutame sqlite.

Postitamiseks on vajalik host smtp.teie.domeen - see võimaldab saata kirju postist [meiliga kaitstud] ilma autentimiseta. ka saatejuhilsmtp Protokolli kuulatakse postil 1025.

Protsessis osaleb kaks inimest: admin и kasutaja. administraator haldab BuildBot. kasutaja on isik, kes kohustub endale-s.

Käivitatav fail genereeritakse kaudu pyinstaller. Dokumentatsioon genereeritakse kaudu doksügeeni.

Selle arhitektuuri jaoks kirjutasin selle: 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"
}

Kõigepealt vajate luua BuildMaster-a ja Töötaja-a. Seejärel kleepige see fail master.cfg в /home/habr/master.

Järgmine samm on teenuse käivitamine BuildMaster-a


sudo buildbot start /home/habr/master

Seejärel käivitage teenus Töötaja-a


buildbot-worker start /home/habr/worker

Valmis! Nüüd Buildbot jälgib muudatusi ja käivitab endale-y sisse svn, teostades ülaltoodud arhitektuuriga projekti ehitamise ja testimise etappe.

Allpool kirjeldan mõningaid ülaltoodu omadusi master.cfg.

6.1 Teel oma master.cfg


Minu kirjutamise ajal master.cfg Tehakse palju vigu, seega on vaja logifaili lugeda. Seda salvestatakse kui BuildMaster-ec absoluutne tee /home/habr/master/twistd.log, ja küljel Töötaja-a absoluutse teega /home/habr/worker/twistd.log. Vea lugemise ja selle parandamise ajal peate teenuse taaskäivitama BuildMaster-a. Seda tehakse järgmiselt.


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

6.2 Töötamine svn-iga


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)

Kõigepealt heidame pilgu peale svn_poller. See on endiselt sama liides, mis küsib hoidlast regulaarselt kord minutis. Sel juhul svn_poller pääseb ainult harule juurde kere. Salapärane parameeter split_file=util.svn.split_file_alwaystrunk seab reeglid: kuidas kausta struktuuri lahti teha svn okstel. Ta pakub neile ka suhtelisi teid. Omakorda split_file_alwaystrunk lihtsustab protsessi, öeldes, et hoidla sisaldab ainult kere.

В Planeerijad näidatud Muuda filtritkes näeb mitte ükski ja seostab sellega filiaali kere antud ühenduse järgi läbi split_file_alwaystrunk. Muutustele reageerimine kere, Käivitab ehitaja nimega teie Projekt.

omadused siin on see vajalik selleks, et administraator saaks protsessi omanikuna meililistid ehitamise ja testimise tulemuste kohta.

Samm ehitama-a kassasse suudab täielikult kustutada kõik failid, mis asuvad hoidla kohalikus versioonis Töötaja-A. Ja siis tehke kõik täis svn värskendus. Režiim konfigureeritakse parameetri kaudu režiim=täis, meetod=värske... Parameeter haltOnTailure ütleb, et kui svn värskendus käivitatakse veaga, siis tuleks kogu ehitus- ja testimisprotsess peatada, kuna edasistel toimingutel pole mõtet.

6.3 Kiri teile: reporteritel on õigus deklareerida


Ajakirjanikele on teenus e-posti teel teadete saatmiseks.


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]

Ta oskab sõnumeid saata erinevatel viisidel.

MailNotifier kasutab teadete saatmiseks meili.

template_html määrab uudiskirja tekstimalli. HTML-i kasutatakse märgistuse loomiseks. Seda muudab mootor jinja2 (võib võrrelda django). BuildBot sisaldab muutujaid, mille väärtused asendatakse malliga sõnumiteksti genereerimise käigus. Need muutujad on ümbritsetud {{ topelt lokkis sulgudega }}. Näiteks, kokkuvõte kuvab lõpetatud toimingute oleku, st edu või ebaõnnestumise. A projektid väljastab teie Projekt. Niisiis, kasutades juhtkäske jinja2, muutujad BuildBot-a ja pythoni stringi vormindamistööriistad, saate luua üsna informatiivse sõnumi.

MailNotifier sisaldab järgmisi argumente.

fromaddr – aadress, kust kõik uudiskirja saavad.

saata Huvitatud kasutajatele=True saadab sõnumi omanikule ja kasutajale, kes tegi endale.

lookup — järelliide, mis tuleb lisada uudiskirja saavate kasutajate nimedele. Niisiis admin kuidas kasutaja aadressile uudiskirja saab [meiliga kaitstud].

relayhost määrab hostinime, millel server avatakse smtpon smptPort määrab kuulava pordi numbri smtp server.

mode="hoiatus" ütleb, et postitamist tuleks teha ainult siis, kui on vähemalt üks samm ehitama-a, mis lõppes olekutõrke või hoiatusega. Edu korral pole uudiskirja vaja saata.

lisasaajad sisaldab nimekirja isikutest, kellele posti tuleb saata, lisaks omanikule ja isikule, kes posti läbi viis endale.

sõnumFormater on objekt, mis määrab sõnumi vormingu, selle malli ja muutujate komplekti, mis on saadaval jinja2. Valikud nagu wantProperties=Tõsi и wantSteps=Tõsi määratleda see saadaolevate muutujate komplekt.

with['services']=[sendMessageToAll] pakub loetelu teenustest, mille hulka kuuluvad ka meie omad reporter.

Me tegime seda! Palju õnne

Lõime oma konfiguratsiooni ja nägime funktsionaalsust, milleks see võimeline on. BuildBot. Ma arvan, et sellest piisab, et mõista, kas seda tööriista on teie projekti loomiseks vaja. Kas olete temast huvitatud? Kas see on teile kasulik? Kas temaga on mugav töötada? Siis ma ei kirjuta seda artiklit asjata.

Ja edasi. Soovin, et professionaalne ringkond seda kasutaks BuildBot, muutus laiemaks, tõlgiti käsiraamatuid ja näiteid oli veelgi rohkem.

Tänan teid kõiki tähelepanu eest. Edu.

Allikas: www.habr.com

Lisa kommentaar