Muenzaniso wekuita Continuous Integration uchishandisa BuildBot

Muenzaniso wekuita Continuous Integration uchishandisa BuildBot
(Mufananidzo na Computerizer kubva Pixabay)

Nhai!

Zita randu ndi Evgeniy Cherkin, Ini ndiri programmer pachikwata chebudiriro pane imwe kambani yemigodhi Polymetal.

Paunenge uchitanga chero purojekiti hombe, unotanga kufunga: "Ndeipi software iri nani kushandisa kuishandira?" Iyo IT purojekiti inopfuura nepakati pezvinhanho isati yaburitsa iyo inotevera vhezheni. Zvakanaka kana cheni yematanho aya ichiitwa otomatiki. Iyo otomatiki maitiro ekuburitsa vhezheni nyowani yeIT chirongwa pachayo inodaidzwa Kuenderera mberi nekubatanidzwa. BuildBot akazova mubatsiri akanaka kwatiri mukuita chirongwa ichi.

Muchinyorwa chino ndakasarudza kupa muchidimbu chemikana BuildBot. Ko software iyi inokwanisa chii? Nzira yekutaura naye sei uye nzira yekuvaka yakajairwa INOFANIRA KUBVA RELATIONSHIP naye? Iwe unogona kushandisa ruzivo rwedu iwe pachako nekugadzira sevhisi inoshanda yekuvaka uye yekuyedza purojekiti yako pamushini wako.

Zviri mukati

Zviri mukati

1. Sei BuildBot?
2. Pfungwa inotungamirwa naBuildMaster
3. Kuiswa
4. Matanho ekutanga

5. Kugadzirisa. Step by step recipe

5.1 BuildmasterConfig
Vashandi ve5.2
5.3 change_source
5.4 vagadziri

5.5 BuildFactory
5.6 vavaki

6. Muenzaniso wekugadzirisa kwako pachako

6.1 Panzira inoenda kuna tenzi wako.cfg
6.2 Kushanda ne svn
6.3 Tsamba kwauri: vatori venhau vane mvumo yekuzivisa

Tazviita! Makorokoto

1. Sei BuildBot?

Kare pa habr-e ndakasangana nezvinyorwa zvekushandisa Kuenderera mberi nekubatanidzwa uchishandisa BuildBot. Eg, Uyu Ndakaiona ichinyanya kudzidzisa. Pane mumwe muenzaniso - simpler. Izvi zvinyorwa zvinogona kuverengerwa muenzaniso kubva mubhuku rekushandisauye izvozvo mushure maizvozvo, muChirungu. Coupe inoita nzvimbo yakanaka yekutanga. Mushure mekuverenga zvinyorwa izvi, iwe uchangoda chimwe chinhu ipapo ipapo BuildBot kuita.

Stop! Pane munhu akambozvishandisa mumapurojekiti avo here? Zvinobuda hongu vakawanda vakarishandisa mumabasa avo. Inogona kuwanikwa mienzaniso shandisa BuildBot uye muGoogle kodhi dura.

Saka ndeipi logic yevanhu vanoshandisa Buildbot? Mushure mezvose, kune mamwe maturusi: CruiseControl и Jenkins. Ndichapindura seizvi. Pamabasa mazhinji Jenkins uye chokwadi chichakwana. Nenguva yake, BuildBot - yakawedzera kuchinjika, nepo matambudziko achigadziriswa ipapo sezvakangoita Jenkins. Sarudzo ndeyako. Asi sezvo isu tichitsvaga chishandiso chekusimudzira chinangwa chepurojekiti, wadii kusarudza imwe inobvumidza, kutanga kubva pamatanho akareruka, kuwana sisitimu yekuvaka ine kudyidzana uye yakasarudzika interface.

Kune avo vane purojekiti yakanyorwa mupython, mubvunzo unomuka: "Sei usingasarudze hurongwa hwekubatanidza hune chimiro chakajeka maererano nemutauro unoshandiswa mupurojekiti?" Uye zvino inguva yekupa mabhenefiti BuildBot.

Saka, yedu "instrumental quartet". Ini pachangu, ndaona zvinhu zvina BuildBot:

  1. Iyo yakavhurika sosi sisitimu pasi peGPL rezinesi
  2. Uku ndiko kushandiswa kwepython sechinhu chekugadzirisa uye tsanangudzo yezviito zvinodiwa
  3. Uyu ndiwo mukana wekugamuchira mhinduro kubva kumushini umo gungano rinoitika
  4. Izvi ndizvo, zvekupedzisira, zvidiki zvinodikanwa zveMugamuchiri. Kutumirwa kunoda python uye yakamonyoroka, uye haidi muchina chaiwo uye java muchina.

2. Pfungwa inotungamirwa naBuildMaster

Muenzaniso wekuita Continuous Integration uchishandisa BuildBot

Pakati pebasa rekugovera architecture iri BuildMaster. Isevhisi inoti:

  • anochengeta track shanduko mumuti sosi yeprojekiti
  • inotumira mirairo inofanirwa kuitwa neVashandi sevhisi kuvaka chirongwa nekuchiyedza
  • inozivisa vashandisi nezve mhedzisiro yezviito zvakaitwa

BuildMaster yakagadzirirwa kuburikidza nefaira master.cfg. Iri faira riri mumudzi BuildMaster. Gare gare ini ndicharatidza kuti mudzi uyu unogadzirwa sei. Iyo faira pachayo master.cfg ine python script inoshandisa mafoni BuildBot.

Chinotevera chinonyanya kukosha chinhu BuildBot ane zita Mushandi. Iyi sevhisi inogona kutangwa pane imwe host ine imwe OS, kana pamwe pane iyo BuildMaster. Inogonawo kuvepo munzvimbo yakanyatsogadzirirwa chaiyo ine mapakeji ayo uye akasiyana. Aya matunhu chaiwo anogona kugadzirwa uchishandisa python utilities senge virtualenv, vev.

BuildMaster nhepfenyuro inoraira kumunhu wese Mushandi-y, uye iye, zvakare, anoazadzisa. Ndiko kuti, zvinoshanduka kuti nzira yekuvaka uye yekuyedza purojekiti inogona kuenderera Mushandi-e inomhanya Windows uye pane mumwe Mushandi anomhanya Linux.

Buda purojekiti source codes inoitika pane imwe neimwe Mushandi-e.

3. Kuiswa

Saka, handei. Ini ndichave ndichishandisa Ubuntu 18.04 semuenzi. Ndichaisa imwe pairi BuildMaster-a uye imwe Mushandi-a. Asi chekutanga iwe unofanirwa kuisa python3.7:

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

Kune avo vanoda python3.7.2 pane 3.7.1, munogona kuita zvinotevera:


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

Nhanho inotevera ndeyekuisa Tweeted и BuildBot, pamwe nemapakeji anokubvumira kushandisa mamwe maitiro 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. Matanho ekutanga

Nguva yekugadzira BuildMaster. Ichava mufolda yedu /home/habr/master.

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

Nhanho inotevera. Ngatigadzirei Mushandi. Ichava mufolda yedu /home/habr/mushandi.

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

Paunomhanya Mushandi, ipapo nekusarudzika ichagadzira mukati /home/habr/mushandi folda ine zita reprojekiti, iyo inotsanangurwa mukati master.cfg. Uye mufolda ine zita reprojekiti ichagadzira dhairekitori kuvaka, uye ndicharamba ndichizviita buda. Kushanda dhairekitori re Mushandi-uye ichava dhairekitori /home/habr/yourProject/build.

"Golden Key
Uye zvino izvo zvandakanyora yapfuura ndima ye: script iyo tenzi achada kubva Mushandi-uye yakaitwa kure mune ino dhairekitori haizoitwe nekuti iyo script haina mvumo yekumhanya. Kuti ugadzirise mamiriro acho ezvinhu, iwe uchada kiyi --umask=0o22, iyo inorambidza kunyora kune iyi dhairekitori, asi ichachengeta kodzero dzekuvhura. Uye ndizvo chete zvatinoda.

BuildMaster и Mushandi gadzira kubatana kune mumwe nemumwe. Zvinoitika kuti inoputika uye Mushandi kumirira kwechinguva mhinduro kubva BuildMaster-A. Kana pasina mhinduro, kubatana kunotangazve. Key --keepalive=60 zvaingoda kuratidza nguva yapera batanidza reboots.

5. Kugadzirisa. Step by step recipe

Kugadziriswa BuildMaster inoitwa padivi pemuchina watakaraira kugadzira-tenzi. Muchiitiko chedu, iyi idhairekitori /home/habr/master. Configuration file master.cfg haipo parizvino, asi iwo mutemo pachawo wakatogadzira faira master.cmg.sample. Unofanira kuitumidza zita kuti master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Ngativhure iyi master.cfg. Uye ngatitarisei kuti inosanganisirei. Uye mushure meizvozvo, ngatiedzei kugadzira yedu yekumisikidza faira.

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 -Duramazwi rekutanga refaira rekugadzirisa. Inofanira kuiswa mufaira rekugadzirisa. Kuti zvive nyore kushandisa, alias inounzwa mune yekumisikidza kodhi "c". Titles makiyi в c["keyFromDist"] zvinhu zvakagadziriswa zvekudyidzana nazvo BuildMaster. Pakiyi imwe neimwe, chinhu chinoenderana chinotsiviwa semutengo.

Vashandi ve5.2

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

Nguva ino tinoratidza BuildMaster-y list ye Mushandi-s. Ini pachangu Mushandi takagadzira yepamusorosoro, zvichiratidza iwe-mushandi-zita и pasiwedhi. Zvino dzinoda kutaurwa pachinzvimbo muenzaniso-mushandi и zvakaitika .

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

By key change_source duramazwi c tinowana mukana kune rondedzero yatinoda kuisa chinhu chinovhota repository ine kodhi yepurojekiti. Muenzaniso unoshandisa Git repository iyo inovhoterwa pane dzimwe nguva.

Nharo yekutanga ndiyo nzira inoenda kune yako repository.

workdir inomiririra nzira inoenda kune folda iri padivi Mushandi-hama kune nzira /home/habr/worker/yourProject/build git ichachengeta iyo yemuno vhezheni yeiyo repository.

bazi ine bazi chairo mudura rinofanirwa kuteverwa.

pollInterval ine nhamba yemasekonzi mushure mezvo BuildMaster ichaongorora repository yekuchinja.

Pane nzira dzinoverengeka dzekutevera shanduko kune repository yeprojekiti.

Nzira iri nyore ndeye Polling, izvo zvinoreva kuti BuildMaster nguva nenguva inovhota sevha ine repository. Kana Commit yakaratidza shanduko mune repository, ipapo BuildMaster ichagadzira chinhu chemukati nekunonoka chinja uye tumira kune muiti wechiitiko Muparidzi, iyo ichavhura matanho ekuvaka uye kuyedza purojekiti pa Mushandi-e. Pakati pematanho aya pacharatidzwa update repository. Chaizvo pa MushandiIzvi zvinogadzira kopi yemunharaunda ye repository. Tsanangudzo yehurongwa uhu huchakurukurwa pazasi muzvikamu zviviri zvinotevera. (5.4 и 5.5).

Imwe yakatonyanya kunaka nzira yekutevera shanduko kune repository kutumira mameseji zvakananga kubva kune server inoitora kuenda BuildMaster- nezvekuchinja purojekiti sosi makodhi. Muchiitiko ichi, nokukurumidza apo mugadziri anogadzira Commit, sevha ine purojekiti repository inotumira meseji BuildMaster-y. Uye iye, zvakare, achaibata nekugadzira chinhu PBChangeSource. Zvadaro, chinhu ichi chichaendeswa kune Muparidzi, iyo inomutsa matanho ekuvaka purojekiti uye kuiedza. Chikamu chakakosha cheiyi nzira chiri kushanda nacho haka-server zvinyorwa mune repository. Mune script haka-a, mutoro wekugadzirisa zviito kana Commit-e, iwe unofanirwa kufonera iyo yekushandisa sendchange uye tsanangura kero yetiweki BuildMaster-A. Iwe zvakare unofanirwa kutsanangura iyo network port inoteerera PBChangeSource. PBChangeSource, nenzira, chikamu BuildMaster-A. Iyi nzira inoda mvumo arun-a pane sevha uko purojekiti repository iripo. Iwe unofanirwa kutanga waita backup ye repository.

5.4 vagadziri


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

schedulers - ichi chinhu chinoshanda sechinhu chinokonzeresa chinotanga cheni yese yekusangana uye kuyedzwa kweprojekiti.
Muenzaniso wekuita Continuous Integration uchishandisa BuildBot

Idzo shanduko dzakarekodhwa change_source, kushandurwa mukuita basa BuildBot-a kupikisa chinja uye zvino zvese Sheduler zvichibva pazviri, zvinovaka zvikumbiro zvekutanga chirongwa chekuvaka chirongwa. Zvakadaro, inotarawo kana zvikumbiro izvi zvaendeswa mberi kumutsara. Chinhu muvaki inochengeta mutsara wezvikumbiro uye inoteedzera mamiriro egungano razvino pane yakaparadzana Mushandi-e. muvaki iripo pa BuildMaster-e uye zvichingodaro Mushandi-e. Anotumira na BuildMaster-a on Mushandi-uye nechekare kuvaka - nhevedzano yematanho anofanirwa kuteverwa.
Tinoona izvozvo mumuenzaniso wazvino uno schedulers 2 zvidimbu zvinogadzirwa. Uyezve, imwe neimwe ine mhando yayo.

SingleBranchScheduler - imwe yemakirasi akakurumbira pane purogiramu. Inotarisa rimwe bazi uye rinokonzerwa neshanduko yakanyorwa mairi. Kana aona shanduko, anogona kunonoka kutumira chikumbiro chekuvaka (defer yenguva yakatsanangurwa mune yakakosha parameter treeStableTimer). IN zita inoseta zita rehurongwa hucharatidzwa mukati BuildBot-web interface. IN ChangeFilter sefa inogadzwa, mushure mekupfuura izvo shanduko mubazi dzinokurudzira hurongwa kutumira chikumbiro chekuvaka. IN builderNames zita rinoratidzwa muvaki-a, izvo zvatichaisa gare gare. Iro zita mune yedu richave rakafanana sezita reprojekiti: yourProject.

ForceScheduler chinhu chiri nyore kwazvo. Rudzi urwu rwehurongwa rwunokonzereswa nekudzvanya mbeva BuildBot-web interface. Iwo ma parameter ane essence yakafanana neye in SingleBranchScheduler.

PS Nhamba 3. Zvichida zvichauya zvakanaka
Nguva nenguva ipurogiramu inomhanya pane imwe nguva-yakagadziriswa frequency. Kufona kunoita seizvi


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 inotsanangura nguva yeiyi periodicity mumasekonzi.

BuildFactory inogadzira chaiyo kuvaka, izvo zvino muvaki inotumira ku Mushandi. The BuildFactory inoratidza matanho anofanira kuteverwa Mushandi-y. Matanho anowedzerwa nekudaidza nzira addStep

Nhanho yekutanga yakawedzerwa mumuenzaniso uyu ndeye git clean -d -f -f -xipapo git Checkout. Zviito izvi zvinosanganisirwa muparameter nzira, iyo isina kutaurwa zvakajeka asi inoreva kukosha kwekutanga fresh. Parameter mode='kuwedzera' inoratidza kuti mafaera ari kubva kudhairekitori uko iyo chechout, nepo isipo kubva mudura, ramba usina kubatwa.

Yechipiri yakawedzerwa nhanho ndeyekudaidza script kutongwa ine parameter mhoro parutivi Mushandi-a kubva kudhairekitori /home/habr/worker/yourProject/build nemhoteredzo inoshanduka PATHONPATH=... Saka, unogona kunyora zvinyorwa zvako wozviita padivi. Mushandi-a nhanho imwe neimwe util.ShellCommand. Aya magwaro anogona kuiswa zvakananga mudura. Zvadaro pa chechout-e vachawira mukati /home/habr/worker/yourProject/build. Nekudaro, pane maviri "buts":

  1. Mushandi inofanira kugadzirwa nekiyi --umask kuitira kuti irege kuvharira kodzero dzekuuraya mushure buda-The.
  2. pa git Push-e yeaya mascript aunoda kutsanangura iyo pfuma exacutablekuti gare gare chechout-e haana kurasikirwa nekodzero yekuita iyo Git script.

5.6 vavaki


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

Nezve chii muvaki akaudzwa pano. Iye zvino ini ndichakuudza zvakadzama nezvekuti ungagadzira sei. BuilderConfig muvaki muvaki. Vagadziri vakadaro mu c['vakavaka'] unogona kutsanangura akati wandei, sezvo iri pepa rezvinhu muvaki type. Zvino ngatinyore zvakare muenzaniso kubva BuildBot, kuchiunza pedyo nebasa redu.


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

Zvino ini ndichakuudza nezve ma parameters BuilderConfig.

zita inotsanangura zita muvaki-a. Apa takaitumidza yourProject... Izvi zvinoreva kuti pa Mushandi- nzira iyi ichagadzirwa /home/habr/worker/yourProject/build. Sheduler kutsvaga muvaki nezita iri chete.

mazita evashandi rine pepa Mushandi-s. Imwe neimwe inofanira kuwedzerwa c['vashandi'].

fekitari - zvakananga kuvaka, iyo inobatanidzwa nayo muvaki. Achatumira chinhu kuvaka pamusoro Mushandi kupedzisa matanho ese anosanganisirwa mune izvi kuvaka-The.

6. Muenzaniso wekugadzirisa kwako pachako

Heino muenzaniso purojekiti yekuvaka iyo yandinopa zano kuita kuburikidza BuildBot
.

Tichashandisa seshanduro yekudzora system svn. Iyo repository pachayo ichave iri mune imwe mhando yegore. Heino kero yegore iri svn.host/svn/yourProject/trunk. Mugore pasi svn pane account username: mushandisi, passwd: pasiwedhi. Zvinyorwa zvinomiririra matanho kuvaka-a achavawo mubazi svn, mune imwe folda buildbot/worker_linux. Aya ma script ari munzvimbo inochengeterwa nemidziyo yakachengetwa inoitwa.

BuildMaster и Mushandi mhanya pamunhu mumwe chete project.host .BuildMaster inochengeta mafaera ayo mufolda /home/habr/master. Mushandi inochengetwa munzira inotevera /home/habr/mushandi. Nzira yekukurukurirana BuildMaster-a uye Mushandi-a inoitwa kuburikidza nechiteshi 4000 maererano neprotocol BuildBot-a, kureva 'pb' protocol.

Iyo inonangwa purojekiti yakanyorwa zvachose muPython. Basa nderekutevera shanduko dzayo, kugadzira faira rinogoneka, kugadzira zvinyorwa, uye kuitisa bvunzo. Muchiitiko chekutadza, vese vanogadzira vanofanirwa kutumira meseji neemail inotaura kuti pane chiitiko chisina kubudirira.

Webhu kuratidza BuildBot isu tichabatanidza kune port 80 ye project.host. Hazvina kudikanwa kuisa Apatch. Sechikamu cheraibhurari yakakoswa kwatova newebhu server, BuildBot anoishandisa.

Kuchengetedza ruzivo rwemukati rwe BuildBot tichashandisa sqlite.

Munhu anodiwa pakutumira tsamba smtp.your.domain - inobvumira kutumira tsamba kubva kune tsamba [email inodzivirirwa] pasina chokwadi. Zvakare pane host 'SMTP ' Maminitsi ari kunzwika pane post 1025.

Pane vanhu vaviri vanobatanidzwa mukuita izvi: arun и mushandisi. admins BuildBot. mushandisi ndiye munhu ari kuita Commit-s.

Exacutable faira inogadzirwa kuburikidza pyinstaller. Documentation inogadzirwa kuburikidza dhokisijeni.

Kune iyi architecture ndakanyora izvi: 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"
}

Kuti utange, unoda kugadzira BuildMaster-a uye Mushandi-a. Wonamatidza faira iri master.cfg в /home/habr/master.

Nhanho inotevera ndeyekutanga sevhisi BuildMaster-a


sudo buildbot start /home/habr/master

Wobva watanga sevhisi Mushandi-a


buildbot-worker start /home/habr/worker

Ready! Zvino Buildbot inoteedzera shanduko uye kukonzeresa Commit-y mune svn, kuita nhanho dzekuvaka nekuyedza purojekiti ine dhizaini iri pamusoro.

Pazasi ini ndichatsanangura mamwe maficha ari pamusoro master.cfg.

6.1 Panzira inoenda kuna tenzi wako.cfg


Ndichinyora zvangu master.cfg Zvikanganiso zvakawanda zvichaitwa, saka kuverenga irogi faira kuchadikanwa. Inochengetwa se BuildMaster-ec nzira yakakwana /home/habr/master/twistd.log, uye parutivi Mushandi-a ine nzira yakakwana /home/habr/worker/twistd.log. Sezvo iwe uchiverenga kukanganisa uye nekuigadzirisa, iwe unozofanirwa kutangazve sevhisi BuildMaster-a. Heino maitiro azvinoitwa:


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

6.2 Kushanda ne 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)

Kutanga, ngatitarisei svn_poller. Iyi ichiri yakafanana interface, inogara ichivhota repository kamwe paminiti. Panyaya iyi svn_poller inopinda mubazi chete hunde. Zvisinganzwisisiki parameter split_file=util.svn.split_file_alwaystrunk inoisa iyo mitemo: nzira yekuputsa iyo folda chimiro svn pamatavi. Anovapawo nzira dzine mwero. Mukufamba kwayo split_file_nguva dzose inorerutsa maitiro nekutaura kuti repository ine chete hunde.

В Vakaronga yakaratidza ChangeFilterndiani anoona hapana uye inosanganisa bazi nayo hunde maererano nesangano rakapiwa kuburikidza split_file_nguva dzose. Kupindura kune shanduko mu hunde, Inotangisa muvaki nezita yourProject.

dzimba pano panodiwa kuitira kuti admin agamuchire matsamba ekunyora ekuvaka uye yekuyedza mhinduro semuridzi wemaitiro.

Nhanho kuvaka-a buda inokwanisa kudzima zvachose chero mafaera ari munharaunda vhezheni repository Mushandi-A. Uye wozoita zvizere svn update. Iyo modhi inogadziriswa kuburikidza neiyo parameter mode=yakazara, nzira=itsva. Parameter haltOnTailure anoti kana svn update ichaitwa nekukanganisa, ipapo nzira yese yekuvaka nekuyedza inofanira kumiswa, sezvo zvimwe zviito zvisingaite.

6.3 Tsamba kwauri: vatori venhau vane mvumo yekuzivisa


Vatori venhau ibasa rekutumira zviziviso neemail.


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]

Anokwanisa kutumira mameseji nzira dzakasiyana.

MailNotifier inoshandisa email kutumira zviziviso.

template_html inoseta chinyorwa chetemplate chetsamba yetsamba. HTML inoshandiswa kugadzira markup. Inogadziriswa neinjini jinja2 (inogona kuenzaniswa ne django). BuildBot ine seti yezvakasiyana izvo zvakakosha zvinotsiviwa mutemplate panguva yekugadzira meseji meseji. Aya mabhii akavharirwa mu {{ mbiri dzakamonana mbiri }}. Semuyenzaniso, pfupiso inoratidza mamiriro ekushanda kwakapedzwa, ndiko kuti, kubudirira kana kukundikana. A zvirongwa will output yourProject. Saka, kushandisa control commands mukati jinja2, zvakasiyana-siyana BuildBot-a uye python tambo yekufometa maturusi, unogona kugadzira meseji inodzidzisa.

MailNotifier ine nharo dzinotevera.

fromaddr - kero iyo munhu wese achagamuchira tsamba yenhau.

sendToInteredUsers=Chokwadi chinotumira meseji kumuridzi nemushandisi akagadzira Commit.

tarisa mudenga - chivakashure chinofanira kuwedzerwa kumazita evashandisi vanogamuchira tsamba yenhau. Saka arun kuti mushandisi achagamuchira sei tsamba yenhau pakero [email inodzivirirwa].

relayhost inotsanangura zita remugamuchiri panovhurwa sevha SMTP, mumwe smptPort inotsanangura nhamba yechiteshi inoteerera SMTP server.

mode = "yambiro" inoti kutumira kunofanira kuitwa chete kana paine nhanho imwe chete kuvaka-a, iyo yakaguma nekutadza kwechimiro kana nyevero. Panyaya yekubudirira, hapana chikonzero chekutumira tsamba.

extraRecipients rine runyoro rwevanhu vanofanira kutumirwa tsamba yacho kuwedzera kumuridzi uye munhu akatumira tsamba yacho Commit.

messageFormatter chinhu chinotsanangudza manyorerwo emeseji, template yayo, uye seti yezvakasiyana zvinowanikwa kubva jinja2. Sarudzo dzakadai se wantProperties=Chokwadi и wantSteps=Chokwadi tsanangura iyi seti yemhando dziripo.

ne['services']=[sendMessageToAll] inopa runyoro rwesevhisi, pakati peiyo yedu ichave musumi.

Tazviita! Makorokoto

Isu takagadzira yedu configuration uye takaona kushanda kwainokwanisa kuita. BuildBot. Izvi, ndinofunga, zvakakwana kuti unzwisise kana chishandiso ichi chinodiwa kugadzira chirongwa chako. Unomufarira here? Zvichakubatsira here? Akasununguka kushanda naye here? Ipapo handisi kunyora chinyorwa ichi pasina.

Uye mberi. Ndinoda nyanzvi munharaunda inoshandisa BuildBot, zvakafara, mabhuku ezvinyorwa akashandurwa, uye kwakatova nemienzaniso yakawanda.

Ndinokutendai mose nekuteerera kwenyu. Rombo rakanaka.

Source: www.habr.com

Voeg