Tusaalaha fulinta Is-dhexgalka Joogtada ah iyadoo la isticmaalayo BuildBot

Tusaalaha fulinta Is-dhexgalka Joogtada ah iyadoo la isticmaalayo BuildBot
(Sawirka waxaa leh Computerizer ka pixabay)

Hello!

Magacaygu waa Evgeniy Cherkin, Waxaan ahay barnaamij-sameeyaha kooxda horumarinta ee shirkadda macdanta Polymetal.

Markaad bilaabayso mashruuc kasta oo weyn, waxaad bilaabaysaa inaad ka fikirto: "Waa maxay software ugu fiican in la isticmaalo si loo ilaaliyo?" Mashruuc IT-gu wuxuu maraa dhowr marxaladood ka hor inta aan la sii deyn nooca xiga. Way fiicantahay marka silsiladda marxaladahan ay si toos ah u socoto. Habka iswada ee soo daynta nooc cusub ee mashruuca IT laftiisa ayaa la yiraahdaa Isdhexgalka joogtada ah. BuildBot waxa noo soo baxday in uu noo noqday kaaliye wanaagsan xaga fulinta hawshan.

Maqaalkan waxaan go'aansaday in aan dulmar ku sameeyo fursadaha BuildBot. Waa maxay software-kani awood u leeyahay? Sida loo wajaho isaga iyo sida loo dhiso xidhiidh shaqo oo wax ku ool ah oo caadi ah isaga? Adiga ayaa khibradeena codsan kara adiga oo abuuraya adeeg shaqo oo lagu dhisayo oo ku tijaabinayo mashruucaaga mashiinkaaga.

Tusmo

Tusmo

1. Waa maxay sababta BuildBot?
2. Fikrad uu hogaaminayo BuildMaster
3. Rakibaadda
4. Tallaabooyinka ugu horreeya

5. Habaynta. Talaabo talaabo

5.1 BuildmasterConfig
Shaqaalaha 5.2
5.3 beddelka isha
5.4 jadwaleeyayaasha

5.5 BuildFactory
5.6 dhisme

6. Tusaalaha qaabeyntaada

6.1 Jidka sayidkaaga.cfg
6.2 La shaqaynta svn
6.3 Warqad ku socota: wariyeyaasha waxaa loo oggolaaday inay shaaciyaan

Waanu samaynay! Hambalyo

1. Waa maxay sababta BuildBot?

Markii hore habr-e waxaan la kulmay maqaallo ku saabsan hirgelinta Isdhexgalka joogtada ah isticmaalka BuildBot. Tusaale, Midkan Waxa aan u helay xogta ugu badan. Waxaa jira tusaale kale - ka fudud. Maqaalladan waa la dhadhamin karaa tusaale ahaan buug-gacmeedkaiyo waxaa intaa ka dib, Ingiriisi. Coupe-ku wuxuu sameeyaa bar bilow wanaagsan. Markaad akhrido maqaalladan, waxay u badan tahay inaad isla markiiba wax u rabto BuildBot in la sameeyo.

Jooji! Ma jiraa qof dhab ahaantii u adeegsaday mashruucyadooda? Waxay soo baxday haa badan ku dabaqeen hawlahooda. Waa la heli karaa tusaalayaal kudhow BuildBot iyo kaydka code Google.

Haddaba waa maxay caqligalka dadka isticmaalaya Buildbot? Ka dib oo dhan, waxaa jira qalab kale: CruiseControl и Jenkins. Waxaan kaga jawaabi doonaa sidan. Inta badan hawlaha Jenkins runtuna waa ku filnaan doontaa. Markeeda, BuildBot - la qabsi badan, halka dhibaatooyinka halkaas lagu xaliyo si fudud sida in Jenkins. Doorashada adigaa iska leh. Laakiin maadaama aan raadineyno qalab loogu talagalay horumarinta mashruuca bartilmaameedka ah, sababta aan u dooran mid u oggolaanaya, laga bilaabo tallaabooyinka fudud, si loo helo nidaam dhismo oo leh is-dhexgal iyo is-dhexgal gaar ah.

Kuwa mashruuca bartilmaameedkoodu ku qoran yahay Python, su'aashu waxay soo baxaysaa: "Maxaa diidaya in la doorto nidaamka isdhexgalka kaas oo leh interface cad marka loo eego luqadda loo isticmaalo mashruuca?" Oo hadda waa waqtigii la soo bandhigi lahaa faa'iidooyinka BuildBot.

Markaa, “quartet-ka agabkayaga”. Naftayda, waxaan aqoonsaday afar sifo BuildBot:

  1. Waa qaab-dhismeedka isha furan ee hoos yimaada shatiga GPL
  2. Tani waa isticmaalka Python sida qalab qaabeynta iyo sharaxaadda ficilada loo baahan yahay
  3. Tani waa fursad lagu helo jawaabta mishiinka uu shirku ku dhacayo
  4. Kuwani waa, ugu dambeyntii, shuruudaha ugu yar ee martigeliyaha. Hawlgelintu waxay u baahan tahay python iyo qalloocan, uma baahna mishiin dalwad ah iyo mashiinka java.

2. Fikrad uu hogaaminayo BuildMaster

Tusaalaha fulinta Is-dhexgalka Joogtada ah iyadoo la isticmaalayo BuildBot

Waxa udub dhexaad u ah qaab dhismeedka qaybinta hawsha BuildMaster. Waa adeeg:

  • raad raac isbeddelka geedka isha mashruuca
  • diraa amarrada ay tahay in ay fuliyaan adeegga Shaqaalaha si loo dhiso mashruuca oo loo tijaabiyo
  • ogeysiin isticmaalayaasha ku saabsan natiijooyinka ficillada la qaaday

BuildMaster lagu habeeyey iyada oo loo marayo faylka sayid.cfg. Faylkan xididka ayuu ku jiraa BuildMaster. Ka dib waxaan tusi doonaa sida xididkan loo abuuray. Faylka laftiisa sayid.cfg waxaa ku jira qoraal python ah oo isticmaala wicitaanada BuildBot.

Xiga shayga ugu muhiimsan BuildBot magac leh Shaqaalaha. Adeegan waxaa lagu bilaabi karaa martigeliyaha kale oo leh OS ka duwan, ama laga yaabee mid meesha BuildMaster. Waxa kale oo ay ku jiri kartaa jawi macmal ah oo si gaar ah loo diyaariyey oo leh baakado iyo doorsoomayaal u gaar ah. Deegaannadan casriga ah waxaa lagu diyaarin karaa iyadoo la isticmaalayo python utilities sida virtualenv, venv.

BuildMaster waxay u baahisaa amarada qof walba Shaqaalaha-y, isna, isna, oofiyo. Taasi waa, waxay soo baxday in habka dhismaha iyo tijaabinta mashruuca uu socon karo Shaqaalaha-e ku shaqeeya Windows iyo Shaqaale kale oo ku shaqeeya Linux.

Baadhid koodhadhka isha mashruuca ayaa ku dhaca mid kasta Shaqaalaha-e.

3. Rakibaadda

Markaa, aan tagno. Waxaan u isticmaali doonaa Ubuntu 18.04 martigeliyaha ahaan. Mid baan dul dhigayaa BuildMaster-a iyo mid Shaqaalaha-a. Laakiin marka hore waxaad u baahan tahay inaad ku rakibto Python3.7:

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

Kuwa u baahan python3.7.2 halkii ay ka ahaan lahaayeen 3.7.1, waxaad samayn kartaa kuwan soo socda:


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

Tallaabada xigta waa in la rakibo Twitter-ka и BuildBot, iyo sidoo kale baakado kuu ogolaanaya inaad isticmaasho shaqeyn dheeraad ah 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. Tallaabooyinka ugu horreeya

Waqti la abuuro BuildMaster. Waxay ku jiri doontaa galkeena /home/habr/master.

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

Talaabada xigta. Aan abuurno Shaqaalaha. Waxay ku jiri doontaa galkeena /guri/habr/shaqaale.

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

Markaad ordo Shaqaalaha, ka dibna by default waxay ku abuuri doontaa gudaha /guri/habr/shaqaale folder leh magaca mashruuca, kaas oo ku qeexan sayid.cfg. Iyo galka magaca mashruuca wuxuu abuuri doonaa hage dhiso, waana sii wadi doonaa inuu sameeyo baadhid. Hagaha shaqada ee Shaqaalaha- oo waxay noqon doontaa hage-tusaha /home/habr/Mashruucaada/dhisidda.

"Furaha Dahabiga ah
Oo hadda waxa aan u qoray cutubkii hore: qoraal in Master-ka ka dalban doona Shaqaalaha-oo meel fog laga sameeyo hagahan lama fulin doono sababtoo ah qoraalku ma haysto ogolaansho uu ku shaqeeyo. Si loo saxo xaalada, waxaad u baahan doontaa fure --umask=0o22, kaas oo mamnuucaya in wax loo qoro hagahan, laakiin waxa uu hayn doonaa xuquuqaha bilaabista. Taasina waa waxa kaliya ee aan u baahanahay.

BuildMaster и Shaqaalaha xidhiidh la samaysto midba midka kale. Waxay dhacdaa in ay jabto iyo Shaqaalaha in muddo ah laga sugayo jawaabta BuildMaster-A. Haddii aysan jirin jawaab, xiriirku dib ayaa loo bilaabay. Furaha --keepalive=60 kaliya loo baahan yahay si loo tilmaamo waqtiga ka dib xirmaan reboots

5. Habaynta. Talaabo talaabo

Qaabeynta BuildMaster waxaa lagu fuliyaa dhinaca mashiinka meesha aan ku fulinay amarka abuur-master. Xaaladeena, tani waa buug hage /home/habr/master. Faylka qaabaynta sayid.cfg weli ma jiro, laakiin amarka laftiisa ayaa horey u abuuray faylka sayid.cmg.tusaale. Waxaad u baahan tahay inaad dib u magacowdo sayid.cfg. muunad в sayid.cfg

mv master.cfg.sample master.cfg

Midkan aan furno sayid.cfg. Oo aan eegno waxa uu ka kooban yahay. Taas ka dib, aan isku dayno inaan samayno faylka qaabeynta noo gaar ah.

sayid.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 - qaamuuska aasaasiga ah ee faylka qaabeynta. Waa in lagu daraa faylka qaabeynta. Si loo fududeeyo isticmaalka, naanaysi ayaa lagu soo bandhigay koodhka qaabeynta "c". Cinwaanada furayaasha в c["keyFromDist"] waa xubno go'an oo la falgalka BuildMaster. Fure kasta, shayga u dhigma waxa loo beddelaa qiime ahaan.

Shaqaalaha 5.2

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

Markan waxaan tilmaamaynaa BuildMaster-y liiska Shaqaalaha-s. nafteyda Shaqaalaha waan abuurnay sare, oo tilmaamaya adiga-shaqaale-magacaaga и password. Hadda waxay u baahan yihiin in la cayimo tusaale-shaqaale и idlaan .

5.3 beddelka isha

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

By furaha bedel_source qaamuuska c waxaan helnaa liiska halka aan rabno inaan ku dhejino shay codeynaya kaydka oo wata koodka isha mashruuca. Tusaaluhu wuxuu isticmaalaa kaydka Git kaas oo la codeeyay waqtiyo gaar ah.

Doodda koowaad waa waddada loo maro kaydkaaga.

workdir waxay ka dhigan tahay dariiqa loo maro galka meesha ay ku taal Shaqaalaha- qaraabo jidka /home/habr/worker/YourProject/build git waxa uu kaydin doonaa nooca maxaliga ah ee kaydka

laanta waxay ka kooban tahay laan gaar ah oo ku taal kaydka oo ay tahay in la raaco.

intervalka ka kooban yahay tirada ilbiriqsi ka dib BuildMaster waxay ra'yi ururin doontaa kaydka isbeddelada.

Waxaa jira dhowr siyaabood oo lagula socon karo isbeddelada ku yimaada kaydka mashruuca.

Habka ugu fudud ayaa ah Xulashada, taas oo macnaheedu yahay BuildMaster si xilliyo ah u codeeya serverka oo leh kaydka. Hadii gasho ka tarjumaysa isbeddelada ku dhacay kaydka, ka dib BuildMaster waxay abuuri doontaa shay gudaha ah oo leh xoogaa dib u dhac ah Change una soo dir maamulaha dhacdada Jadwalka, kaas oo bilaabi doona tallaabooyinka lagu dhisayo laguna tijaabinayo mashruuca Shaqaalaha-e. Waxaa ka mid ah tillaabooyinkan lagu tilmaami doono update kayd. Si sax ah u daaran ShaqaalahaTani waxay abuuri doontaa nuqul maxalli ah oo kaydka ah. Faahfaahinta habkan ayaa lagu dabooli doonaa hoos labada qaybood ee soo socda. (5.4 и 5.5).

Habka xitaa ka sii qurux badan ee raadraaca isbeddelada kaydka ayaa ah in si toos ah farriimaha looga soo diro server-ka martigelinaya BuildMaster- ku saabsan beddelka codes isha mashruuca. Xaaladdan oo kale, isla marka horumariyuhu sameeyo gasho, server-ka leh kaydka mashruuca ayaa soo diri doona fariin BuildMaster-y. Isaguna, isna, wuxuu dhexgeli doonaa isaga oo abuuraya shay PBCHangeSource. Marka xigta, shaygan ayaa loo wareejin doonaa Jadwalka, kaas oo dhaqaajiya tillaabooyinka lagu dhisayo mashruuca iyo tijaabinta. Qayb muhiim ah oo ka mid ah habkan ayaa la shaqeynaya jillaab- Qoraallada server-ka ee kaydka. In qoraalka jillaab-a, mas'uul ka ah habaynta tallaabooyinka marka gasho-e, waxaad u baahan tahay inaad wacdo utility diridda oo sheeg ciwaanka shabakada BuildMaster-A. Waxaad sidoo kale u baahan tahay inaad qeexdo dekedda shabakadda ee dhegaysan doonta PBCHangeSource. PBCHangeSource, jidka, waa qayb BuildMaster-A. Habkani wuxuu u baahan doonaa ogolaansho admin-a on server-ka halkaas oo kaydka mashruuca ku yaal. Waxaad marka hore u baahan doontaa inaad kaydiso kaydka

5.4 jadwaleeyayaasha


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

jadwalka - Tani waa curiye u dhaqma sidii kiciyeyaasha oo bilaabaya dhammaan silsiladda isku-ururinta iyo tijaabinta mashruuca.
Tusaalaha fulinta Is-dhexgalka Joogtada ah iyadoo la isticmaalayo BuildBot

Isbadaladaas oo la duubay bedel_source, oo lagu beddelay habka shaqada BuildBot-in la diido Change iyo hadda mid kasta Sheduler iyaga oo ka duulaya, waxay dhistaa codsiyada lagu bilaabayo habka dhismaha mashruuca. Si kastaba ha ahaatee, waxay sidoo kale go'aamineysaa marka codsiyadan lagu sii wareejiyo safka. Shay dhise wuxuu kaydiyaa safka codsiyada wuxuuna la socdaa xaalada golaha hadda jira gooni gooni ah Shaqaalaha-Waa. dhise jira on BuildMaster-e iyo Shaqaalaha-e. Wuu soo diraa BuildMaster- ku Shaqaalaha- oo horeba u gaar ah dhiso - tallaabooyin taxane ah oo ay tahay in la raaco.
Waxaan aragnaa in tusaalaha hadda jira sida jadwalka 2 qaybood ayaa la abuuray. Waxaa intaa dheer, mid kastaa wuxuu leeyahay nooc u gaar ah.

Jadwalka Laanta Keliya - mid ka mid ah fasalada ugu caansan ee jadwalka. Waxay daawataa hal laan waxaana ka dhashay isbeddel la duubay oo ku dhacay. Marka uu arko isbeddelada, wuu daahi karaa dirida codsiga dhismaha (dib u dhigida muddada lagu cayimay halbeegga gaarka ah treeStableTimer) AT magaca dejinaya magaca jadwalka lagu soo bandhigi doono BuildBot- interface web. IN Beddel Filter shaandhada ayaa la dejiyaa, ka dib marka la dhaafo isbeddelada laanta ayaa soo jeedinaya jadwalka si loo soo diro codsiga dhismaha. IN Magacyada wax dhisaha magaca ayaa lagu tilmaamay dhise-a, kaas oo aan dejin doono wax yar ka dib. Magaca kiiskayagu wuxuu la mid noqonayaa magaca mashruuca: Mashruucaaga.

Jadwalka Ciidanka wax aad u fudud. Jadwalka noocaan ah waxaa kiciyay jiirka oo gujinaya BuildBot- interface web. Halbeegyadu waxay leeyihiin nuxur la mid ah kuwa ku jira Jadwalka Laanta Keliya.

PS No. 3. Waxaa laga yaabaa inay ku iman doonto anfaca
Wakhtiga waa jadwal ku shaqeeya waqti go'an oo soo noqnoqda. Wicitaanku wuxuu u eg yahay sidan


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 waxa uu ku qeexayaa wakhtiga xilliyeedkan ilbidhiqsiyo gudahood.

BuildFactory abuurtaa gaar ah dhiso, kaas oo markaa dhise u dira Shaqaalaha. The BuildFactory tilmaamaya tillaabooyinka la qaadi doono Shaqaalaha-y. Tallaabooyinka waxaa lagu daraa adigoo wacaya habka ku dar tillaabo

Tallaabada ugu horreysa ee lagu daray tusaalahan waa git nadiif ah -d -f -f –xmarkaa git lacag bixinta. Ficiladan waxay ku jiraan cabbirka habka, Kaas oo aan si cad loo sheegin balse tilmaamaya qiime aan caadi ahayn cusub. Halbeegga qaabka='kordhinta' waxay tilmaamaysaa in faylalku ay ka yimaadeen hagaha meesha chechout, inta ka maqan kaydka, weli lama taaban.

Talaabada labaad ee lagu daray waa wacida qoraalka maxkamad oo leh halbeeg hello dhinaca Shaqaalaha- a ka tusaha /home/habr/worker/YourProject/build oo leh doorsoome deegaan PATHONPATH=... Haddaba, waxaad qori kartaa qoraalladaada oo aad dhinac ka fulin kartaa Shaqaalaha-tallaabo kasta util.ShellCommand. Qoraalladan waxaa si toos ah loogu dhejin karaa kaydka. Ka dibna at chechout-e way ku dhici doonaan /home/habr/worker/YourProject/build. Si kastaba ha ahaatee, waxaa jira laba "laakin":

  1. Shaqaalaha waa in lagu abuuraa fure --mask si aysan u hor istaagin xuquuqda fulinta ka dib baadhid-The.
  2. at riixid-e qoraalladan waxaad u baahan tahay inaad qeexdo hantida gardarro ahsi hadhow chechout-e ma lumin xuquuqdii lagu fulin lahaa qoraalka Git.

5.6 dhisme


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

Ku saabsan waxa dhise ayaa loo sheegay halkan. Hadda waxaan si faahfaahsan kuugu sheegi doonaa sida loo abuuro. BuilderConfig waa dhisme dhise. Nashqadayaasha noocan oo kale ah ayaa ku jira c[' dhisayaasha'] Waxaad cayimi kartaa dhowr, maadaama tani ay tahay xaashi walxeed dhise nooca. Hadda aan dib u qorno tusaalaha laga bilaabo BuildBot, soona dhaweeya hawsheenna.


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

Hadda waxaan kuu sheegi doonaa xuduudaha BuilderConfig.

magaca sheeg magaca dhise-a. Halkan ayaan ugu magac daray Mashruucaaga... Tani waxay ka dhigan tahay in ShaqaalahaJidkaan qudhiisa ayaa la abuuri doonaa /home/habr/worker/YourProject/build. Sheduler raadinaya dhise kaliya magacan.

magacyada shaqaalaha ka kooban xaashi Shaqaalaha-s. Mid kasta oo ka mid ah waa in lagu daraa c['shaqaale'].

warshad - gaar ah dhiso, oo ay ku xidhan tahay dhise. Wuu soo diri doonaa shayga dhiso on Shaqaalaha si loo dhammaystiro dhammaan tallaabooyinka ku jira tan dhiso-The.

6. Tusaalaha qaabeyntaada

Waa kan tusaalaha naqshadaha mashruuca ee aan soo jeedinayo in la hirgeliyo BuildBot
.

Waxaan u isticmaali doonaa sidii nidaamka xakamaynta version svn. Kaydka laftiisa waxa uu ku yaalaa nooc ka mid ah daruuraha. Waa kan ciwaanka daruurtan svn.host/svn/YourProject/trunk. Daruuraha hoose svn waxaa jira akoonka isticmaale: user, passwd: password. Qoraallada matala tallaabooyinka dhiso-a sidoo kale waxay ku jiri doontaa laanta svn, gal gaar ah buildbot/shaqaale_linux. Qoraalladani waxay ku yaalaan kaydka hantida la keydiyay fulin kara.

BuildMaster и Shaqaalaha ku orda isla martigaliyaha mashruuca.martigeliyaha .BuildMaster waxay ku kaydisaa faylalkeeda gal /home/habr/master. Shaqaalaha waxa lagu kaydiyaa dariiqa soo socda /guri/habr/shaqaale. Habka isgaarsiinta BuildMaster-a iyo Shaqaalaha-a waxaa lagu fuliyaa iyada oo loo marayo dekedda 4000 sida uu qabo borotokoolka BuildBot-a, waa 'pb' borotokoolka.

Mashruuca bartilmaameedku wuxuu ku qoran yahay gabi ahaanba Python. Hawshu waa in la raadraaco isbeddelladeeda, abuurto fayl la fulin karo, soo saarista dukumeenti, iyo samaynta imtixaan. Haddii ay dhacdo guuldarro, dhammaan horumariyeyaashu waxay u baahan yihiin inay farriin ku soo diraan iimaylka iyagoo sheegaya inay jirto tallaabo aan guulaysan.

Bandhig shabakadeed BuildBot waxaan ku xidhi doonaa dekedda 80 waayo mashruuca.martigeliyaha. Looma baahna in la rakibo Apatch. Sida qayb ka mid ah maktabadda qaloocin waxaa hore u jiray server web, BuildBot isticmaala.

Si loo kaydiyo macluumaadka gudaha BuildBot ем использовать sqlite.

Martigeliyaha ayaa looga baahan yahay boostada smtp. domainkaaga - waxay ogolaataa in waraaqaha laga soo diro boostada [emailka waa la ilaaliyay] aqoonsi la'aan. Sidoo kale martigeliyaha 'SMTP ' Daqiiqadaha waxaa laga maqlay boostada 1025.

Waxaa jira laba qof oo ku lug leh hawsha: admin и user. maamula BuildBot. isticmaaluhu waa qofka wax samaynaya gasho-s.

Fayl aan macquul ahayn ayaa la soo saaray pyinstaller. Dukumentiyada waxaa lagu sameeyaa iyada oo loo marayo doxygen.

Dhismahan waxaan u qoray tan: sayid.cfg:

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

Marka hore waxaad u baahan tahay si loo abuuro BuildMaster-a iyo Shaqaalaha-a. Kadibna dheji faylkan sayid.cfg в /home/habr/master.

Tallaabada xigta waa in la bilaabo adeegga BuildMaster-a


sudo buildbot start /home/habr/master

Markaa bilow adeegga Shaqaalaha-a


buildbot-worker start /home/habr/worker

Diyaar! Hadda Buildbot waxay la socon doontaa isbeddelada iyo kicinta gasho- in svn, fulinta tillaabooyinka dhismaha iyo tijaabinta mashruuca dhismaha sare.

Hoos waxaan ku tilmaami doonaa qaar ka mid ah sifooyinka kor ku xusan sayid.cfg.

6.1 Jidka sayidkaaga.cfg


Inta aan qorayo sayid.cfg Khaladaad badan ayaa la samayn doonaa, markaa akhrinta faylka log ayaa loo baahan doonaa. Waxa loo kaydiyaa sidii BuildMaster-ec waddo buuxda /home/habr/master/twistd.log, iyo dhinaca Shaqaalaha- a leh waddo buuxda /home/habr/worker/twistd.log. Markaad akhrido qaladka oo aad hagaajiso, waxaad u baahan doontaa inaad dib u bilowdo adeegga BuildMaster-a. Waa kan sida loo sameeyo:


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

6.2 La shaqaynta 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)

Marka hore, aan eegno svn_poller. Kani wali waa isla interface-kii, si joogto ah u codaynta kaydka hal mar. Kiiskan svn_poller laanta gala kaliya jirridda. Halbeegga dahsoon split_file=util.svn.split_file_alwaysstrunk dejiyaa xeerarka: sida loo jebiyo qaab dhismeedka gal svn laamaha. Waxa kale oo uu iyaga siinayaa wadooyin qaraabo ah. Markeeda split_file_had iyo jeer ku dhufo fududeeyaa habka isagoo leh in kaydka kaliya ka kooban yahay jirridda.

В Jadwalka tilmaamay Beddel Filteryaa arka None oo laan la xiriiriyo jirridda sida uu sheegay urur la siiyey iyada oo loo marayo split_file_had iyo jeer ku dhufo. Ka jawaabista isbeddelada ku jira jirridda, bilaabay dhise magac leh Mashruucaaga.

guryaha halkan waxaa loo baahan yahay si maamulku u helo liisaska boostada ee dhismaha iyo natiijooyinka imtixaanada mulkiilaha habka.

Talaabada dhiso-a baadhid awood u leh inuu gabi ahaanba tirtiro faylal kasta oo ku yaal nooca maxaliga ah ee kaydka Shaqaalaha-A. Ka dibna si buuxda u samee cusbooneysiinta svn. Habka waxaa lagu habeeyey iyada oo loo marayo cabbirka hab=buuxa, habka=cusub. Halbeegga haltOnTailure sheegay in haddii cusbooneysiinta svn waxaa lagu fulin doonaa qalad, ka dibna dhammaan geeddi-socodka dhismaha iyo tijaabinta waa in la hakiyaa, maadaama ficillada kale aysan macno samaynayn.

6.3 Warqad ku socota: wariyeyaasha waxaa loo oggolaaday inay shaaciyaan


suxufiyiinta waa adeeg loogu diro ogeysiisyada email ahaan.


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]

Wuxuu diri karaa fariimo siyaabo kala duwan.

MailNotifier waxay isticmaashaa iimaylka si ay u soo dirto ogeysiisyada.

template_html u dejiyaa qaabka qoraalka ee warsidaha. HTML waxaa loo isticmaalaa in lagu sameeyo calaamad. Waxaa wax ka beddelay mishiinka jinja2 (waxaa lala barbar dhigi karaa django). BuildBot waxay leedahay doorsoomayaal kuwaas oo qiyamkooda lagu beddelay qaab-dhismeedka inta lagu jiro habka soo saarista qoraalka farriinta. Doorsoomayaashan waxay kuxiran yihiin {{labada laablaaban ee laablaaban}}. Tusaale ahaan, oo kooban wuxuu soo bandhigaa heerka hawlgallada la dhammaystiray, taas oo ah, guul ama guuldarro. A mashaariic soo saari doona Mashruucaaga. Marka, adoo isticmaalaya amarrada xakamaynta gudaha jinja2doorsoomayaal BuildBot-a iyo string string Tool formatting tools, waxaad samayn kartaa fariin wargelin ah.

MailNotifier ka kooban yahay doodaha soo socda.

fromaddr - ciwaanka uu qof walba ka heli doono warsidaha.

U dirToInterest Users=Runtu waxay fariin u dirtaa mulkiilaha iyo adeegsadaha sameeyay gasho.

raadinta - dabagelis ay tahay in lagu daro magacyada isticmaalayaasha helaya warsidaha. Markaa admin sida isticmaaluhu u heli doono warsidaha ciwaanka [emailka waa la ilaaliyay].

relayhost wuxuu qeexayaa magaca martida loo yahay ee server-ka lagu furay SMTP, a smptPort sheeg lambarka dekedda ee dhegeysanaya SMTP server.

qaabka = "digniin" ayaa sheegaya in boostada la sameeyo kaliya haddii ay jirto ugu yaraan hal tallaabo dhiso-a, kaas oo ku dhamaaday xaalad guul darro ama digniin. Xaaladda guusha, looma baahna in la diro warside.

qaatayaasha dheeraadka ah waxaa ku jira liiska dadka loo dirayo boostada marka lagu daro mulkiilaha iyo qofka fuliyay gasho.

FarriintaQabanqaabiyaha waa shay qeexaya qaabka fariinta, template-keeda, iyo doorsoomayaasha laga heli karo jinja2. Ikhtiyaarada sida wantProperties=Run и wantSteps=Run qeex qaybtan doorsoomayaasha la heli karo.

leh['adeegyada']=[dirMessageToAll] wuxuu bixiyaa liiska adeegyada, oo ay ka mid yihiin kuwayada reporter.

Waanu samaynay! Hambalyo

Waxaan abuurnay qaabeyntayada oo waxaan aragnay shaqeynta ay awood u leedahay. BuildBot. Tani, waxaan u maleynayaa, inay ku filan tahay in la fahmo in qalabkan loo baahan yahay si loo abuuro mashruucaaga. Ma xiisaynaysaa isaga? Ma ku anfici doontaa? Miyuu ku qanacsan yahay inuu la shaqeeyo? Markaa maqaalkan uma qorayo si aan micne lahayn.

Iyo dheeraad ah. Waxaan jeclaan lahaa in bulshada xirfadleyda ah ay isticmaalaan BuildBot, noqday mid ballaadhan, buug-gacmeedyo ayaa la turjumay, oo waxaa jiray tusaaleyaal ka sii badan.

Waad ku mahadsantihiin dhammaantiin dareenkaaga. Nasiib wacan.

Source: www.habr.com

Add a comment