BuildBot-ekin etengabeko integrazioaren inplementazio adibide bat

BuildBot-ekin etengabeko integrazioaren inplementazio adibide bat
(Egilearen irudia Informatizatzailea ra pixabay)

Hi!

Nire izena Evgeniy Cherkin, meatze-enpresa bateko garapen talde bateko programatzailea naiz Polimetala.

Edozein proiektu handi hastean, pentsatzen hasten zara: "Zein software da onena zerbitzua emateko?" IT proiektu batek fase batzuk igarotzen ditu hurrengo bertsioa kaleratu aurretik. Etapa hauen katea automatizatuta dagoenean ona da. IT proiektu baten bertsio berri bat kaleratzeko prozesu automatizatuari deitzen zaio Etengabeko integrazioa. BuildBot prozesu hau gauzatzeko laguntzaile ona izan zen guretzat.

Artikulu honetan aukeren ikuspegi orokorra ematea erabaki nuen BuildBot. Zertarako gai da software hau? Nola hurbildu berarekin eta nola eraiki HARREMAN ERAGINKORRA normal bat? Gure esperientzia zuk zeuk aplika dezakezu zure proiektua eraikitzeko eta zure makinan probatzeko lan-zerbitzu bat sortuz.

Edukia

Edukia

1. Zergatik BuildBot?
2. BuildMaster-ek zuzendutako kontzeptua
3. Instalazioa
4. Lehen urratsak

5. Konfigurazioa. Urratsez pauso errezeta

5.1 BuildmasterConfig
5.2 langileak
5.3 aldatu_iturria
5.4 programatzaileak

5.5 BuildFactory
5.6 eraikitzaile

6. Zure konfigurazioaren adibidea

6.1 Zure maisuaren bidean.cfg
6.2 svn-ekin lan egitea
6.3 Zuri bidalitako gutuna: kazetariek deklaratzeko baimena dute

Egin dugu! Zorionak

1. Zergatik BuildBot?

Aurretik habr-e-n inplementazioari buruzko artikuluak topatu nituen Etengabeko integrazioa batera BuildBot... Adibidez, Hau Informagarriena iruditu zait. Bada beste adibide bat - errazagoa. Artikulu hauek ondu daitezke eskuliburuko adibideaEta honetan ondoren, ingelesez. Coupe-k abiapuntu ona egiten du. Artikulu hauek irakurri ondoren, ziurrenik berehala zerbait nahi izango duzu BuildBot egin.

Gelditu! Inork erabili al du benetan bere proiektuetan? Baietz ateratzen da asko beren zereginetan aplikatu zuten. Aurki daiteke adibide erabilera BuildBot eta Google kode artxiboetan.

Beraz, zein da jendeak erabiltzen duen logika Buildbot? Azken finean, badira beste tresna batzuk: CruiseControl и Jenkins. Horrela erantzungo dut. Zeregin gehienetarako Jenkins eta egia nahikoa izango da. Bere aldetik, BuildBot - moldakorragoa, arazoak bertan bezala konpontzen diren bitartean Jenkins. Aukera zurea da. Baina garatzen ari garen xede-proiektu baterako tresna baten bila gabiltzanez, zergatik ez aukeratu, urrats errazetatik abiatuta, interaktibitatea eta interfaze berezia dituen eraikuntza-sistema bat lortzeko aukera emango duena.

Helburu-proiektua python-en idatzita dutenentzat, galdera hau sortzen da: "Zergatik ez aukeratu proiektuan erabilitako hizkuntzari dagokionez interfaze argia duen integrazio-sistema bat?" Eta orain onurak aurkezteko garaia da BuildBot.

Beraz, gure “laukote instrumentala”. Niretzat, lau ezaugarri identifikatu ditut BuildBot:

  1. GPL lizentziapean kode irekiko esparru bat da
  2. Hau da python konfigurazio tresna gisa erabiltzea eta beharrezko ekintzen deskribapena
  3. Muntaia egiten den makinaren erantzuna jasotzeko aukera da hau
  4. Hauek dira, azkenik, Ostalari batentzako gutxieneko baldintzak. Inplementazioak python eta twisted behar ditu, eta ez du makina birtual eta java makinarik behar.

2. BuildMaster-ek zuzendutako kontzeptua

BuildBot-ekin etengabeko integrazioaren inplementazio adibide bat

Zereginen banaketa-arkitekturaren funtsezkoa da BuildMaster. Zerbitzu bat da:

  • jarraipena egiten du proiektuaren iturburuen zuhaitzean egindako aldaketak
  • bidaltzen du Proiektua eraikitzeko eta probatzeko Worker zerbitzuak exekutatu behar dituen komandoak
  • jakinarazten du erabiltzaileek egindako ekintzen emaitzei buruz

BuildMaster fitxategi bidez konfiguratuta maisua.cfg. Fitxategi hau erroan dago BuildMaster. Geroago erro hori nola sortzen den erakutsiko dut. Fitxategia bera maisua.cfg deiak erabiltzen dituen python script bat dauka BuildBot.

Hurrengo objektu garrantzitsuena BuildBot izenaren ditu Langilea. Zerbitzu hau beste ostalari batean abiarazi daiteke beste sistema eragile batekin, edo agian non dagoen batean BuildMaster. Bereziki prestatutako ingurune birtual batean ere egon daiteke bere pakete eta aldagaiekin. Ingurune birtual hauek bezalako python utilitateak erabiliz prestatu daitezke virtualenv, venv.

BuildMaster denei aginduak igortzen ditu Langilea-y, eta hark, berriz, betetzen ditu. Hau da, proiektu bat eraikitzeko eta probatzeko prozesuak aurrera egin dezakeela ematen du Langilea-e Windows exekutatzen duena eta Linux exekutatzen duen beste Worker batean.

Errebisatu proiektuaren iturburu-kodeak bakoitzean gertatzen dira Langilea-e.

3. Instalazioa

Beraz, goazen. Ubuntu 18.04 erabiliko dut ostalari gisa. bat jarriko diot BuildMaster-a eta bat Langilea-a. Baina lehenik python3.7 instalatu behar duzu:

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

3.7.2 beharrean python3.7.1 behar dutenentzat, hau egin dezakezu:


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

Hurrengo urratsa instalatzea da Txiokatua и BuildBot, baita funtzionalitate gehigarriak erabiltzeko aukera ematen duten paketeak ere 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. Lehen urratsak

Sortzeko garaia BuildMaster. Gure karpetan egongo da /home/habr/master.

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

Hurrengo urratsa. Sor dezagun Langilea. Gure karpetan egongo da /home/habr/langile.

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

Korrika egiten duzunean Langilea, orduan lehenespenez sortuko da /home/habr/langile karpetan proiektuaren izenarekin zehazten dena maisua.cfg. Eta proiektuaren izena duen karpetan direktorio bat sortuko du eraikitzeko, eta egiten jarraituko du checkout. Laneko direktorioa Langilea-eta direktorio bihurtuko da /home/habr/yourProject/build.

"Urrezko Giltza
Eta orain zertarako idatzi nuen aurreko paragrafoa: gidoi hori Master exijituko dio Langilea-eta direktorio honetan urrunetik eginda ez da exekutatuko scriptak ez duelako exekutatzeko eskubiderik. Egoera zuzentzeko, giltza bat beharko duzu --umask=0o22, direktorioa honetan idaztea debekatzen duena, baina abiarazteko eskubideak mantenduko ditu. Eta hori da behar dugun guztia.

BuildMaster и Langilea elkarrekin lotura bat ezarri. Gertatzen da hausten dela eta Langilea denbora pixka bat erantzun baten zain BuildMaster-A. Erantzunik ez badago, konexioa berrabiaraziko da. Gakoa --keepalive=60 besterik ez da falta den denbora adieraztea konektatzeko berrabiarazi.

5. Konfigurazioa. Urratsez pauso errezeta

konfigurazioa BuildMaster komandoa exekutatu genuen makinaren aldean egiten da sortu-maisu. Gure kasuan, direktorioa bat da /home/habr/master. Konfigurazio fitxategia maisua.cfg oraindik ez da existitzen, baina komandoak berak dagoeneko sortu du fitxategia master.cmg.lagina. Izena aldatu behar diozu master.cfg.lagina в maisua.cfg

mv master.cfg.sample master.cfg

Ireki dezagun hau maisua.cfg. Eta ikus dezagun zertan datzan. Eta horren ostean, saia gaitezen gure konfigurazio fitxategia egiten.

maisua.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 — konfigurazio fitxategiaren oinarrizko hiztegia. Konfigurazio fitxategian sartu behar da. Erabilera errazteko, alias bat sartzen da konfigurazio kodean "c". Izenburuak gakoak в c["gakoaDistatik"] elkarrekintzarako elementu finkoak dira BuildMaster. Gako bakoitzeko, dagokion objektua balio gisa ordezkatzen da.

5.2 langileak

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

Oraingoan adierazten dugu BuildMaster-y zerrenda Langilea-s. Neure burua Langilea sortu genuen arriba,ru, adieraziz zu-langile-izena и pasahitza. Orain horren ordez zehaztu behar dira adibide-langile и pasatzeko .

5.3 aldatu_iturria

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

Giltza bidez aldatu_iturria hiztegia c proiektuaren iturburu-kodearekin biltegia galdetzen duen objektu bat jarri nahi dugun zerrendara atzitzen dugu. Adibideak tarte jakin batzuetan galdetzen den Git biltegi bat erabiltzen du.

Lehenengo argumentua zure biltegirako bidea da.

workdir alboan dagoen karpetarako bidea adierazten du Langilea-a bidearekiko erlatiboa /home/habr/worker/yourProject/build git-ek biltegiaren bertsio lokala gordeko du.

adarraren jarraitu beharreko biltegian adar zehatz bat dauka.

galdeketa tartea horren ondoren, segundo kopurua dauka BuildMaster biltegian galdeketa egingo du aldaketen bila.

Proiektu baten biltegian aldaketak jarraitzeko hainbat metodo daude.

Metodorik errazena da hauteslekuak, horrek esan nahi du BuildMaster aldian-aldian zerbitzaria biltegiarekin galdetzen du. Bada konpromisoa biltegian islatu zituen aldaketak, orduan BuildMaster barne objektu bat sortuko du atzerapen batekin Aldatu eta bidali gertaeren kudeatzaileari Antolatzaileak, proiektua eraikitzeko eta probatzeko urratsak martxan jarriko dituena Langilea-e. Urrats horien artean adieraziko da eguneratzea biltegia. Zehazki piztuta LangileaHonek biltegiaren kopia lokal bat sortuko du. Prozesu honen xehetasunak hurrengo bi ataletan azalduko dira jarraian. (5.4 и 5.5).

Biltegi batean egindako aldaketen jarraipena egiteko metodo are dotoreagoa den zerbitzaritik zuzenean mezuak bidaltzea da BuildMaster- Proiektuaren iturburu-kodeak aldatzeari buruz. Kasu honetan, garatzaileak egin bezain laster konpromisoa, proiektuaren biltegia duen zerbitzariak mezu bat bidaliko du BuildMaster-y. Eta berak, berriz, objektu bat sortuz atzemango du PBCchangeSource. Ondoren, objektu hau transferituko da Antolatzaileak, proiektua eraikitzeko eta probatzeko urratsak aktibatzen dituena. Metodo honen zati garrantzitsu bat lan egitea da kako-zerbitzariaren scriptak biltegian. Gidoian kako-a, ekintzak izapidetzeko arduraduna denean konpromisoa-e, utilitateari deitu behar diozu bidali aldaketa eta zehaztu sareko helbidea BuildMaster-A. Entzuteko sareko ataka ere zehaztu behar duzu PBCchangeSource. PBCchangeSource, bide batez, parte da BuildMaster-A. Metodo honek baimena beharko du admin-a proiektuaren biltegia dagoen zerbitzarian. Lehenik eta behin, biltegiaren babeskopia egin beharko duzu.

5.4 programatzaileak


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

programatzaileak – proiektua muntatzeko eta probatzeko kate osoa abiarazten duen abiarazle gisa jokatzen duen elementua da.
BuildBot-ekin etengabeko integrazioaren inplementazio adibide bat

Erregistratutako aldaketa horiek aldatu_iturria, lan-prozesuan eraldatua BuildBot-a objektatzeko Aldatu eta orain bakoitza Antolatzailea horietan oinarrituta, proiektua eraikitzeko prozesua hasteko eskaerak eraikitzen ditu. Hala ere, eskaera horiek ilarara noiz transferitzen diren ere zehazten du. Objektu bat Eraikitzailea eskaera-ilara bat gordetzen du eta uneko muntaketaren egoera bereizi batean egiten du jarraipena Langilea-e. Eraikitzailea gainean dago BuildMaster-e eta aurrera Langilea-e. Horrekin bidaltzen du BuildMaster-a on Langilea-eta dagoeneko zehatza eraikitzeko - jarraitu beharreko urrats batzuk.
Oraingo adibidean halakoak ikusten ditugu programatzaileak 2 pieza sortzen dira. Gainera, bakoitzak bere mota du.

SingleBranchScheduler – Ordutegiko klase ezagunenetako bat. Adar bat ikusten du eta bertan erregistratutako aldaketa batek eragiten du. Aldaketak ikusten dituenean, eraikuntza eskaera bidaltzea atzeratu dezake (parametro berezian zehaztutako epea atzeratu treeStableTimer). The izena bertan bistaratuko den ordutegiaren izena ezartzen du BuildBot-Web interfazea. IN Aldatu iragazkia iragazki bat ezartzen da, adarreko zein aldaketak gainditu ondoren eraikuntza eskaera bidaltzeko ordutegia eskatzen du. IN eraikitzaileIzenak izena adierazten da eraikitzailea-a, geroxeago ezarriko duguna. Gure kasuan izena proiektuaren izenaren berdina izango da: zureProiektua.

ForceScheduler oso gauza sinplea. Programazio mota hau saguaren klik eginez abiarazten da BuildBot-Web interfazea. Parametroek esentzia bera dute SingleBranchScheduler.

PS 3. zenbakia. Agian ondo etorriko zaio
Aldizkakoa denbora-finkatutako maiztasun jakin batean ibiltzen den ordutegia da. Deiak antzeko zerbait du


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

periodikoaBuildTimer aldizkakotasun horren denbora segundotan zehazten du.

BuildFactory zehatz bat sortzen du eraikitzeko, zein orduan eraikitzailea helbidera bidaltzen du Langilea. Urtean BuildFactory jarraitu beharreko pausoak adierazten ditu Langilea-y. Metodoari deituz urratsak gehitzen dira gehituStep

Adibide honetako lehen urratsa da git clean -d -f -f –x, gero git checkout. Ekintza hauek parametroan sartzen dira metodoa, argi adierazten ez dena baina balio lehenetsia dakar freskoa. Parametroa modua='gehikorra' Fitxategiak karpetako direktoriokoak direla adierazten du chechout, biltegian falta den arren, ukitu gabe jarraitzen du.

Gehitutako bigarren urratsa scriptari deitzea da trial parametroarekin kaixo alboan Langilea-a direktoriotik /home/habr/worker/yourProject/build ingurune-aldagaiarekin PATHONPATH=... Horrela, zure script-ak idatzi eta alboan exekutatu ditzakezu. Langilea-a urrats bakoitzean util.ShellCommand. Script hauek zuzenean biltegian jar daitezke. Ondoren, orduetan chechout-e eroriko dira /home/habr/worker/yourProject/build. Hala ere, orduan bi "baina" daude:

  1. Langilea gako batekin sortu behar da --umask ondoren exekuzio-eskubideak blokeatu ez daitezen checkout-The.
  2. Egun git push-e script hauetako propietatea zehaztu behar duzu zehatzahorrela gero chechout-e-k ez zuen galdu Git scripta exekutatzeko eskubidea.

5.6 eraikitzaile


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

Zer den Eraikitzailea esan zen Hemen. Orain zehatzago esango dizut nola sortu. BuilderConfig eraikitzailea da eraikitzailea. Horrelako diseinatzaileak c['eraikitzaileak'] hainbat zehaztu ditzakezu, hau objektuen orria baita eraikitzailea mota. Orain berridatzi dezagun adibidea BuildBot, gure zereginera hurbilduz.


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

Orain parametroen berri emango dizut BuilderConfig.

izena izena zehazten du eraikitzailea-a. Hemen jarri genion izena zureProiektua... Horrek esan nahi du aktibatuta dagoela Langilea- bide hau bera sortuko da /home/habr/worker/yourProject/build. Antolatzailea bilatzen eraikitzailea izen honekin bakarrik.

langile-izenak fitxa dauka Langilea-s. Horietako bakoitzari gehitu behar zaio c['langileak'].

fabrika - espezifikoak eraikitzeko, eta horrekin lotuta dago eraikitzailea. Objektua bidaliko du eraikitzeko on Langilea honetan jasotako urrats guztiak betetzeko eraikitzeko-The.

6. Zure konfigurazioaren adibidea

Hona hemen inplementatzea proposatzen dudan proiektu-arkitektura adibidea BuildBot
.

Bertsioak kontrolatzeko sistema gisa erabiliko dugu svn. Biltegia bera hodei moduko batean kokatuko da. Hona hemen hodei honen helbidea svn.host/svn/yourProject/trunk. Hodeian azpian svn kontuaren erabiltzaile-izen bat dago: erabiltzaile, pasabidea: pasahitza. Urratsak adierazten dituzten gidoiak eraikitzeko-a ere adarrean egongo da svn, aparteko karpeta batean buildbot/worker_linux. Script hauek gordetako propietatea duen biltegian daude exekutagarria.

BuildMaster и Langilea exekutatu ostalari berean proiektua.ostalari .BuildMaster bere fitxategiak karpeta batean gordetzen ditu /home/habr/master. Langilea ondoko bide honetan gordetzen da /home/habr/langile. Prozesuen komunikazioa BuildMaster-a eta Langilea-a 4000 portutik egiten da protokoloaren arabera BuildBot-a, alegia 'pb' protokoloa.

Helburu-proiektua Python-en idatzita dago. Eginkizuna bere aldaketen jarraipena egitea da, fitxategi exekutagarria sortzea, dokumentazioa sortzea eta probak egitea. Porrotaren kasuan, garatzaile guztiek mezu bat bidali behar dute mezu elektronikoz, arrakastarik gabeko ekintza bat dagoela adieraziz.

Web bistaratzea BuildBot 80 atakara konektatuko gara proiektua.ostalari. Ez da beharrezkoa Apatch instalatzea. Liburutegiaren parte gisa bihurritu dagoeneko web zerbitzari bat dago, BuildBot erabiltzen du.

Barne informazioa gordetzeko BuildBot erabiliko dugu sqlite.

Ostalari bat behar da posta bidaltzeko smtp.zure.domeinua - postatik gutunak bidaltzeko aukera ematen du [posta elektroniko bidez babestua] autentifikaziorik gabe. Ostalarian ere 'smtp ' Akta 1025 postuan entzuten ari dira.

Prozesuan bi pertsonak parte hartzen dute: admin и erabiltzaile. administratzaileak administratzen ditu BuildBot. erabiltzailea konpromisoa hartzen duen pertsona da konpromisoa-s.

Fitxategi exekutagarria bidez sortzen da pyinstaller. Dokumentazioa bidez sortzen da doxigenoa.

Arkitektura honetarako hau idatzi nuen: maisua.cfg:

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

Lehenik eta behin behar duzu sortu BuildMaster-a eta Langilea-a. Ondoren, itsatsi fitxategi hau maisua.cfg в /home/habr/master.

Hurrengo urratsa zerbitzua martxan jartzea da BuildMasters


sudo buildbot start /home/habr/master

Ondoren, martxan jarri zerbitzua Langilea-a


buildbot-worker start /home/habr/worker

Prest! Orain Buildbot aldaketen jarraipena egingo du eta abiaraziko du konpromisoa-y sartu svn, aurreko arkitekturarekin proiektu bat eraikitzeko eta probatzeko urratsak eginez.

Jarraian, goikoaren ezaugarri batzuk deskribatuko ditut maisua.cfg.

6.1 Zure maisuaren bidean.cfg


Nire idazten ari zaren bitartean maisua.cfg Akats asko egingo dira, beraz, erregistro-fitxategia irakurri beharko da. gisa gordetzen da BuildMaster-ec bide absolutua /home/habr/master/twistd.log, eta alboan Langilea-a bide absolutuarekin /home/habr/worker/twistd.log. Errorea irakurri eta konpondu ahala, zerbitzua berrabiarazi beharko duzu BuildMaster-a. Hona hemen nola egiten den:


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

6.2 svn-ekin lan egitea


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)

Hasteko, begira diezaiogun svn_poller. Interfaze bera da oraindik, erregularki biltegia minutuan behin galdetzen duena. Kasu honetan svn_poller adarra bakarrik sartzen da enbor. Parametro misteriotsua split_file=util.svn.split_file_alwaystrunk arauak ezartzen ditu: karpeta-egitura nola apurtu svn adarretan. Bide erlatiboak ere eskaintzen dizkie. Bere txanda zatitu_fitxategia_beti trunk prozesua errazten du biltegiak bakarrik daukala esanez enbor.

В Programatzaileak adierazi Aldatu iragazkiaikusten duena Bat ere ez eta adar bat lotzen dio enbor elkarte jakin baten arabera bidez zatitu_fitxategia_beti trunk. Aldaketei erantzutea enbor, Abian jartzen eraikitzailea izenarekin zureProiektua.

propietate hemen beharrezkoa da administratzaileak eraikuntza eta proben emaitzen posta zerrendak jaso ditzan prozesuaren jabe gisa.

Urratsera eraikitzeko-a checkout biltegiaren tokiko bertsioan kokatutako edozein fitxategi guztiz ezabatzeko gai da Langilea-A. Eta gero osoa egin svn eguneratzea. Modua parametroaren bidez konfiguratzen da modua=betea, metodoa=freskoa. Parametroa stopOnTailure bada dio svn eguneratzea errore batekin exekutatu egingo da, orduan eraikuntza eta probaren prozesu osoa bertan behera utzi behar da, ekintza gehiagok ez baitute zentzurik.

6.3 Zuri bidalitako gutuna: kazetariek deklaratzeko baimena dute


erreportariak posta elektronikoz jakinarazpenak bidaltzeko zerbitzua da.


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]

Mezuak bidal ditzake modu desberdinak.

MailNotifier posta elektronikoa erabiltzen du jakinarazpenak bidaltzeko.

txantiloia_html buletinerako testu-txantiloia ezartzen du. HTML erabiltzen da marka sortzeko. Motorrak aldatzen du jinja2 (ekin alderatu daiteke django). BuildBot Mezuaren testua sortzeko prozesuan txantiloian ordezkatzen diren aldagai multzo bat du. Aldagai hauek {{ giltza kizkur bikoitzak }} artean daude. Adibidez, laburpena amaitutako eragiketen egoera erakusten du, hau da, arrakasta edo porrota. A proiektuak aterako du zureProiektua. Beraz, kontrol komandoak erabiliz jinja2, aldagaiak BuildBot-a eta python kateen formateatzeko tresnak, nahiko informazio-mezu bat sor dezakezu.

MailNotifier honako argumentu hauek ditu.

fromaddr – denek buletina jasoko duten helbidea.

bidali Erabiltzaile Interesatuak=True-k mezu bat bidaltzen die egin duen jabeari eta erabiltzaileari konpromisoa.

bilaketa — Buletina jasotzen duten erabiltzaileen izenei gehitu beharreko atzizkia. Beraz admin nola jasoko duen erabiltzaileak buletina helbidean [posta elektroniko bidez babestua].

relayhost zerbitzaria ireki den ostalari-izena zehazten du smtpBat smptPorta entzuten duen ataka-zenbakia zehazten du smtp zerbitzaria.

modua = "abisua" bidalketa gutxienez urrats bat baldin badago bakarrik egin behar dela dio eraikitzeko-a, egoera hutsegitearekin edo abisuarekin amaitu zena. Arrakasta izanez gero, ez dago buletinarik bidali beharrik.

ExtraHartzaileak posta elektronikoa bidali behar zaien pertsonen zerrenda jasotzen du jabeaz eta egin duen pertsonaz gain konpromisoa.

mezu formatzailea mezuaren formatua, bere txantiloia eta eskuragarri dauden aldagai multzo bat zehazten dituen objektu bat da jinja2. bezalako aukerak wantProperties=Egia и wantSteps=Egia definitu aldagai erabilgarrien multzo hau.

with['services']=[sendMessageToAll] zerbitzuen zerrenda eskaintzen du, eta horien artean gurea izango da erreportaria.

Egin dugu! Zorionak

Gure konfigurazio propioa sortu dugu eta horretarako gai den funtzionaltasuna ikusi dugu. BuildBot. Hau, nire ustez, nahikoa da zure proiektua sortzeko tresna hau beharrezkoa den ulertzeko. Interesatzen al zaizu? Baliagarria izango al zaizu? Eroso al da lan egiteko? Orduan ez dut artikulu hau alferrik idazten.

Eta harago. Komunitate profesionalak erabiltzea gustatuko litzaidake BuildBot, zabaldu egin zen, eskuliburuak itzuli ziren, eta are adibide gehiago zeuden.

Eskerrik asko guztioi zuen arretagatik. Zorte on.

Iturria: www.habr.com

Gehitu iruzkin berria