Usa ka pananglitan nga pagpatuman sa Padayon nga Paghiusa sa BuildBot

Usa ka pananglitan nga pagpatuman sa Padayon nga Paghiusa sa BuildBot
(Hulagway ni Computerizer gikan sa Pixabay)

Hello!

Akong ngalan Evgeniy Cherkin, Ako usa ka programmer sa usa ka development team sa usa ka mining company Polymetal.

Sa pagsugod sa bisan unsang dako nga proyekto, magsugod ka sa paghunahuna: "Unsa nga software ang labing maayo nga gamiton aron mapadayon kini?" Ang usa ka proyekto sa IT moagi sa daghang mga yugto sa wala pa ipagawas ang sunod nga bersyon. Maayo kung ang kadena sa kini nga mga yugto awtomatiko. Ang awtomatiko nga proseso sa pagpagawas sa usa ka bag-ong bersyon sa usa ka proyekto sa IT mismo gitawag Padayon nga Integration. BuildBot nahimo nga usa ka maayong katabang alang kanamo sa pagpatuman niini nga proseso.

Niini nga artikulo nakahukom ko nga maghatag usa ka kinatibuk-ang ideya sa mga posibilidad BuildBot. Unsa ang mahimo niini nga software? Unsaon pagduol kaniya ug unsaon paghimo ug normal nga EPEKTIBONG RELASYON SA PAGTRABAHO uban kaniya? Mahimo nimong ipadapat ang among kasinatian sa imong kaugalingon pinaagi sa paghimo og serbisyo nga nagtrabaho alang sa pagtukod ug pagsulay sa imong proyekto sa imong makina.

Mga sulod

Mga sulod

1. Nganong BuildBot?
2. Konsepto nga gipangulohan ni BuildMaster
3. Pag-instalar
4. Unang mga lakang

5. Pag-configure. Lakang sa lakang nga resipe

5.1 BuildmasterConfig
Mga mamumuo sa 5.2
5.3 change_source
5.4 nga mga scheduler

5.5 BuildFactory
5.6 ka mga magtutukod

6. Ehemplo sa imong kaugalingong configuration

6.1 Sa pagpaingon sa imong agalon.cfg
6.2 Pagtrabaho uban sa svn
6.3 Sulat kanimo: ang mga tigbalita gitugotan sa pagpahayag

Among gibuhat! Mga pahalipay

1. Nganong BuildBot?

Kaniadto sa habr-e nakit-an nako ang mga artikulo bahin sa pagpatuman Padayon nga Integration gamit BuildBot. Pananglitan Kini usa Akong nakita nga kini ang labing informative. Adunay laing pananglitan - mas simple. Kini nga mga artikulo mahimong matimpla pananglitan gikan sa manwalug kini pagkahuman, sa English. Ang coupe usa ka maayong punto sa pagsugod. Human sa pagbasa niini nga mga artikulo, ikaw tingali diha-diha dayon gusto sa usa ka butang sa BuildBot buhaton

Hunong! Aduna bay tinuod nga migamit niini sa ilang mga proyekto? Kini nahimo nga oo daghan gigamit kini sa ilang mga buluhaton. Mahimong makit-an mga pananglitan paggamit sa BuildBot ug sa Google code archives.

Busa unsa ang lohika sa mga tawo nga naggamit Buildbot? Human sa tanan, adunay uban nga mga himan: CruiseControl и Jenkins. Ako motubag niini nga paagi. Alang sa kadaghanan sa mga buluhaton Jenkins ug ang kamatuoran igo na. Sa iyang turno, BuildBot - mas mapaigoigoon, samtang ang mga problema masulbad didto sa yano sama sa sa Jenkins. Ang pagpili imoha. Apan tungod kay nangita kami usa ka himan alang sa usa ka nag-uswag nga target nga proyekto, nganong dili pagpili sa usa nga magtugot, sugod sa yano nga mga lakang, aron makakuha usa ka sistema sa pagtukod nga adunay interaktibidad ug usa ka talagsaon nga interface.

Alang niadtong kansang target nga proyekto gisulat sa python, ang pangutana mitungha: "Ngano nga dili pagpili sa usa ka sistema sa panagsama nga adunay usa ka tin-aw nga interface sa termino sa pinulongan nga gigamit sa proyekto?" Ug karon panahon na nga ipresentar ang mga benepisyo BuildBot.

Busa, ang atong "instrumental quartet". Para sa akong kaugalingon, nakaila ko og upat ka bahin BuildBot:

  1. Usa kini ka open source framework ubos sa lisensya sa GPL
  2. Kini ang paggamit sa python isip himan sa pag-configure ug paghulagway sa gikinahanglan nga mga aksyon
  3. Kini usa ka oportunidad nga makadawat usa ka tubag gikan sa makina diin nahitabo ang asembliya
  4. Kini, sa katapusan, ang minimum nga kinahanglanon alang sa usa ka Host. Ang deployment nagkinahanglan og python ug twisted, ug wala magkinahanglan og virtual machine ug java machine.

2. Konsepto nga gipangulohan ni BuildMaster

Usa ka pananglitan nga pagpatuman sa Padayon nga Paghiusa sa BuildBot

Ang sentro sa arkitektura sa pag-apod-apod sa buluhaton mao ang BuildMaster. Kini usa ka serbisyo nga:

  • nagsubay mga pagbag-o sa punoan sa gigikanan sa proyekto
  • nagpadala mga sugo nga kinahanglang ipatuman sa serbisyo sa Worker aron matukod ang proyekto ug masulayan kini
  • nagpahibalo tiggamit mahitungod sa mga resulta sa mga aksyon nga gihimo

BuildMaster gi-configure pinaagi sa file agalon.cfg. Kini nga file anaa sa gamut BuildMaster. Sa ulahi akong ipakita kung giunsa kini nga gamut gibuhat. Ang file mismo agalon.cfg adunay usa ka script sa python nga naggamit mga tawag BuildBot.

Sunod nga labing importante nga butang BuildBot adunay ngalan Buhat. Kini nga serbisyo mahimong ilunsad sa lain nga host nga adunay lahi nga OS, o tingali sa usa diin BuildMaster. Mahimo usab kini nga anaa sa usa ka espesyal nga giandam nga virtual nga palibot nga adunay kaugalingon nga mga pakete ug mga variable. Kini nga mga virtual nga palibot mahimong maandam gamit ang mga gamit sa python sama sa virtualenv, venv.

BuildMaster nagsibya sa mga sugo sa tanan Buhat-y, ug siya, sa baylo, nagtuman kanila. Sa ato pa, mahimong magpadayon ang proseso sa pagtukod ug pagsulay sa usa ka proyekto Buhat-e nga nagpadagan sa Windows ug sa laing Worker nga nagdagan sa Linux.

Checkout Ang mga source code sa proyekto mahitabo sa matag usa Buhat-e.

3. Pag-instalar

So, adto ta. Gamiton nako ang Ubuntu 18.04 isip host. Ibutang ko ang usa niini BuildMaster-usa ug usa Buhat-a. Apan una kinahanglan nimo nga i-install ang python3.7:

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

Alang niadtong nanginahanglan ug python3.7.2 imbes sa 3.7.1, mahimo nimo ang mosunod:


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

Ang sunod nga lakang mao ang pag-instalar Gi-tweet и BuildBot, ingon man mga pakete nga nagtugot kanimo sa paggamit sa dugang nga gamit BuildBot-Ang.


/*Все что под 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. Unang mga lakang

Panahon sa paghimo BuildMaster. Anaa kini sa among folder /home/habr/master.

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

Sunod nga lakang. Magbuhat ta Buhat. Anaa kini sa among folder /home/habr/worker.

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

Pag dagan nimo Buhat, unya pinaagi sa default kini maghimo sa /home/habr/worker folder nga adunay ngalan sa proyekto, nga gipiho sa agalon.cfg. Ug sa folder nga adunay ngalan sa proyekto maghimo kini usa ka direktoryo pagtukod, ug magpadayon sa pagbuhat niini pagpagawas. Direktoryo sa pagtrabaho alang sa Buhat-ug kini mahimong usa ka direktoryo /home/habr/yourProject/build.

"Bulawan nga Yawe
Ug karon kung unsa ang akong gisulat sa miaging parapo alang sa: usa ka script nga Magtutudlo mangayo gikan sa Buhat-ug gibuhat sa layo sa kini nga direktoryo dili ipatuman tungod kay ang script walay permiso sa pagdagan. Aron matul-id ang sitwasyon, magkinahanglan ka og yawe --umask=0o22, nga nagdili sa pagsulat niini nga direktoryo, apan magpabilin ang mga katungod sa paglansad. Ug kana lang ang atong gikinahanglan.

BuildMaster и Buhat paghimo og koneksyon sa usag usa. Kini mahitabo nga kini mabungkag ug Buhat naghulat sa pipila ka panahon alang sa tubag gikan sa BuildMaster-A. Kung walay tubag, ang koneksyon gi-restart. yawe --keepalive=60 kinahanglan lang nga ipahibalo ang oras pagkahuman Sumpaysumpaya reboots.

5. Pag-configure. Lakang sa lakang nga resipe

Pagsalig BuildMaster gihimo sa kilid sa makina diin among gipatuman ang mando mugna-agalon. Sa among kaso, kini usa ka direktoryo /home/habr/master. Pag-configure nga file agalon.cfg wala pa maglungtad, apan ang sugo mismo nakahimo na sa file master.cmg.sample. Kinahanglan nimo nga usbon ang ngalan niini master.cfg.sample в agalon.cfg

mv master.cfg.sample master.cfg

Atong ablihan kini agalon.cfg. Ug atong tan-awon kon unsa ang naglangkob niini. Ug pagkahuman niana, sulayan nato ang paghimo sa atong kaugalingong configuration file.

agalon.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 - sukaranan nga diksyonaryo sa file sa pag-configure. Kinahanglang iapil kini sa configuration file. Alang sa kasayon ​​sa paggamit, usa ka alyas ang gipaila sa configuration code "c". Mga titulo mga yawi в c["keyFromDist"] mga pirmi nga elemento para sa interaksyon sa BuildMaster. Alang sa matag yawe, ang katugbang nga butang gipuli ingon usa ka kantidad.

Mga mamumuo sa 5.2

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

Niining higayona among gipakita BuildMaster-y listahan sa Buhat-s. Akong kaugalingon Buhat among gibuhat mas taas nga, nagpaila ngalan nimo nga trabahante и password. Karon sila kinahanglan nga espesipiko sa baylo panig-ingnan nga trabahante и moagi .

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

Pinaagi sa yawe change_source diksyonaryo c makakuha kami og access sa lista diin gusto namon ibutang ang usa ka butang nga nagboto sa repository nga adunay source code sa proyekto. Ang pananglitan naggamit sa usa ka Git repository nga gisusi sa pipila ka mga agwat.

Ang una nga argumento mao ang dalan sa imong repository.

workdir nagrepresentar sa dalan sa folder diin sa kilid Buhat- usa ka paryente sa dalan /home/habr/worker/yourProject/build git magtipig sa lokal nga bersyon sa repositoryo.

sa sanga adunay usa ka piho nga sanga sa repository nga kinahanglan sundon.

pollInterval naglangkob sa gidaghanon sa mga segundo pagkahuman niini BuildMaster mag-poll sa repository alang sa mga pagbag-o.

Adunay daghang mga pamaagi aron masubay ang mga pagbag-o sa repository sa usa ka proyekto.

Ang pinakasimple nga paagi mao Pagbotar, nga nagpasabot niana BuildMaster matag karon ug unya poll ang server gamit ang repository. Kung pasalig nagpakita sa mga kausaban sa repository, unya BuildMaster maghimo usa ka internal nga butang nga adunay paglangan Kausaban ug ipadala kini sa tigdumala sa panghitabo Scheduler, nga maglunsad sa mga lakang sa pagtukod ug pagsulay sa proyekto sa Buhat-e. Taliwala niini nga mga lakang ipaila update tipiganan. Sakto sa BuhatMakahimo kini og lokal nga kopya sa repositoryo. Ang mga detalye niini nga proseso hisgotan sa ubos sa sunod nga duha ka seksyon. (5.4 и 5.5).

Ang usa ka labi ka matahum nga pamaagi sa pagsubay sa mga pagbag-o sa usa ka tipiganan mao ang pagpadala mga mensahe direkta gikan sa server nga nag-host niini BuildMaster- mahitungod sa pagbag-o sa mga source code sa proyekto. Sa kini nga kaso, sa diha nga ang developer naghimo pasalig, ang server nga adunay repository sa proyekto magpadala usa ka mensahe BuildMaster-y. Ug siya, sa baylo, makapugong niini pinaagi sa paghimo og usa ka butang PBChangeSource. Sunod, kini nga butang ibalhin sa Scheduler, nga nagpalihok sa mga lakang sa pagtukod sa proyekto ug pagsulay niini. Usa ka importante nga bahin niini nga pamaagi mao ang pagtrabaho uban sa taga-mga script sa server sa repositoryo. Sa script taga-a, responsable sa pagproseso sa mga aksyon kung pasalig-e, kinahanglan nimo nga tawagan ang utility sendchange ug ipiho ang adres sa network BuildMaster-A. Kinahanglan mo usab nga ipiho ang network port nga maminaw PBChangeSource. PBChangeSource, sa dalan, bahin BuildMaster-A. Kini nga pamaagi magkinahanglan og pagtugot admin-a sa server diin nahimutang ang repository sa proyekto. Kinahanglan nimo una nga maghimo usa ka backup sa repository.

5.4 nga mga scheduler


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

tig-iskedyul - kini usa ka elemento nga naglihok ingon usa ka hinungdan nga nagsugod sa tibuuk nga kutay sa asembliya ug pagsulay sa proyekto.
Usa ka pananglitan nga pagpatuman sa Padayon nga Paghiusa sa BuildBot

Kadtong mga pagbag-o nga natala change_source, nabag-o sa proseso sa trabaho BuildBot-a sa pagsupak Kausaban ug karon matag Sheduler base sa kanila, nagtukod kini og mga hangyo aron masugdan ang proseso sa pagtukod sa proyekto. Bisan pa, kini usab nagtino kung kanus-a kini nga mga hangyo ibalhin pa sa pila. Usa ka butang magtutukod nagtipig usa ka pila sa mga hangyo ug nagsubay sa kahimtang sa karon nga asembliya sa usa ka lahi Buhat-e. magtutukod anaa sa BuildMaster-e ug sa Buhat-e. Nagpadala siya uban BuildMaster-sa Buhat-ug espisipiko na pagtukod - usa ka serye sa mga lakang nga kinahanglan sundon.
Atong makita nga sa kasamtangan nga pananglitan ingon niana tig-iskedyul 2 ka piraso ang gihimo. Dugang pa, ang matag usa adunay kaugalingon nga tipo.

SingleBranchScheduler - usa sa labing inila nga mga klase sa iskedyul. Nagtan-aw kini sa usa ka sanga ug na-trigger sa usa ka natala nga pagbag-o niini. Kung makita niya ang mga pagbag-o, mahimo niyang ilangan ang pagpadala sa hangyo sa pagtukod (paglangan alang sa panahon nga gitakda sa espesyal nga parameter kahoyStableTimer) AT ngalan nagtakda sa ngalan sa eskedyul nga ipakita sa BuildBot-web interface. SA ChangeFilter gitakda ang usa ka filter, human sa pagpasa kung unsang mga pagbag-o sa sanga nag-aghat sa iskedyul nga magpadala usa ka hangyo alang sa pagtukod. SA Mga ngalan sa magtutukod ngalan ang gipakita magtutukod-a, nga atong ibutang sa ulahi. Ang ngalan sa among kaso parehas sa ngalan sa proyekto: imong Proyekto.

ForceScheduler simple kaayo nga butang. Kini nga matang sa iskedyul ma-trigger pinaagi sa pag-klik sa mouse BuildBot-web interface. Ang mga parameter adunay parehas nga diwa sama sa sa SingleBranchScheduler.

PS No. 3. Tingali kini magamit
Panahon usa ka eskedyul nga nagdagan sa usa ka piho nga frequency nga gitakda sa oras. Ingon ani ang tawag


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 nagtino sa oras niini nga periodicity sa mga segundo.

BuildFactory nagmugna sa usa ka piho nga pagtukod, nga unya magtutukod nagpadala sa Buhat. ang BuildFactory nagpakita sa mga lakang nga sundon Buhat-y. Ang mga lakang gidugang pinaagi sa pagtawag sa pamaagi addStep

Ang una nga dugang nga lakang sa kini nga pananglitan mao ang git clean -d -f -f –xunya git checkout. Kini nga mga aksyon gilakip sa parameter pamaagi, nga dili klaro nga gipahayag apan nagpasabot sa usa ka default nga bili presko. Parameter mode = 'dugang' nagpakita nga ang mga file gikan sa direktoryo diin ang chechout, samtang nawala sa repository, nagpabilin nga wala matandog.

Ang ikaduha nga dugang nga lakang mao ang pagtawag sa script pagsulay uban sa parameter hello sa kilid Buhat-a gikan sa direktoryo /home/habr/worker/yourProject/build uban sa environment variable PATHONPATH=... Sa ingon, mahimo nimong isulat ang imong kaugalingon nga mga script ug ipatuman kini sa kilid Buhat- sa matag lakang util.ShellCommand. Kini nga mga script mahimong ibutang direkta sa repositoryo. Unya sa chechout-e sila mahulog sa /home/habr/worker/yourProject/build. Apan, unya adunay duha ka "apan":

  1. Buhat kinahanglang himoon nga adunay yawe --umask aron dili kini makababag sa mga katungod sa pagpatay pagkahuman pagpagawas-Ang.
  2. sa gitusok-e niini nga mga script kinahanglan nimo nga ipiho ang kabtangan mapatumanpara unya chechout-e wala mawad-an sa katungod sa pagpatuman sa Git script.

5.6 ka mga magtutukod


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

Mahitungod sa unsa magtutukod gisultihan dinhi. Karon isulti ko kanimo ang mas detalyado kung giunsa kini paghimo. BuilderConfig usa ka constructor magtutukod. Ang ingon nga mga tigdesinyo sa c['mga magtutukod'] mahimo nimong ipiho ang pipila, tungod kay kini usa ka panid sa mga butang magtutukod matang. Karon atong isulat pag-usab ang panig-ingnan gikan sa BuildBot, nga nagpaduol niini sa among buluhaton.


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

Karon isulti ko kanimo ang bahin sa mga parameter BuilderConfig.

ngalan nagtino sa ngalan magtutukod-a. Dinhi among ginganlan kini imong Proyekto... Kini nagpasabot nga sa Buhat- kini nga dalan pagabuhaton /home/habr/worker/yourProject/build. Sheduler nangita ug magtutukod pinaagi lamang niini nga ngalan.

mga ngalan sa trabahante adunay sheet Buhat-s. Ang matag usa niini kinahanglan idugang sa c['mga trabahante'].

Pabrika - espesipiko pagtukod, diin kini nalangkit magtutukod. Iyang ipadala ang butang pagtukod sa Buhat aron makompleto ang tanan nga mga lakang nga gilakip niini pagtukod-Ang.

6. Ehemplo sa imong kaugalingong configuration

Ania ang pananglitan nga arkitektura sa proyekto nga akong gisugyot nga ipatuman pinaagi sa BuildBot
.

Atong gamiton isip version control system svn. Ang repository mismo mahimutang sa usa ka matang sa panganod. Ania ang adres niini nga panganod svn.host/svn/yourProject/trunk. Sa panganod sa ilawom svn naay account username: user, passwd: password. Mga script nga nagrepresentar sa mga lakang pagtukod-a naa pud sa branch svn, sa lahi nga folder buildbot/worker_linux. Kini nga mga script nahimutang sa repository nga adunay gitipigan nga kabtangan gipatuman.

BuildMaster и Buhat modagan sa samang host project.host .BuildMaster nagtipig sa mga file niini sa usa ka folder /home/habr/master. Buhat kini gitipigan sa mosunod nga dalan /home/habr/worker. Proseso sa komunikasyon BuildMaster-a ug Buhat-a gihimo pinaagi sa port 4000 sumala sa protocol BuildBot-a, mao 'pb' protocol.

Ang target nga proyekto gisulat sa hingpit sa Python. Ang tahas mao ang pagsubay sa mga pagbag-o niini, paghimo og executable nga file, paghimo og dokumentasyon, ug pagpahigayon og pagsulay. Sa kaso sa kapakyasan, ang tanan nga mga developers kinahanglan nga magpadala usa ka mensahe pinaagi sa email nga nag-ingon nga adunay usa ka dili malampuson nga aksyon.

Pagpakita sa web BuildBot magkonektar kami sa port 80 para project.host. Dili kinahanglan nga i-install ang Apatch. Isip bahin sa librarya gilansisan naa nay web server, BuildBot naggamit niini.

Sa pagtipig sa internal nga impormasyon alang sa BuildBot atong gamiton sqlite.

Usa ka host ang gikinahanglan alang sa pagpadala smtp.your.domain - kini nagtugot sa pagpadala sa mga sulat gikan sa mail [protektado sa email] walay authentication. Sa host usab 'smtp ' Ang mga minuto gidungog sa post 1025.

Adunay duha ka tawo nga nalambigit sa proseso: admin и user. admin nagdumala BuildBot. ang tiggamit mao ang tawo nga nagbuhat pasalig-s.

Ang exacutable nga file gihimo pinaagi sa pyinstaller. Ang dokumentasyon gihimo pinaagi sa doxygen.

Alang sa kini nga arkitektura gisulat ko kini: agalon.cfg:

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

Una kinahanglan nimo sa paghimo BuildMaster-a ug Buhat-a. Unya i-paste kini nga file agalon.cfg в /home/habr/master.

Ang sunod nga lakang mao ang pagsugod sa serbisyo BuildMastera


sudo buildbot start /home/habr/master

Dayon sugdi ang serbisyo Buhat-a


buildbot-worker start /home/habr/worker

Andam na! Karon Buildbot magsubay sa mga pagbag-o ug mag-trigger pasalig-y sulod svn, paghimo sa mga lakang sa pagtukod ug pagsulay sa usa ka proyekto nga adunay arkitektura sa ibabaw.

Sa ubos akong ihulagway ang pipila ka mga bahin sa ibabaw agalon.cfg.

6.1 Sa pagpaingon sa imong agalon.cfg


Samtang nagsulat sa akong agalon.cfg Daghang mga kasaypanan ang mahimo, mao nga kinahanglan ang pagbasa sa log file. Gitipigan kini ingon BuildMaster-ec hingpit nga dalan /home/habr/master/twistd.log, ug sa kilid Buhat-a adunay hingpit nga dalan /home/habr/worker/twistd.log. Samtang imong gibasa ang sayup ug giayo kini, kinahanglan nimo nga i-restart ang serbisyo BuildMaster-a. Ania kung giunsa kini nahimo:


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

6.2 Pagtrabaho uban sa 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)

Una, atong tan-awon svn_poller. Kini mao gihapon ang sama nga interface, kanunay nga pagboto sa repository kausa sa usa ka minuto. Niini nga kaso svn_poller maka-access lang sa branch puntil. Misteryoso nga parameter split_file=util.svn.split_file_alwaystrunk nagtakda sa mga lagda: unsaon pagbungkag sa istruktura sa folder svn sa mga sanga. Gitanyagan usab niya sila ug relatibo nga mga agianan. Sa iyang turno split_file_alwaystrunk gipasayon ​​ang proseso pinaagi sa pag-ingon nga ang repositoryo lang adunay sulod puntil.

В Mga iskedyul gipakita ChangeFilterkinsay nakakita Walay ug nakig-uban sa usa ka sanga niini puntil sumala sa gihatag nga asosasyon pinaagi sa split_file_alwaystrunk. Pagtubag sa mga pagbag-o sa puntil, Naglusad magtutukod uban sa ngalan imong Proyekto.

mga kabtangan dinhi kini gikinahanglan aron ang admin makadawat sa mga mailing list sa mga resulta sa pagtukod ug pagsulay isip tag-iya sa proseso.

Lakang pagtukod-a pagpagawas makahimo sa hingpit nga pagtangtang sa bisan unsang mga file nga nahimutang sa lokal nga bersyon sa repository Buhat-A. Ug dayon buhata ang bug-os svn update. Ang mode gi-configure pinaagi sa parameter mode=puno, pamaagi=presko. Parameter paghunongOnTailure nag-ingon nga kung svn update ipatuman nga adunay usa ka sayup, unya ang tibuuk nga proseso sa pagtukod ug pagsulay kinahanglan nga suspindihon, tungod kay ang dugang nga mga aksyon dili makatarunganon.

6.3 Sulat kanimo: ang mga tigbalita gitugotan sa pagpahayag


Reporters usa ka serbisyo alang sa pagpadala sa mga pahibalo pinaagi sa email.


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]

Makapadala siyag mga mensahe lainlain nga paagi.

MailNotifier naggamit sa email aron ipadala ang mga pahibalo.

template_html nagtakda sa template sa teksto alang sa newsletter. Ang HTML gigamit sa paghimo og markup. Gibag-o kini sa makina jinja2 (mahimong itandi sa django). BuildBot adunay usa ka hugpong sa mga variable kansang mga kantidad gipuli sa template sa panahon sa proseso sa paghimo sa teksto sa mensahe. Kini nga mga variable gilakip sa {{ double curly braces }}. Pananglitan, Summary nagpakita sa kahimtang sa nahuman nga mga operasyon, nga mao, kalampusan o kapakyasan. A mga proyekto magpagawas imong Proyekto. Busa, gamit ang control commands sa jinja2, mga baryable BuildBot-a ug python string formatting tools, makahimo ka og medyo informative nga mensahe.

MailNotifier naglangkob sa mosunod nga mga argumento.

gikan saaddr – ang adres diin ang tanan makadawat sa newsletter.

ipadalaToInterestedUsers= Ang True nagpadala ug mensahe ngadto sa tag-iya ug tiggamit nga naghimo pasalig.

Tan-aw sa taas — usa ka suffix nga kinahanglan idugang sa mga ngalan sa mga tiggamit nga nakadawat sa newsletter. Busa admin unsaon pagdawat sa user ang newsletter sa adres [protektado sa email].

relayhost nagtino sa hostname diin giablihan ang server smtp, ang usa ka smptPort nagtino sa numero sa port nga naminaw smtp server.

mode = "pasidaan" nag-ingon nga ang pagpadala kinahanglan lang buhaton kung adunay labing menos usa ka lakang pagtukod-a, nga natapos sa pagkapakyas sa kahimtang o pasidaan. Sa kaso sa kalampusan, dili kinahanglan nga magpadala usa ka newsletter.

extraRecipients Naglangkob sa usa ka lista sa mga tawo nga kinahanglan ipadala ang pagpadala dugang sa tag-iya ug ang tawo nga nagpatuman sa pasalig.

mensaheFormatter usa ka butang nga nagtino sa format sa mensahe, template niini, ug usa ka set sa mga variable nga makuha gikan jinja2. Mga kapilian sama sa wantProperties=Tinuod и wantSteps=Tinuod ipasabut kini nga set sa magamit nga mga variable.

uban sa ['mga serbisyo']=[sendMessageToAll] naghatag ug lista sa mga serbisyo, diin ang amoa reporter.

Among gibuhat! Mga pahalipay

Naghimo kami sa among kaugalingon nga pag-configure ug nakita ang pagpaandar nga mahimo niini. BuildBot. Kini, sa akong hunahuna, igo na aron masabtan kung gikinahanglan ba kini nga himan sa paghimo sa imong proyekto. Interesado ka ba niya? Mapuslan ba kini kanimo? Komportable ba siya sa pagtrabaho? Nian wala ko ginasulat ini nga artikulo nga wala sing pulos.

Ug dugang pa. Gusto ko nga gamiton sa propesyonal nga komunidad BuildBot, nahimong mas lapad, ang mga manwal gihubad, ug aduna pay daghang mga pananglitan.

Salamat sa tanan sa imong pagtagad. Good luck.

Source: www.habr.com

Idugang sa usa ka comment