Chitsanzo chokhazikitsa Continuous Integration pogwiritsa ntchito BuildBot

Chitsanzo chokhazikitsa Continuous Integration pogwiritsa ntchito BuildBot
(Chithunzi ndi Kompyuta kuchokera Pixabay)

Привет!

Dzina langa ndi Evgeniy Cherkin, Ndine wopanga mapulogalamu pagulu lachitukuko pakampani yamigodi Zambiri.

Mukayamba ntchito yayikulu iliyonse, mumayamba kuganiza kuti: "Ndi pulogalamu yanji yomwe ili yabwino kugwiritsa ntchito kuti igwiritsidwe ntchito?" Pulojekiti ya IT imadutsa magawo angapo isanatulutse mtundu wotsatira. Ndi bwino pamene unyolo wa magawo awa ndi wodzichitira. Njira yodzipangira yokha yotulutsa mtundu watsopano wa projekiti ya IT yokha imatchedwa Kugwirizana Mogwirizana. BuildBot adakhala wothandizira wabwino kwa ife pokwaniritsa ndondomekoyi.

M'nkhaniyi ndinaganiza zopereka mwachidule zomwe zingatheke BuildBot. Kodi pulogalamuyo imatha kuchita chiyani? Momwe mungayandikire naye komanso momwe mungapangire Ubale wabwinobwino wogwira ntchito naye? Mutha kugwiritsa ntchito zomwe takumana nazo nokha popanga ntchito yogwirira ntchito yomanga ndikuyesa polojekiti yanu pamakina anu.

Zamkatimu

Zamkatimu

1. Chifukwa chiyani BuildBot?
2. Lingaliro lotsogozedwa ndi BuildMaster
3. Kuyika
4. Njira zoyamba

5. Kusintha. Chinsinsi cha pang'onopang'ono

5.1 BuildmasterConfig
Antchito a 5.2
5.3 kusintha_gwero
5.4 akatswiri

5.5 BuildFactory
5.6 omanga

6. Chitsanzo cha kasinthidwe kanu

6.1 Panjira yopita kwa mbuye wako.cfg
6.2 Kugwira ntchito ndi svn
6.3 Kalata kwa inu: Atolankhani ndi ololedwa kulengeza

Tinachita! Zabwino zonse

1. Chifukwa chiyani BuildBot?

M'mbuyomu pa habr-e ndidapeza zolemba zokhudzana ndi kukhazikitsa Kugwirizana Mogwirizana kugwiritsa ntchito BuildBot. Mwachitsanzo, Ic Ndinapeza kuti ndizophunzitsa kwambiri. Pali chitsanzo china - zosavuta. Nkhanizi zikhoza kukongoletsedwa chitsanzo kuchokera m'mabukundi izo pambuyo pake, mu Chingerezi. Coupe imapanga poyambira bwino. Pambuyo powerenga nkhanizi, nthawi yomweyo mudzafuna chinachake BuildBot kuchita.

Imani! Kodi alipo amene adagwiritsapo ntchito pama projekiti awo? Zikukhalira inde ambiri anaigwiritsa ntchito pa ntchito zawo. Angapezeke zitsanzo ntchito BuildBot ndi mu Google code archives.

Ndiye logic yomwe anthu amagwiritsa ntchito ndi yotani Buildbot? Kupatula apo, pali zida zina: CruiseControl и Jenkins. Ndiyankha motere. Kwa ntchito zambiri Jenkins ndipo Choonadi chidzakhala chokwanira. M'malo mwake, BuildBot - zosinthika kwambiri, pomwe mavuto amathetsedwa pamenepo monga momwe zilili Jenkins. Chisankho ndi chanu. Koma popeza tikuyang'ana chida cha polojekiti yomwe ikutukuka, bwanji osasankha imodzi yomwe ingalole, kuyambira pamasitepe osavuta, kuti tipeze dongosolo lomanga lomwe liri ndi mgwirizano komanso mawonekedwe apadera.

Kwa iwo omwe polojekiti yawo yalembedwa mu python, funso likubwera: "Bwanji osasankha njira yophatikizira yomwe ili ndi mawonekedwe omveka bwino malinga ndi chinenero chomwe chimagwiritsidwa ntchito mu polojekitiyi?" Ndipo tsopano ndi nthawi yoti muwonetse zopindulitsa BuildBot.

Choncho, "instrumental quartet" yathu. Kwa ine ndekha, ndazindikira zinthu zinayi BuildBot:

  1. Ndi dongosolo lotseguka pansi pa layisensi ya GPL
  2. Uku ndiko kugwiritsa ntchito python ngati chida chokonzekera komanso kufotokozera zofunikira
  3. Uwu ndi mwayi wolandira yankho kuchokera pamakina omwe msonkhanowo umachitika
  4. Izi ndi, potsiriza, zofunika zochepa kwa Wolandira. Kutumiza kumafuna python ndi zopotoka, ndipo sikufuna makina enieni ndi java.

2. Lingaliro lotsogozedwa ndi BuildMaster

Chitsanzo chokhazikitsa Continuous Integration pogwiritsa ntchito BuildBot

Pakatikati pa zomangamanga zogawa ntchito ndi BuildMaster. Ndi ntchito yomwe:

  • amalondola kusintha kwa mtengo woyambira polojekiti
  • kutumiza malamulo omwe ayenera kuchitidwa ndi Wogwira ntchito kuti amange polojekiti ndikuyesa
  • amadziwitsa ogwiritsa za zotsatira za zomwe achita

BuildMaster yopangidwa ndi fayilo master.cfg. Fayiloyi ili muzu BuildMaster. Kenako ndikuwonetsa momwe muzuwu umapangidwira. Fayilo yokha master.cfg ili ndi python script yomwe imagwiritsa ntchito mafoni BuildBot.

Chotsatira chofunikira kwambiri BuildBot ali ndi dzina Wogwira ntchito. Utumikiwu ukhoza kukhazikitsidwa pa wolandira wina wokhala ndi OS yosiyana, kapena mwinamwake komweko BuildMaster. Itha kukhalanso m'malo okonzekera mwapadera omwe ali ndi paketi yakeyake komanso zosinthika. Malo awa amatha kukonzedwa pogwiritsa ntchito zida za python monga virtualv, vv.

BuildMaster amalamula aliyense Wogwira ntchito-y, ndipo iye, nayenso, amawakwaniritsa. Ndiko kuti, zikuwoneka kuti njira yomanga ndi kuyesa polojekiti ikhoza kupitilira Wogwira ntchito-e kuthamanga Windows ndi pa Wogwira ntchito wina yemwe akuyendetsa Linux.

Onani ma code source source amapezeka pa chilichonse Wogwira ntchito-e.

3. Kuyika

Kotero, tiyeni tizipita. Ndikhala ndikugwiritsa ntchito Ubuntu 18.04 monga woyang'anira. Ndiyikapo imodzi BuildMaster-a ndi chimodzi Wogwira ntchito-a. Koma choyamba muyenera kukhazikitsa python3.7:

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

Kwa iwo omwe amafunikira python3.7.2 m'malo mwa 3.7.1, mutha kuchita izi:


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

Chotsatira ndikuyika Tweeted и BuildBot, komanso mapaketi omwe amakulolani kugwiritsa ntchito zina zowonjezera 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. Njira zoyamba

Nthawi yolenga BuildMaster. Zikhala mufoda yathu /home/habr/master.

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

Gawo lotsatira. Tiyeni tipange Wogwira ntchito. Zikhala mufoda yathu /home/habr/worker.

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

Mukathamanga Wogwira ntchito, ndiye mwachisawawa idzapanga mkati /home/habr/worker foda yokhala ndi dzina la polojekiti, yomwe yafotokozedwa mu master.cfg. Ndipo mufoda yomwe ili ndi dzina la polojekitiyo idzapanga chikwatu kumanga, ndipo adzapitiriza kuchita Onani. Chikwatu chogwirira ntchito cha Wogwira ntchito-ndipo idzakhala chikwatu /home/habr/yourProject/build.

"Golden Key
Ndipo tsopano zomwe ndidalemba ndime yapitayi: script yomwe Master adzafuna kuchokera Wogwira ntchito-ndipo zachitika patali mu bukhuli sizichitika chifukwa script ilibe zilolezo zoyendetsa. Kuti mukonze vutoli, mufunika kiyi --umask=0o22, zomwe zimaletsa kulemba ku bukhuli, koma zidzasunga ufulu woyambitsa. Ndipo ndizo zonse zomwe tikusowa.

BuildMaster и Wogwira ntchito kukhazikitsa mgwirizano wina ndi mzake. Zimachitika kuti zimatuluka ndipo Wogwira ntchito kudikirira nthawi kuti ayankhe kuchokera BuildMaster-A. Ngati palibe yankho, kulumikizana kumayambiranso. Chinsinsi --keepalive=60 zimangofunika kusonyeza nthawi pambuyo pake kugwirizana kuyambiranso.

5. Kusintha. Chinsinsi cha pang'onopang'ono

Kukhazikika BuildMaster ikuchitika pambali pa makina omwe tidapereka lamulo kupanga-mbuye. Kwa ife, ichi ndi chikwatu /home/habr/master. Fayilo yosintha master.cfg kulibe, koma lamulo lokha lapanga kale fayilo chitsanzo.cmg. Muyenera kuyipatsanso dzina master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Tiyeni titsegule iyi master.cfg. Ndipo tiyeni tiwone chomwe chimaphatikizapo. Ndipo zitatha izi, tiyeni tiyese kupanga fayilo yathu yosinthira.

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 - dikishonale yofunikira ya fayilo yosinthira. Iyenera kuphatikizidwa mufayilo yosinthira. Kuti mugwiritse ntchito mosavuta, alias imayambitsidwa mu code yosinthira "c". Maina audindo of key в c["keyFromDist"] ndi zinthu zokhazikika zolumikizirana nazo BuildMaster. Pa kiyi iliyonse, chinthu chofananira chimalowetsedwa ngati mtengo.

Antchito a 5.2

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

Nthawi ino tikuwonetsa BuildMaster-y mndandanda wa Wogwira ntchito-s. Inemwini Wogwira ntchito tinalenga apamwamba, kusonyeza dzina lanu-wantchito и achinsinsi. Tsopano akuyenera kufotokozedwa m'malo mwake chitsanzo-wantchito и pochitika .

5.3 kusintha_gwero

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

Ndi kiyi kusintha_gwero dikishonale c timapeza mwayi pamndandanda womwe tikufuna kuyika chinthu chomwe chimasankha malo okhala ndi magwero a polojekiti. Chitsanzo chimagwiritsa ntchito chosungira cha Git chomwe chimasankhidwa pakapita nthawi.

Mtsutso woyamba ndi njira yopita kunkhokwe yanu.

workdir imayimira njira yopita ku chikwatu komwe kumbali Wogwira ntchito- wachibale wa njira /home/habr/worker/yourProject/build git idzasunga mtundu wakomweko wankhokwe.

nthambi lili ndi nthambi inayake munkhokwe yomwe iyenera kutsatiridwa.

pollInterval ili ndi chiwerengero cha masekondi pambuyo pake BuildMaster adzavotera nkhokwe kuti zisinthe.

Pali njira zingapo zowonera kusintha kwa nkhokwe ya polojekiti.

Njira yosavuta ndiyo Kusankhidwa, zomwe zikutanthauza kuti BuildMaster nthawi ndi nthawi amasankha seva yokhala ndi posungira. Ngati chitani adawonetsa kusintha kwa malo osungira, ndiye BuildMaster adzapanga chinthu chamkati ndikuchedwa Change ndi kutumiza kwa wosamalira zochitika Scheduler, yomwe idzayambitse njira zomanga ndi kuyesa polojekitiyi Wogwira ntchito-e. Zina mwa njirazi zidzawonetsedwa pomwe posungira. Ndendende Wogwira ntchitoIzi zipanga kopi yakomweko yankhokwe. Tsatanetsatane wa ndondomekoyi idzafotokozedwa pansipa m'magawo awiri otsatirawa. (5.4 и 5.5).

Njira yowoneka bwino kwambiri yotsatirira zosintha kunkhokwe ndikutumiza mauthenga mwachindunji kuchokera pa seva yomwe ikuwatsogolera BuildMaster- za kusintha ma code source source. Pankhaniyi, atangopanga mapulogalamu chitani, seva yomwe ili ndi malo osungira polojekiti idzatumiza uthenga BuildMaster-y. Ndipo nayenso adzachitsekereza polenga chinthu PBChangeSource. Kenako, chinthu ichi chidzasamutsidwa ku Scheduler, yomwe imayendetsa njira zopangira polojekiti ndikuyesa. Mbali yofunika kwambiri ya njirayi ikugwira ntchito mbedza-zolemba za seva mu repository. Mu script mbedza-a, udindo wokonza zochita pamene chitani-e, muyenera kuyimbira foni kutumiza kusintha ndipo tchulani adilesi ya netiweki BuildMaster-A. Muyeneranso kutchula doko la netiweki lomwe lidzamvera PBChangeSource. PBChangeSource, mwa njira, ndi gawo BuildMaster-A. Njirayi idzafuna chilolezo boma-a pa seva pomwe malo osungira polojekiti ali. Choyamba muyenera kupanga zosunga zobwezeretsera.

5.4 akatswiri


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

okonza mapulani - ichi ndi chinthu chomwe chimakhala ngati choyambitsa chomwe chimayambira mndandanda wonse wa msonkhano ndi kuyesa polojekitiyi.
Chitsanzo chokhazikitsa Continuous Integration pogwiritsa ntchito BuildBot

Zosintha zomwe zidalembedwa kusintha_gwero, kusinthidwa pogwira ntchito BuildBot-a kutsutsa Change ndipo tsopano aliyense Sheduler kutengera iwo, imamanga zopempha kuti ayambe ntchito yomanga. Komabe, imatsimikiziranso kuti zopemphazi zitumizidwa liti pamzere. Chinthu womanga amasunga mndandanda wa zopempha ndikuyang'anira mkhalidwe wa msonkhano womwe ulipo padera Wogwira ntchito-ndi. womanga alipo pa BuildMaster-e ndi ku Wogwira ntchito-e. Amatumiza ndi BuildMaster-a pa Wogwira ntchito-ndipo kale zachindunji kumanga - njira zingapo zomwe ziyenera kutsatiridwa.
Tikuwona kuti mu chitsanzo chamakono chotero okonza mapulani 2 zidutswa zimapangidwa. Komanso, aliyense ali ndi mtundu wake.

SingleBranchScheduler - imodzi mwamakalasi odziwika kwambiri pandandanda. Imayang'ana nthambi imodzi ndipo imayambitsidwa ndi kusintha komwe kunalembedwa. Akawona kusintha, akhoza kuchedwa kutumiza pempho la kumanga (kuchepetsa nthawi yomwe yatchulidwa mu parameter yapadera treeStableTimer) AT dzina imakhazikitsa dzina la ndandanda yomwe iwonetsedwa BuildBot- mawonekedwe a intaneti. MU ChangeFilter fyuluta imayikidwa, ikadutsa zomwe kusintha kwa nthambi kumapangitsa kuti dongosolo litumize pempho la zomangamanga. MU builderNames dzina lasonyezedwa womanga-a, zomwe tiyika patsogolo pang'ono. Dzina lathu lidzakhala lofanana ndi dzina la polojekiti: yourProject.

ForceScheduler chinthu chophweka kwambiri. Ndondomeko yamtunduwu imayambitsidwa ndi kudina kwa mbewa BuildBot- mawonekedwe a intaneti. Ma parameters ali ndi tanthauzo lofanana ndi in SingleBranchScheduler.

PS nambala 3. Mwina zidzathandiza
Nthawi ndi nthawi ndi ndondomeko yomwe imayenda pa nthawi yokhazikika. Kuitana kumawoneka chonchi


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 imatchula nthawi ya periodicity iyi mumasekondi.

BuildFactory amalenga yeniyeni kumanga, zomwe ndiye womanga amatumiza ku Wogwira ntchito. The BuildFactory imasonyeza njira zomwe ziyenera kutsatiridwa Wogwira ntchito-y. Masitepe amawonjezedwa poyimba njira addStep

Chinthu choyamba chowonjezera mu chitsanzo ichi ndi git clean -d -f -f -xndiye Kutuluka kwa git. Zochita izi zikuphatikizidwa mu parameter njira, zomwe sizinatchulidwe momveka bwino koma zikutanthawuza mtengo wokhazikika mwatsopano. Parameter mode='owonjezera' zikuwonetsa kuti mafayilo akuchokera ku chikwatu komwe chechout, pamene akusowa m'nkhokwe, khalanibe osakhudzidwa.

Gawo lachiwiri lowonjezera ndikuyitana script mayesero ndi parameter Moni kumbali Wogwira ntchito-a kuchokera ku directory /home/habr/worker/yourProject/build ndi kusintha kwa chilengedwe PATHONPATH=... Chifukwa chake, mutha kulemba zolemba zanu ndikuzipanga pambali Wogwira ntchito-a sitepe iliyonse util.ShellCommand. Zolemba izi zitha kuyikidwa mwachindunji munkhokwe. Ndiye pa chechout-e adzagwa mu /home/habr/worker/yourProject/build. Komabe, pali awiri "buts":

  1. Wogwira ntchito iyenera kupangidwa ndi kiyi --umask kotero kuti sichilepheretsa ufulu wophedwa pambuyo pake Onani-The.
  2. pa git kukankha-e mwa zolembedwazi muyenera kufotokoza katunduyo chothekakuti pambuyo pake chechout-e sanataye ufulu wochita script ya Git.

5.6 omanga


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

Za chiyani womanga anauzidwa apa. Tsopano ndikuwuzani mwatsatanetsatane momwe mungapangire. BuilderConfig ndi womanga womanga. Okonza oterowo mu c['builders'] mukhoza kufotokoza zingapo, popeza ili ndi pepala la zinthu womanga mtundu. Tsopano tiyeni tilembenso chitsanzo kuchokera BuildBot, kuzibweretsa pafupi ndi ntchito yathu.


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

Tsopano ndikuwuzani za magawo BuilderConfig.

dzina limatchula dzina womanga-a. Apa tidachitcha dzina yourProject... Izi zikutanthauza kuti pa Wogwira ntchito- njira iyi idzapangidwa /home/habr/worker/yourProject/build. Sheduler kuyang'ana womanga mwa dzina ili basi.

mayina antchito lili ndi pepala Wogwira ntchito-s. Chilichonse chomwe chiyenera kuwonjezeredwa c['ogwira ntchito'].

fakitale - zenizeni kumanga, zomwe zimagwirizana nazo womanga. Adzatumiza chinthucho kumanga pa Wogwira ntchito kuti amalize masitepe onse omwe akuphatikizidwa mu izi kumanga-The.

6. Chitsanzo cha kasinthidwe kanu

Nachi chitsanzo cha kamangidwe ka projekiti yomwe ndikufuna kuti ndigwiritse ntchito BuildBot
.

Tidzagwiritsa ntchito ngati dongosolo lowongolera svn. Chosungiracho chokha chidzakhala mumtundu wina wamtambo. Nayi adilesi ya mtambowu svn.host/svn/yourProject/trunk. Mumtambo pansi svn pali lolowera muakaunti: wosuta, passwd: achinsinsi. Zolemba zomwe zikuyimira masitepe kumanga-a adzakhalanso munthambi svn, mu chikwatu chosiyana buildbot/worker_linux. Zolemba izi zili munkhokwe ndi katundu wosungidwa zotheka.

BuildMaster и Wogwira ntchito thamanga pa wolandira yemweyo project.host .BuildMaster imasunga mafayilo ake mufoda /home/habr/master. Wogwira ntchito imasungidwa munjira yotsatirayi /home/habr/worker. Njira yolumikizirana BuildMaster-a ndi Wogwira ntchito-a imachitika kudzera pa doko 4000 molingana ndi protocol BuildBot-a, ndi 'pb' protocol.

Cholinga cha polojekitiyi chinalembedwa mu Python. Ntchito ndikutsata zosintha zake, kupanga fayilo yomwe ingathe kuchitika, kupanga zolemba, ndikuyesa kuyesa. Zikalephera, opanga onse ayenera kutumiza uthenga kudzera pa imelo wonena kuti palibe chomwe sichikuyenda bwino.

Chiwonetsero cha intaneti BuildBot tidzalumikiza ku port 80 kwa project.host. Sikoyenera kukhazikitsa Apatch. Monga gawo la laibulale Zopotoka pali kale seva yapaintaneti, BuildBot amachigwiritsa ntchito.

Kusunga zambiri zamkati za BuildBot tidzagwiritsa ntchito sqlite.

Wolandira alendo amafunikira potumiza smtp.your.domain - imalola kutumiza makalata kuchokera pamakalata [imelo ndiotetezedwa] popanda kutsimikizika. Komanso pa host 'smtp ' Mphindi zikumveka pa positi 1025.

Pali anthu awiri omwe akukhudzidwa ndi ntchitoyi: boma и wosuta. amayendetsa BuildBot. wogwiritsa ntchito ndi munthu amene akuchita chitani-s.

Fayilo yokhazikika imapangidwa ndi pyinstaller. Zolemba zimapangidwa kudzera mpweya.

Kwa zomangamanga izi ndinalemba izi: 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"
}

Choyamba muyenera pangani BuildMaster-a ndi Wogwira ntchito-a. Kenako muime fayiloyi master.cfg в /home/habr/master.

Chotsatira ndikuyambitsa ntchito BuildMastera


sudo buildbot start /home/habr/master

Kenako yambani utumiki Wogwira ntchito-a


buildbot-worker start /home/habr/worker

Okonzeka! Tsopano Buildbot idzatsata zosintha ndikuyambitsa chitani-y inu svn, kuchita masitepe omanga ndi kuyesa ntchito ndi zomangamanga pamwambapa.

M'munsimu ine kufotokoza zina za pamwamba master.cfg.

6.1 Panjira yopita kwa mbuye wako.cfg


Ndikulemba zanga master.cfg Zolakwa zambiri zidzapangidwa, kotero kuwerenga fayilo ya chipika kudzafunika. Imasungidwa ngati BuildMaster-ec mtheradi njira /home/habr/master/twistd.log, ndi pambali Wogwira ntchito-a ndi njira yotheratu /home/habr/worker/twistd.log. Mukamawerenga zolakwika ndikuzikonza, muyenera kuyambitsanso ntchitoyo BuildMaster-a. Umu ndi momwe zimachitikira:


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

6.2 Kugwira ntchito ndi 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)

Choyamba, tiyeni tione svn_poller. Izi zikadali mawonekedwe omwewo, kuvotera malo osungira nthawi zonse kamodzi pa mphindi imodzi. Pamenepa svn_poller amangofikira kunthambi thunthu. Zodabwitsa parameter split_file=util.svn.split_file_alwaystrunk imakhazikitsa malamulo: momwe mungaswere chikwatu svn pa nthambi. Amawapatsanso njira zofananira. M'malo mwake split_file_nthawi zonse imathandizira njirayo ponena kuti chosungira chili ndi thunthu.

В Okonza anasonyeza ChangeFilteramene amawona palibe ndikugwirizanitsa nthambi ndi izo thunthu molingana ndi mgwirizano womwe wapatsidwa kudzera split_file_nthawi zonse. Kuyankha pazosintha mu thunthu, Anayambitsa womanga ndi dzina yourProject.

Katundu apa pakufunika kuti woyang'anira alandire mndandanda wamakalata wamapangidwe ndi zotsatira zoyesa ngati eni ake a ndondomekoyi.

Khwerero kumanga-a Onani wokhoza kufufutiratu mafayilo aliwonse omwe ali mumtundu wamba wankhokwe Wogwira ntchito-A. Ndiyeno chitani zonse svn zosintha. Njirayi imapangidwa kudzera pa parameter mode=zodzaza, njira=mwatsopano. Parameter HaltOnTailure akuti ngati svn zosintha adzaphedwa ndi cholakwika, ndiye kuti ntchito yonse yomanga ndi kuyesa iyenera kuyimitsidwa, popeza zochita zina sizimveka.

6.3 Kalata kwa inu: Atolankhani ndi ololedwa kulengeza


atolankhani ndi ntchito yotumiza zidziwitso ndi imelo.


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]

Amatha kutumiza mauthenga njira zosiyanasiyana.

MailNotifier amagwiritsa ntchito imelo kutumiza zidziwitso.

template_html imakhazikitsa template ya zolemba zamakalata. HTML imagwiritsidwa ntchito kupanga zolembera. Imasinthidwa ndi injini jinja2 (akhoza kufananizidwa ndi django). BuildBot ali ndi mitundu yosiyanasiyana yomwe mfundo zake zimasinthidwa kukhala template panthawi yopanga uthenga. Zosinthazi zatsekeredwa mu {{ zingwe zopotana pawiri }}. Mwachitsanzo, Chidule amawonetsa momwe ntchitoyo yamalizidwira, ndiye kuti, kupambana kapena kulephera. A ntchito zidzatulutsa yourProject. Kenako, pogwiritsa ntchito control control jinja2, zosintha BuildBot-a ndi zida zopangira zingwe za python, mutha kupanga uthenga wodziwa zambiri.

MailNotifier lili ndi mfundo zotsatirazi.

kuchokeraadr - adilesi yomwe aliyense alandire kalatayo.

sendToInterestedUsers=Zowona zimatumiza uthenga kwa eni ake ndi wogwiritsa ntchito amene adapanga chitani.

Yang'anani - chowonjezera chomwe chiyenera kuwonjezeredwa ku mayina a ogwiritsa ntchito omwe akulandira kalatayo. Choncho boma momwe wogwiritsa ntchito angalandire kalatayo pa adilesi [imelo ndiotetezedwa].

relayhost imatchula dzina la alendo pomwe seva imatsegulidwa smtp, ndi smptPort imatchula nambala yadoko yomwe imamvetsera smtp seva.

mode="chenjezo" akuti kutumiza kumayenera kuchitika kokha ngati pali sitepe imodzi kumanga-a, zomwe zinatha ndi kulephera kwa udindo kapena chenjezo. Pankhani yopambana, palibe chifukwa chotumizira kalata yamakalata.

extraRecipients lili ndi mndandanda wa anthu amene makalata ayenera kutumizidwa kuwonjezera kwa mwini wake ndi munthu amene anachita chitani.

uthengaFormatter ndi chinthu chomwe chimafotokoza mtundu wa uthenga, template yake, ndi gulu la zosinthika zomwe zilipo jinja2. Zosankha monga wantProperties=Zowona и wantSteps=Zowona fotokozani gulu ili la zosinthika zomwe zilipo.

ndi['services']=[sendMessageToAll] imapereka mndandanda wa mautumiki, omwe athu adzakhala mtolankhani.

Tinachita! Zabwino zonse

Tinapanga masinthidwe athu ndikuwona magwiridwe antchito omwe amatha. BuildBot. Izi, ndikuganiza, ndizokwanira kumvetsetsa ngati chida ichi chikufunika kuti mupange polojekiti yanu. Kodi mumamukonda? Kodi zingakhale zothandiza kwa inu? Kodi ali womasuka kugwira naye ntchito? Ndiye sindikulemba nkhaniyi pachabe.

Ndipo kupitirira. Ndikufuna gulu la akatswiri ogwiritsa ntchito BuildBot, anakula, mabuku olembedwa amamasuliridwa, ndipo panalinso zitsanzo zambiri.

Zikomo nonse chifukwa cha chidwi chanu. Zabwino zonse.

Source: www.habr.com

Kuwonjezera ndemanga