Mohlala oa ho kenya ts'ebetsong Continuous Integration ho sebelisa BuildBot

Mohlala oa ho kenya ts'ebetsong Continuous Integration ho sebelisa BuildBot
(Setšoantšo ka Moetsi oa k'homphieutha ho tloha Pixabay)

Lumela!

Lebitso la ka ke Evgeniy Cherkin, Ke moetsi oa mananeo sehlopheng sa nts'etsopele k'hamphaning ea merafo Polymetal.

Ha u qala morero ofe kapa ofe o moholo, u qala ho nahana: "Ke software efe e molemohali eo u ka e sebelisang ho e sebeletsa?" Morero oa IT o feta methating e mengata pele o lokolla mofuta o latelang. Ho hotle ha ketane ea mekhahlelo ena e iketsetsa. Mokhoa o ikemetseng oa ho lokolla mofuta o mocha oa morero oa IT ka boeona o bitsoa Tšebelisano e tsoelang pele. BuildBot e bile mothusi ea molemo ho rona ho phethahatsa ts'ebetso ena.

Sehloohong sena ke ile ka etsa qeto ea ho fana ka kakaretso ea menyetla BuildBot. Software ee e khona ho etsa eng? Mokhoa oa ho mo atamela le mokhoa oa ho haha ​​KAMANO e tloaelehileng e SEBELISANG HO SEBETSA le eena? U ka sebelisa boiphihlelo ba rona ka ho theha ts'ebeletso e sebetsang bakeng sa ho aha le ho leka morero oa hau mochining oa hau.

Tse ka hare

Tse ka hare

1. Ke Hobane'ng ha BuildBot?
2. Khopolo e etelletsoeng pele ke BuildMaster
3. Ho kenya
4. Mehato ea pele

5. Tlhophiso. Mohato ka mohato recipe

5.1 BuildmasterConfig
Basebetsi ba 5.2
5.3 phetoho_mohloli
5.4 bahlophisi

5.5 BuildFactory
5.6 lihahi

6. Mohlala oa tlhophiso ea hau

6.1 Tseleng e eang ho monga hao.cfg
6.2 Ho sebetsa le svn
6.3 Lengolo le eang ho uena: baqolotsi ba litaba ba lumeletsoe ho phatlalatsa

Re e entse! Kea leboha

1. Ke Hobane'ng ha BuildBot?

Nakong e fetileng ho habr-e ke ile ka kopana le lihlooho tse mabapi le ts'ebetsong Tšebelisano e tsoelang pele sebedisa BuildBot. Mohlala Eona ena Ke fumane e ruta haholo. Ho na le mohlala o mong - bonolonyana. Lingoliloeng tsena li ka lokisoa mohlala ho tsoa bukeng ea tataisole e ka mor'a moo, ka Senyesemane. Coupe e etsa sebaka se setle sa ho qala. Ka mor'a ho bala lihlooho tsena, mohlomong u tla hang-hang batla ho hong ka BuildBot ho etsa.

Ema! Na ho na le motho ea e sebelisitseng mererong ea bona? Hoa etsahala hore e ba bangata ba e sebelisa mesebetsing ea bona. E ka fumanoa mehlala ho sebelisoa BuildBot le ho li-archive tsa khoutu tsa Google.

Joale ho na le logic efe eo batho ba e sebelisang Buildbot? Ntle le moo, ho na le lisebelisoa tse ling: CruiseControl и Jenkins. Ke tla araba ka tsela ena. Bakeng sa mesebetsi e mengata Jenkins mme nnete e tla lekana. Ka lehlakoreng la eona, BuildBot - ho ikamahanya le maemo, ha mathata a rarolloa moo habonolo feela joalo ka Jenkins. Khetho ke ea hau. Empa kaha re batla sesebelisoa bakeng sa morero o tsoelang pele oa sepheo, ke hobane'ng ha u sa khethe e tla lumella, ho qala ka mehato e bonolo, ho fumana mokhoa oa ho haha ​​o nang le tšebelisano le sebopeho se ikhethang.

Bakeng sa bao morero oa bona o ngotsoeng ka python, potso e hlaha: "Hobaneng u sa khethe mokhoa oa ho kopanya o nang le sebopeho se hlakileng ho latela puo e sebelisoang morerong oo?" 'Me joale ke nako ea ho hlahisa melemo BuildBot.

Kahoo, "quartet" ea rona ea liletsa. Bakeng sa ka, ke khethile likarolo tse 'nè BuildBot:

  1. Ke moralo oa mohloli o bulehileng tlas'a laesense ea GPL
  2. Ena ke tšebeliso ea python e le sesebelisoa sa tlhophiso le tlhaloso ea liketso tse hlokahalang
  3. Ena ke monyetla oa ho fumana karabo ho tloha mochine oo kopano e etsoang ho oona
  4. Tsena ke, qetellong, litlhoko tse tlase bakeng sa Moamoheli. Ho romelloa ho hloka python le ho sotheha, 'me ha ho hloke mochine oa sebele le mochine oa java.

2. Khopolo e etelletsoeng pele ke BuildMaster

Mohlala oa ho kenya ts'ebetsong Continuous Integration ho sebelisa BuildBot

Bohareng ba meralo ea kabo ea mosebetsi ke BuildMaster. Ke tšebeletso e nang le:

  • e boloka tlaleho liphetoho sefateng sa mohloli oa morero
  • romela litaelo tse lokelang ho phethoa ke tšebeletso ea Basebetsi ho haha ​​morero le ho o leka
  • tsebisa basebelisi mabapi le liphetho tsa liketso tse entsoeng

BuildMaster e hlophisitsoeng ka faele master.cfg. Faele ena e motsong BuildMaster. Hamorao ke tla bontša kamoo motso ona o entsoeng kateng. Faele ka boyona master.cfg e na le script ea python e sebelisang mehala BuildBot.

Ntho e latelang ea bohlokoa ka ho fetisisa BuildBot e na le lebitso Mosebetsi. Ts'ebeletso ena e ka qalisoa ho moamoheli e mong ea nang le OS e fapaneng, kapa mohlomong ho e mong moo BuildMaster. E ka boela ea ba teng tikolohong e lokiselitsoeng ka ho khetheha e nang le liphutheloana tsa eona le mefuta e fapaneng. Libaka tsena tse fumanehang li ka lokisoa ho sebelisoa lisebelisoa tsa python joalo ka virtualenv, ntho.

BuildMaster e phatlalatsa litaelo ho bohle Mosebetsi-y, 'me eena oa li phethahatsa. Ke hore, hoa bonahala hore mokhoa oa ho haha ​​le ho hlahloba morero o ka tsoela pele Mosebetsi-e matha Windows le ho Worker e 'ngoe e sebelisang Linux.

Sheba dikhoutu mohloli oa morero li etsahala ho e 'ngoe le e 'ngoe Mosebetsi-e.

3. Ho kenya

Kahoo, ha re yeng. Ke tla be ke sebelisa Ubuntu 18.04 joalo ka moamoheli. Ke tla beha e 'ngoe holim'a eona BuildMaster-a le ngoe Mosebetsi-a. Empa pele o hloka ho kenya python3.7:

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

Bakeng sa ba hlokang python3.7.2 sebakeng sa 3.7.1, o ka etsa tse latelang:


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

Mohato o latelang ke ho kenya Tweeted и BuildBot, hammoho le liphutheloana tse u lumellang hore u sebelise ts'ebetso e eketsehileng 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. Mehato ea pele

Nako ea ho bopa BuildMaster. E tla ba foldareng ea rona /home/habr/master.

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

Mohato o latelang. Ha re bopeng Mosebetsi. E tla ba foldareng ea rona /home/habr/worker.

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

Ha o matha Mosebetsi, ebe ka ho sa feleng e tla theha /home/habr/worker foldareng e nang le lebitso la projeke, e boletsoeng ho master.cfg. 'Me ka har'a foldara e nang le lebitso la morero e tla theha directory haha, ’me o tla tsoela pele ho o etsa sheba. Buka ea ho sebetsa bakeng sa Mosebetsi- mme e tla fetoha directory /home/habr/yourProject/build.

"Golden Key
Mme joale seo ke se ngotseng serapa se fetileng: sengoloa seo Master tla batla ho Mosebetsi- 'me e etsoa ka thōko bukeng ena e ke ke ea etsoa hobane script ha e na tumello ea ho sebetsa. Ho lokisa boemo, o tla hloka senotlolo --umask=0o22, e thibelang ho ngolla bukeng ena, empa e tla boloka litokelo tsa ho qala. Mme ke phetho seo re se hlokang.

BuildMaster и Mosebetsi theha kamano le emong. Ho etsahala hore e robehe le Mosebetsi ho emela nako e itseng bakeng sa karabo e tsoang ho BuildMaster-A. Haeba ho se na karabelo, khokahano e qala hape. Senotlolo --keepalive=60 ho hlokahala feela ho supa nako kamora moo amahanya qala bocha.

5. Tlhophiso. Mohato ka mohato recipe

Moralo BuildMaster e etsoa ka lehlakoreng la mochine moo re phethisang taelo bopa-motsebi. Tabeng ea rona, ena ke directory /home/habr/master. Faele ea tlhophiso master.cfg ha e so be teng, empa taelo ka boeona e se e thehile faele mohlala.cmg. U hloka ho e reha lebitso hape master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Ha re bule ena master.cfg. Mme ha re shebeng hore na e akaretsa eng. Mme kamora moo, ha re leke ho iketsetsa faele ea tlhophiso.

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 — bukantswe ya motheo ya faele ya tlhophiso. E tlameha ho kenngoa faeleng ea tlhophiso. Bakeng sa tšebeliso e bonolo, lebitso la alias le hlahisoa khoutu ea tlhophiso "c". Litlotla linotlolo в c["keyFromDist"] ke lintlha tse tsitsitseng tsa ho sebelisana le BuildMaster. Bakeng sa senotlolo ka seng, ntho e tsamaellanang e nkeloa sebaka e le boleng.

Basebetsi ba 5.2

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

Lekhetlong lena re bontša BuildMaster-y lenane la Mosebetsi-s. Nna ka bonna Mosebetsi re bopile phahameng, e bontšang lebitso la hao-mosebetsi и phasewete. Hona joale li hloka ho hlalosoa ho e-na le hoo mohlala-mosebeletsi и fetisa .

5.3 phetoho_mohloli

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

Ka senotlolo fetola_mohloli dikishinari c re fumana phihlello lethathamong moo re batlang ho beha ntho e khethang polokelo ka khoutu ea mohloli oa morero. Mohlala o sebelisa polokelo ea Git e hlahlojoang ka linako tse itseng.

Khang ea pele ke tsela e eang polokelong ea hau.

workdir e emela tsela e eang foldareng moo lehlakoreng Mosebetsi-e amanang le tsela /home/habr/worker/yourProject/build git e tla boloka mofuta oa sebaka sa polokelo.

lekala e na le lekala le itseng sebakeng sa polokelo le lokelang ho lateloa.

pollInterval e na le palo ea metsotsoana ka mor'a moo BuildMaster e tla khetha sebaka sa polokelo bakeng sa liphetoho.

Ho na le mekhoa e mengata ea ho latela liphetoho sebakeng sa polokelo ea projeke.

Mokhoa o bonolo ka ho fetisisa ke Polling, e leng se bolelang hore BuildMaster nako le nako e khetha seva e nang le polokelo. Haeba iketse e ile ea bontša liphetoho tse sebakeng sa polokelo, ka nako eo BuildMaster e tla theha ntho e ka hare ka tieho e itseng Change 'me u e romele ho mohlokomeli oa ketsahalo Scheduler, e tla qala mehato ea ho aha le ho leka morero ka Mosebetsi-e. Har'a mehato ena ho tla bontšoa update lam polokelo. Ehlile ho MosebetsiSena se tla etsa kopi ea lehae ea polokelo. Lintlha tsa ts'ebetso ena li tla tšohloa ka tlase likarolong tse peli tse latelang. (5.4 и 5.5).

Mokhoa o motle le ho feta oa ho latela liphetoho sebakeng sa polokelo ke ho romella melaetsa ka kotloloho ho tsoa ho seva e e amohelang BuildMaster- mabapi le ho fetola khoutu ea mohloli oa morero. Tabeng ena, hang ha moqapi a etsa iketse, seva e nang le polokelo ea projeke e tla romella molaetsa BuildMaster-y. 'Me eena, o tla e thibela ka ho bōpa ntho PBChangeMohloli. Ka mor'a moo, ntho ena e tla fetisetsoa ho Scheduler, e kenyang mehato ea ho haha ​​morero le ho o leka. Karolo ea bohlokoa ea mokhoa ona e sebetsa le hakisi-server scripts sebakeng sa polokelo. Sengoliloeng hakisi-a, boikarabelo ba ho sebetsa diketso ha iketse-e, o hloka ho letsetsa thuso sendchange mme o hlalose aterese ya netweke BuildMaster-A. U boetse u hloka ho hlakisa sebaka sa marang-rang se tla mamela PBChangeMohloli. PBChangeMohloli, ka tsela, ke karolo BuildMaster-A. Mokhoa ona o tla hloka tumello admin-a ho seva moo polokelo ea morero e leng teng. Pele o tla hloka ho etsa backup ea polokelo.

5.4 bahlophisi


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

bahlophisi - ena ke ntho e sebetsang e le sesosa se qalang letoto lohle la kopano le tlhahlobo ea morero.
Mohlala oa ho kenya ts'ebetsong Continuous Integration ho sebelisa BuildBot

Liphetoho tseo tse tlalehiloeng fetola_mohloli, e fetotsoe ts'ebetsong ea mosebetsi BuildBot-a ho hanyetsa Change 'me joale e mong le e mong Sheduler e ipapisitse le tsona, e theha likopo tsa ho qala ts'ebetso ea ho aha morero. Leha ho le joalo, e boetse e etsa qeto ea hore na likopo tsena li fetisetsoa neng moleng. Ntho sehahi e boloka letoto la likopo le ho latela boemo ba kopano ea hajoale ka thoko Mosebetsi-e. sehahi e teng ka BuildMaster-e le joalo Mosebetsi-e. O romela le BuildMaster-a tsoela pele Mosebetsi-mme e se e ntse e tobile haha - letoto la mehato e lokelang ho latelwa.
Re bona seo mohlaleng oa hona joale joalo bahlophisi Likotoana tse 2 li entsoe. Ho feta moo, e 'ngoe le e' ngoe e na le mofuta oa eona.

SingleBranchScheduler - e 'ngoe ea litlelase tse tsebahalang haholo kemisong. E shebella lekala le le leng 'me e susumetsoa ke phetoho e rekotiloeng ho eona. Ha a bona liphetoho, a ka lieha ho romella kopo ea kaho (ho chechisa nako e boletsoeng paramenteng e khethehileng treeStableTimer). LIEKETSENG lebitso e beha lebitso la kemiso e tla hlahisoa ho BuildBot- sehokelo sa webo. IN FetolaFilter filthara e behiloe, ka mor'a ho feta moo liphetoho lekaleng li susumetsang kemiso ho romela kopo ea kaho. IN sehahiMabitso lebitso le bontshitswe sehahi-a, eo re tla e beha hamorao. Lebitso molemong oa rona le tla tšoana le lebitso la projeke: yourProject.

ForceScheduler ntho e bonolo haholo. Kemiso ea mofuta ona e hlahisoa ke ho tobetsa konopo BuildBot- sehokelo sa webo. Li-parameter li na le moelelo o tšoanang le oa ho SingleBranchScheduler.

PS No. 3. Mohlomong e tla ba molemo
Nako le nako ke kemiso e tsamayang ka nako e itseng. Mohala o shebahala tjena


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 e totobatsa nako ea periodicity ena ka metsotsoana.

HahaFactory e bopa e itseng haha, eo ka nako eo sehahi e romela ho Mosebetsi. The HahaFactory e bontša mehato e lokelang ho lateloa Mosebetsi-y. Mehato e eketsoa ka ho letsetsa mokhoa eketsaStep

Mohato oa pele o ekelitsoeng mohlala ona ke git clean -d -f -f –xjoale ho tsoa ha git. Liketso tsena li kenyelelitsoe ho parameter mokhoa, e sa boleloang ka ho hlaka empa e fana ka maikutlo a boleng ba kamehla e ncha. Paramethara mokhoa='keketso' e bonts'a hore lifaele li tsoa bukeng eo file ea chechout, leha e le sieo polokelong, lula e sa sebetsoa.

Mohato oa bobeli o ekelitsoeng ke ho letsetsa script teko e nang le parameter Lumela lehlakoreng Mosebetsi-a ho tsoa bukeng /home/habr/worker/yourProject/build e nang le phapang ea tikoloho PATHONPATH=... Kahoo, o ka ngola mangolo a hau mme oa a phetha ka lehlakoreng Mosebetsi-a kgato ka nngwe util.ShellCommand. Lingoliloeng tsena li ka beoa ka kotloloho sebakeng sa polokelo. Ebe ho chechout-e ba tla oela ho /home/habr/worker/yourProject/build. Leha ho le joalo, ho na le "li-buts" tse peli:

  1. Mosebetsi e tlameha ho etsoa ka senotlolo --mask e le hore e se ke ea thibela litokelo tsa ho phethahatsa ka mor'a sheba-The.
  2. ka git Push-e ea mangolo ana o hloka ho hlakisa thepa excutablee le hore hamorao chechout-e ha ea ka ea lahleheloa ke tokelo ea ho etsa script ea Git.

5.6 lihahi


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

Mabapi le hore na ke eng sehahi o ile a bolelloa mona. Hona joale ke tla u bolella ka ho qaqileng haholoanyane hore na u ka e bopa joang. BuilderConfig ke sehahi sehahi. Baqapi ba joalo ka c['lihahi'] o ka hlalosa tse 'maloa, kaha lena ke letlapa la lintho sehahi mofuta. Joale ha re ngoleng mohlala hape ho tloha ho BuildBot, ho e tlisa haufi le mosebetsi oa rona.


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

Joale ke tla u bolella ka li-parameter BuilderConfig.

lebitso e hlalosa lebitso sehahi-a. Mona re e rehile yourProject... Sena se bolela hore ho Mosebetsi- tsela ena e tla etsoa /home/habr/worker/yourProject/build. Sheduler batlana le sehahi ka lebitso lena feela.

mabitso a basebetsi e na le lakane Mosebetsi-s. E 'ngoe le e' ngoe ea tsona e tlameha ho eketsoa c['basebetsi'].

fektheri - e khethehileng haha, eo e amanang le eona sehahi. O tla romela ntho eo haha mabapi le Mosebetsi ho phethela mehato eohle e kenyellelitsoeng ho sena haha-The.

6. Mohlala oa tlhophiso ea hau

Mona ke mohlala oa meralo ea projeke eo ke sisintseng ho e sebelisa ka BuildBot
.

Re tla e sebelisa e le sistimi ea taolo ea mofuta svn. Sebaka sa polokelo ka boeona se tla be se le ka har'a mofuta o mong oa leru. Aterese ea leru lena ke ena svn.host/svn/yourProject/trunk. Lerung ka tlase svn ho na le lebitso la mosebelisi la akhaonto: user want-meet.ru, passwd: phasewete. Mengolo e emelang mehato haha-a tla boela a be lekaleng svn, foldareng e fapaneng buildbot/worker_linux. Lingoliloeng tsena li sebakeng sa polokelo le thepa e bolokiloeng phethahala.

BuildMaster и Mosebetsi matha ka moamoheli a le mong morero.moamoheli .BuildMaster e boloka lifaele tsa eona foldareng /home/habr/master. Mosebetsi e bolokoa ka tsela e latelang /home/habr/worker. Mokhoa oa puisano BuildMaster-a le Mosebetsi-a e etsoa ka port 4000 ho latela protocol BuildBot-a, ke hore 'pb' protocol.

Morero oa morero o ngotsoe ka ho feletseng ka Python. Mosebetsi ke ho latela liphetoho tsa eona, ho theha faele e ka phethisoang, ho hlahisa litokomane, le ho etsa liteko. Haeba ho hloleha, bahlahisi bohle ba hloka ho romella molaetsa ka lengolo-tsoibila ho bolela hore ho na le ketso e sa atleheng.

Pontšo ea webo BuildBot re tla hokela ho port 80 bakeng sa morero.moamoheli. Ha ho hlokahale ho kenya Apatch. E le karolo ea laebrari sothehileng ho se ho na le sebatli sa webo, BuildBot e sebelisa.

Ho boloka litaba tsa ka hare bakeng sa BuildBot re tla sebelisa sqlite.

Ho hlokahala motho ea amohelang mangolo smtp.your.domain - e lumella ho romella mangolo ho tsoa mangolong [imeile e sirelelitsoe] ntle le netefatso. Hape ho moamoheli 'smtp ' Metsotso e ntse e utloahala posong ea 1025.

Ho na le batho ba babeli ba amehang ts'ebetsong: admin и user want-meet.ru. tsamaiso BuildBot. mosebelisi ke motho ea etsang qeto iketse-s.

Faele e ka khonehang e etsoa ka pyinstaller. Litokomane li etsoa ka oksijene.

Bakeng sa meralo ena ke ngotse sena: 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"
}

Pele u hloka ho theha BuildMaster-a le Mosebetsi-a. Ebe u beha faele ena master.cfg в /home/habr/master.

Mohato o latelang ke ho qala tšebeletso BuildMasteraa


sudo buildbot start /home/habr/master

Ebe u qala tšebeletso Mosebetsi-a


buildbot-worker start /home/habr/worker

E lokile! Jwale Buildbot e tla latela liphetoho le ho qala iketse-y ho svn, ho etsa mehato ea ho haha ​​le ho lekola morero ka meaho e kaholimo.

Ka tlase ke tla hlalosa likarolo tse ling tsa tse ka holimo master.cfg.

6.1 Tseleng e eang ho monga hao.cfg


Ha ke ntse ke ngola ea ka master.cfg Ho tla etsoa liphoso tse ngata, kahoo ho tla hlokahala ho bala faele ea log. E bolokoa joalo ka BuildMaster-ec tsela e phethahetseng /home/habr/master/twistd.log, le ka lehlakoreng Mosebetsi-a e nang le tsela e phethahetseng /home/habr/worker/twistd.log. Ha u ntse u bala phoso le ho e lokisa, u tla hloka ho qala tšebeletso hape BuildMaster-a. Mona ke kamoo e etsoang kateng:


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

6.2 Ho sebetsa le 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)

Pele, a re hlahlobeng svn_poller. Sena e ntse e le sebopeho se ts'oanang, ho khetha sebaka sa polokelo khafetsa hang ka motsotso. Boemong bona svn_poller e kena feela lekaleng kutu. Parameter e makatsang split_file=util.svn.split_file_alwaystrunk e beha melao: mokhoa oa ho senya sebopeho sa foldara svn makaleng. O boetse o ba fa litsela tse lekanyelitsoeng. Ka nako ea eona split_file_kamehla e nolofatsa ts'ebetso ka ho re polokelo e na le feela kutu.

В Bahlophisi bontšitsoe FetolaFilterya bonang None mme e amahanya lekala le yona kutu ho latela mokhatlo o fanoeng ka split_file_kamehla. Ho arabela liphetoho ho kutu, E qala sehahi ka lebitso yourProject.

thepa mona hoa hlokahala e le hore admin e fumane manane a poso a liphetho tsa kaho le liteko joalo ka mong'a ts'ebetso.

Mohato haha-a sheba e khona ho hlakola lifaele life kapa life tse fumanehang mofuteng oa lehae oa polokelo Mosebetsi-A. Ebe u etsa ka botlalo ntlafatso ea svn. Mokhoa o hlophisitsoe ka parameter mokgwa=tletse, mokhoa=mocha. Paramethara haltOnTailure e re haeba ntlafatso ea svn e tla etsoa ka phoso, joale ts'ebetso eohle ea ho haha ​​​​le teko e lokela ho emisoa, kaha liketso tse ling ha li utloahale.

6.3 Lengolo le eang ho uena: baqolotsi ba litaba ba lumeletsoe ho phatlalatsa


batlalehi ke tshebeletso ya ho romela ditsebiso ka imeile.


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]

A ka romela melaetsa mekhoa e fapaneng.

MailNotifier e sebelisa lengolo-tsoibila ho romella litsebiso.

template_html e seta thempleite ea mongolo bakeng sa koranta. HTML e sebelisoa ho etsa markup. E fetotsoe ke enjene jinja2 (e ka bapisoa le django). BuildBot e na le mefuta e mengata eo boleng ba eona bo kenngoang template nakong ea ho hlahisa mongolo oa molaetsa. Mefuta ena e kenyelelitsoe ka har'a {{ li-curly braces tse habeli }}. Ka mohlala, kgutsufatso e bontsha boemo ba diketso tse phethiloeng, ke ho re, katleho kapa ho hloleha. A diporojeke tla hlahisa yourProject. Kahoo, ho sebelisa litaelo tsa taolo ho jinja2, mefuta-futa BuildBot-a le lisebelisoa tsa ho fomata likhoele tsa python, o ka etsa molaetsa o rutang haholo.

MailNotifier e na le mabaka a latelang.

fromaddr – aterese eo ho eona bohle ba tla amohela koranta.

sendToInterestedUsers= 'Nete e romela molaetsa ho mong'a lona le mosebelisi ea entseng iketse.

sheba holimo — sehlomathiso se tlamehang ho ekeletswa mabitsong a basebedisi ba amohelang koranta. Kahoo admin kamoo mosebedisi a tla amohela lengolo la litaba atereseng [imeile e sirelelitsoe].

relayhost e totobatsa lebitso la moamoheli leo seva e buloang ho lona smtp, e leng smptPort e hlalosa nomoro ea boema-kepe e mamelang smtp seva.

mokgwa="temoso" e re poso e lokela ho etsoa feela haeba bonyane ho na le mohato o le mong haha-a, e qeteletseng ka ho hloleha ha maemo kapa tlhokomediso. Tabeng ea katleho, ha ho hlokahale hore u romele lengolo la litaba.

extraRecipients e na le lethathamo la batho bao lengolo le lokelang ho romelloa ho bona ho phaella ho mong'a lona le motho ea entseng lengolo la iketse.

molaetsaFormatter ke ntho e hlalosang sebopeho sa molaetsa, thempleite ea eona, le sete ea mefuta e fumanehang ho tsoa ho jinja2. Dikgetho tse kang wantProperties=Nnete и wantSteps=Nnete hlalosa sehlopha sena sa mefuta e fumanehang.

le['litšebeletso']=[sendMessageToAll] e fana ka lethathamo la litšebeletso, tseo har'a tsona e tla ba tsa rona moqolotsi oa litaba.

Re e entse! Kea leboha

Re iketselitse tlhophiso ea rona mme ra bona ts'ebetso eo e khonang ho e etsa. BuildBot. Sena, ke nahana, se lekane ho utloisisa hore na sesebelisoa sena sea hlokahala ho theha morero oa hau. Na ua mo thahasella? Na e tla ba molemo ho uena? Na o phutholohile ho sebetsa le eena? Joale ha ke ngole sehlooho sena lefeela.

Le ho feta. Ke kopa batho ba litsebi ba sebelise BuildBot, ea pharalla, libuka tsa litaelo tsa fetoleloa, ’me ho ne ho e-na le mehlala e mengata le ho feta.

Ke leboha bohle ka tlhokomelo ea hau. Mahlohonolo.

Source: www.habr.com

Eketsa ka tlhaloso