Mfano wa kutekeleza Ujumuishaji Unaoendelea kwa kutumia BuildBot

Mfano wa kutekeleza Ujumuishaji Unaoendelea kwa kutumia BuildBot
(Picha na Kompyuta kutoka Pixabay)

Hi!

Jina langu ni Evgeniy Cherkin, Mimi ni mtayarishaji programu katika timu ya maendeleo katika kampuni ya uchimbaji madini Polymetal.

Unapoanzisha mradi wowote mkubwa, unaanza kufikiria: "Ni programu gani ni bora kutumia ili kuitunza?" Mradi wa TEHAMA hupitia hatua kadhaa kabla ya kutoa toleo linalofuata. Ni vizuri wakati mlolongo wa hatua hizi umejiendesha. Mchakato wa kiotomatiki wa kutoa toleo jipya la mradi wa IT yenyewe unaitwa Ushirikiano unaoendelea. BuildBot aligeuka kuwa msaidizi mzuri kwetu katika kutekeleza mchakato huu.

Katika makala hii niliamua kutoa muhtasari wa uwezekano BuildBot. Je, programu hii inaweza kufanya nini? Jinsi ya kumkaribia na jinsi ya kujenga UHUSIANO WA KAZI UNAOFANYA pamoja naye? Unaweza kutumia uzoefu wetu mwenyewe kwa kuunda huduma ya kufanya kazi ya kujenga na kujaribu mradi wako kwenye mashine yako.

yaliyomo

yaliyomo

1. Kwa nini BuildBot?
2. Dhana inayoongozwa na BuildMaster
3. Ufungaji
4. Hatua za kwanza

5. Usanidi. Mapishi ya hatua kwa hatua

5.1 BuildmasterConfig
wafanyakazi 5.2
5.3 Chanzo_cha_cha mabadiliko
5.4 wapanga ratiba

5.5 Kiwanda cha Kujenga
5.6 wajenzi

6. Mfano wa usanidi wako mwenyewe

6.1 Njiani kuelekea kwa bwana wako.cfg
6.2 Kufanya kazi na svn
6.3 Barua kwako: wanahabari wameidhinishwa kutangaza

Tulifanya! Hongera sana

1. Kwa nini BuildBot?

Hapo awali kwenye habr-e nilikutana na makala kuhusu utekelezaji Ushirikiano unaoendelea kutumia BuildBot. Kwa mfano, Huyu Nimeona ni taarifa zaidi. Kuna mfano mwingine - rahisi zaidi. Nakala hizi zinaweza kuongezwa mfano kutoka kwa mwongozoNa hii baada ya hapo, kwa Kiingereza. Coupe hufanya mahali pazuri pa kuanzia. Baada ya kusoma nakala hizi, labda utataka kitu mara moja BuildBot fanya.

Acha! Kuna mtu yeyote ameitumia katika miradi yao? Inageuka ndiyo nyingi waliitumia katika majukumu yao. Inaweza kupatikana mifano kutumia BuildBot na katika kumbukumbu za msimbo wa Google.

Kwa hivyo ni nini mantiki ya watu kutumia Buildbot? Baada ya yote, kuna zana zingine: Udhibiti wa Cruise и Jenkins. Nitajibu hivi. Kwa kazi nyingi Jenkins na ukweli utatosha. Kwa upande wake, BuildBot - inabadilika zaidi, wakati shida zinatatuliwa hapo kwa urahisi kama ilivyo Jenkins. Chaguo ni lako. Lakini kwa kuwa tunatafuta zana kwa ajili ya mradi unaoendelezwa, kwa nini usichague moja ambayo itaruhusu, kuanzia hatua rahisi, kupata mfumo wa kujenga ambao una mwingiliano na kiolesura cha kipekee.

Kwa wale ambao mradi unaolengwa umeandikwa kwa chatu, swali linatokea: "Kwa nini usichague mfumo wa ujumuishaji ambao una kiolesura wazi kulingana na lugha inayotumika katika mradi?" Na sasa ni wakati wa kuwasilisha faida BuildBot.

Kwa hiyo, "quartet yetu ya ala". Kwa nafsi yangu, nimebainisha vipengele vinne BuildBot:

  1. Ni mfumo wa chanzo huria chini ya leseni ya GPL
  2. Haya ni matumizi ya python kama zana ya usanidi na maelezo ya vitendo vinavyohitajika
  3. Hii ni fursa ya kupokea majibu kutoka kwa mashine ambayo mkusanyiko unafanyika
  4. Haya ni, hatimaye, mahitaji ya chini kwa Mwenyeji. Usambazaji unahitaji chatu na kusokota, na hauhitaji mashine pepe na mashine ya java.

2. Dhana inayoongozwa na BuildMaster

Mfano wa kutekeleza Ujumuishaji Unaoendelea kwa kutumia BuildBot

Kati ya usanifu wa usambazaji wa kazi ni MjenziMwalimu. Ni huduma ambayo:

  • anaendelea kufuatilia mabadiliko ya mti chanzo cha mradi
  • hutuma amri ambazo zinapaswa kutekelezwa na huduma ya Mfanyakazi ili kujenga mradi na kuujaribu
  • inaarifu watumiaji kuhusu matokeo ya hatua zilizochukuliwa

MjenziMwalimu imeundwa kupitia faili bwana.cfg. Faili hii iko kwenye mzizi MjenziMwalimu. Baadaye nitaonyesha jinsi mzizi huu umeundwa. Faili yenyewe bwana.cfg ina hati ya python inayotumia simu BuildBot.

Kitu kinachofuata muhimu zaidi BuildBot ina jina Mfanyakazi. Huduma hii inaweza kuzinduliwa kwa mwenyeji mwingine na OS tofauti, au labda kwenye moja ambapo MjenziMwalimu. Inaweza pia kuwepo katika mazingira ya mtandaoni yaliyotayarishwa maalum na vifurushi vyake na vigezo. Mazingira haya ya kawaida yanaweza kutayarishwa kwa kutumia huduma za python kama virtualenv, v.

MjenziMwalimu matangazo ya amri kwa kila mtu Mfanyakazi-y, na yeye, kwa upande wake, hutimiza. Hiyo ni, zinageuka kuwa mchakato wa kujenga na kupima mradi unaweza kuendelea Mfanyakazi-e kuendesha Windows na kwa Mfanyakazi mwingine anayeendesha Linux.

Angalia misimbo ya chanzo cha mradi hutokea kwa kila moja Mfanyakazi-e.

3. Ufungaji

Kwa hiyo, twende. Nitakuwa nikitumia Ubuntu 18.04 kama mwenyeji. Nitaweka moja juu yake MjenziMwalimu-a na moja Mfanyakazi-a. Lakini kwanza unahitaji kusanikisha python3.7:

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

Kwa wale wanaohitaji python3.7.2 badala ya 3.7.1, unaweza kufanya yafuatayo:


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

Hatua inayofuata ni kufunga Iliyotumwa kwenye Twitter и BuildBot, pamoja na vifurushi vinavyokuwezesha kutumia utendaji wa ziada 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. Hatua za kwanza

Wakati wa kuunda MjenziMwalimu. Itakuwa kwenye folda yetu /nyumbani/habr/bwana.

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

Hatua ifuatayo. Hebu tuunde Mfanyakazi. Itakuwa kwenye folda yetu /nyumbani/habr/mfanyakazi.

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

Unapokimbia Mfanyakazi, basi kwa chaguo-msingi itaunda ndani /nyumbani/habr/mfanyakazi folda iliyo na jina la mradi, ambayo imeainishwa ndani bwana.cfg. Na katika folda yenye jina la mradi itaunda saraka kujenga, na itaendelea kuifanya Checkout. Saraka ya kufanya kazi kwa Mfanyakazi-na itakuwa saraka /home/habr/yourProject/build.

"Ufunguo wa dhahabu
Na sasa kile nilichoandika aya iliyotangulia: hati hiyo Mwalimu itadai kutoka Mfanyakazi-na kufanywa kwa mbali katika saraka hii haitatekelezwa kwa sababu hati haina ruhusa ya kuendeshwa. Ili kurekebisha hali hiyo, utahitaji ufunguo --umask=0o22, ambayo inakataza kuandika kwa saraka hii, lakini itahifadhi haki za uzinduzi. Na hiyo ndiyo tu tunayohitaji.

MjenziMwalimu и Mfanyakazi kuanzisha uhusiano na kila mmoja. Inatokea kwamba huvunja na Mfanyakazi kusubiri kwa muda jibu kutoka MjenziMwalimu-A. Ikiwa hakuna jibu, muunganisho unaanza tena. Ufunguo --keeplive=60 inahitajika tu kuashiria wakati baada ya hapo kuungana huwasha upya.

5. Usanidi. Mapishi ya hatua kwa hatua

Usanidi MjenziMwalimu inafanywa kwa upande wa mashine ambapo tulitekeleza amri tengeneza bwana. Kwa upande wetu, hii ni saraka /nyumbani/habr/bwana. Faili ya usanidi bwana.cfg haipo bado, lakini amri yenyewe tayari imeunda faili sampuli.ya.cmg. Unahitaji kuiita jina jipya sampuli.cfg в bwana.cfg

mv master.cfg.sample master.cfg

Hebu tufungue hii bwana.cfg. Na hebu tuangalie ni nini kinajumuisha. Na baada ya hayo, hebu tujaribu kutengeneza faili yetu ya usanidi.

bwana.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 — Kamusi ya msingi ya faili ya usanidi. Lazima iingizwe kwenye faili ya usanidi. Kwa urahisi wa matumizi, jina la pak huletwa katika msimbo wa usanidi "c". Majina funguo в c["keyFromDist"] ni vipengele fasta kwa ajili ya mwingiliano na MjenziMwalimu. Kwa kila ufunguo, kitu kinacholingana kinabadilishwa kama thamani.

wafanyakazi 5.2

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

Wakati huu tunaonyesha MjenziMwalimu-y orodha ya Mfanyakazi-s. Mimi mwenyewe Mfanyakazi tuliumba juu ya, ikionyesha wewe-mfanyakazi-jina и nywila. Sasa wanahitaji kubainishwa badala yake mfano-mfanyakazi и kupita .

5.3 Chanzo_cha_cha mabadiliko

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

Kwa ufunguo badilisha_chanzo kamusi c tunapata ufikiaji wa orodha ambapo tunataka kuweka kitu ambacho huchagulia hazina na msimbo wa chanzo wa mradi. Mfano hutumia hazina ya Git ambayo hupigwa kura kwa vipindi fulani.

Hoja ya kwanza ni njia ya hazina yako.

mfanyakazi inawakilisha njia ya folda ambapo upande Mfanyakazi-a jamaa na njia /home/habr/worker/yourProject/build git itahifadhi toleo la ndani la hazina.

tawi ina tawi maalum katika hazina ambayo inapaswa kufuatwa.

muda wa kura ina idadi ya sekunde baada ya hapo MjenziMwalimu itapiga kura kwenye hazina kwa mabadiliko.

Kuna mbinu kadhaa za kufuatilia mabadiliko kwenye hazina ya mradi.

Njia rahisi ni Kupigia kura, ambayo ina maana kwamba MjenziMwalimu mara kwa mara huchagua seva iliyo na hazina. Kama fanya ilionyesha mabadiliko kwenye hazina, basi MjenziMwalimu itaunda kitu cha ndani kwa kuchelewa kidogo Mabadiliko ya na uitume kwa kidhibiti tukio Kipanya, ambayo itazindua hatua za kujenga na kujaribu mradi Mfanyakazi-e. Miongoni mwa hatua hizi itaonyeshwa update hazina. Imewashwa kabisa MfanyakaziHii itaunda nakala ya ndani ya hazina. Maelezo ya mchakato huu yatafunikwa hapa chini katika sehemu mbili zinazofuata. (5.4 и 5.5).

Njia ya kifahari zaidi ya kufuatilia mabadiliko kwenye hazina ni kutuma ujumbe moja kwa moja kutoka kwa seva inayoipangisha MjenziMwalimu- kuhusu kubadilisha misimbo ya chanzo cha mradi. Katika kesi hii, mara tu msanidi atakapofanya fanya, seva iliyo na hazina ya mradi itatuma ujumbe MjenziMwalimu-y. Na yeye, kwa upande wake, ataizuia kwa kuunda kitu PBChangeChanzo. Ifuatayo, kipengee hiki kitahamishiwa Kipanya, ambayo huwezesha hatua za kujenga mradi na kuujaribu. Sehemu muhimu ya njia hii inafanya kazi nayo ndoanoMaandishi ya seva kwenye ghala. Katika hati ndoano-a, kuwajibika kwa vitendo vya usindikaji wakati fanya-e, unahitaji kupiga simu ya matumizi sendchange na taja anwani ya mtandao MjenziMwalimu-A. Pia unahitaji kutaja bandari ya mtandao ambayo itasikiliza PBChangeChanzo. PBChangeChanzo, kwa njia, ni sehemu MjenziMwalimu-A. Njia hii itahitaji ruhusa admin-a kwenye seva ambapo hazina ya mradi iko. Utahitaji kwanza kufanya nakala rudufu ya hazina.

5.4 wapanga ratiba


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

wapanga ratiba - hiki ni kipengele ambacho hufanya kama kichochezi kinachoanzisha mlolongo mzima wa mkusanyiko na majaribio ya mradi.
Mfano wa kutekeleza Ujumuishaji Unaoendelea kwa kutumia BuildBot

Mabadiliko hayo ambayo yalirekodiwa badilisha_chanzo, kubadilishwa katika mchakato wa kazi BuildBot-a kupinga Mabadiliko ya na sasa kila Sheduler kwa msingi wao, huunda maombi ya kuanza mchakato wa ujenzi wa mradi. Hata hivyo, pia huamua wakati maombi haya yanahamishwa zaidi kwenye foleni. Kitu Wajenzi huhifadhi foleni ya maombi na kufuatilia hali ya mkusanyiko wa sasa tofauti Mfanyakazi-e. Wajenzi ipo kwenye MjenziMwalimu-e na kuendelea Mfanyakazi-e. Anatuma na MjenziMwalimu-a juu Mfanyakazi-na tayari maalum kujenga - mfululizo wa hatua ambazo lazima zifuatwe.
Tunaona kwamba katika mfano wa sasa vile wapanga ratiba Vipande 2 vinaundwa. Aidha, kila mmoja ana aina yake mwenyewe.

SingleBranchSscheduler - moja ya madarasa maarufu ya ratiba. Inatazama tawi moja na inachochewa na mabadiliko yaliyorekodiwa ndani yake. Anapoona mabadiliko, anaweza kuchelewesha kutuma ombi la ujenzi (ahirisha kwa muda uliowekwa kwenye parameta maalum treeStableTimer) Katika jina huweka jina la ratiba itakayoonyeshwa ndani BuildBot- kiolesura cha wavuti. KATIKA BadilishaFilter chujio kimewekwa, baada ya kupita ambayo mabadiliko katika tawi yanaharakisha ratiba kutuma ombi la ujenzi. KATIKA wajenziMajina jina limeonyeshwa wajenzi-a, ambayo tutaweka baadaye kidogo. Jina kwa upande wetu litakuwa sawa na jina la mradi: Mradi wako.

ForceScheduler jambo rahisi sana. Aina hii ya ratiba inachochewa na kubofya kwa kipanya BuildBot- kiolesura cha wavuti. Vigezo vina kiini sawa na katika SingleBranchSscheduler.

PS No. 3. Labda itakuja kwa manufaa
Mara kwa mara ni ratiba inayoendeshwa kwa masafa fulani ya muda. Simu inaonekana kama hii


from buildbot.plugins import schedulers
nightly = schedulers.Periodic(name="daily",
                              builderNames=["full-solaris"],
                              periodicBuildTimer=24*60*60)
c['schedulers'] = [nightly]                    

5.5 Kiwanda cha Kujenga


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 hubainisha muda wa upimaji huu kwa sekunde.

Kiwanda cha Kujenga inaunda maalum kujenga, ambayo basi wajenzi hutuma kwa Mfanyakazi. Katika Kiwanda cha Kujenga inaonyesha hatua zinazopaswa kufuatwa Mfanyakazi-y. Hatua zinaongezwa kwa kupiga njia ongezaHatua

Hatua ya kwanza iliyoongezwa katika mfano huu ni git clean -d -f -f -xbasi malipo ya git. Vitendo hivi vimejumuishwa kwenye parameta mbinu, ambayo haijasemwa waziwazi lakini inamaanisha thamani chaguo-msingi safi. Kigezo hali='ziada' inaonyesha kuwa faili zimetoka kwenye saraka ambapo faili ya chechout, wakati haipo kwenye hazina, baki bila kuguswa.

Hatua ya pili iliyoongezwa ni kuita hati jaribio na parameter hujambo upande Mfanyakazi-a kutoka kwa saraka /home/habr/worker/yourProject/build na utofauti wa mazingira PATHONPATH=... Kwa hivyo, unaweza kuandika hati zako mwenyewe na kuzitekeleza kwa upande. Mfanyakazi-a kila hatua util.ShellCommand. Maandishi haya yanaweza kuwekwa moja kwa moja kwenye hifadhi. Kisha saa chechout-e wataanguka /home/habr/worker/yourProject/build. Walakini, basi kuna "lakini" mbili:

  1. Mfanyakazi lazima iundwe kwa ufunguo --umask ili isizuie haki za utekelezaji baada ya Checkout-The.
  2. Katika git kushinikiza-e ya hati hizi unahitaji kutaja mali kutekelezwaili baadaye chechout-e haikupoteza haki ya kutekeleza hati ya Git.

5.6 wajenzi


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

Kuhusu ni nini Wajenzi aliambiwa hapa. Sasa nitakuambia kwa undani zaidi jinsi ya kuunda. BuilderConfig ni mjenzi wajenzi. Wabunifu kama hao ndani c['wajenzi'] unaweza kutaja kadhaa, kwa kuwa hii ni karatasi ya vitu wajenzi aina. Sasa hebu tuandike tena mfano kutoka BuildBot, kuileta karibu na kazi yetu.


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

Sasa nitakuambia kuhusu vigezo BuilderConfig.

jina inabainisha jina wajenzi-a. Hapa tuliipa jina Mradi wako. Hii ina maana kwamba juu Mfanyakazi- njia hii itaundwa /home/habr/worker/yourProject/build. Sheduler tafuta wajenzi kwa jina hili tu.

majina ya wafanyakazi ina karatasi Mfanyakazi-s. Kila moja ambayo lazima iongezwe c['wafanyakazi'].

kiwanda - maalum kujenga, ambayo inahusishwa nayo wajenzi. Atapeleka kitu kujenga juu ya Mfanyakazi kukamilisha hatua zote zilizojumuishwa katika hili kujenga-The.

6. Mfano wa usanidi wako mwenyewe

Hapa kuna mfano wa usanifu wa mradi ambao ninapendekeza kutekeleza kupitia BuildBot
.

Tutatumia kama mfumo wa kudhibiti toleo svn. Hifadhi yenyewe itakuwa iko katika aina fulani ya wingu. Hapa kuna anwani ya wingu hili svn.host/svn/yourProject/trunk. Katika wingu chini svn kuna jina la mtumiaji la akaunti: user, nenosiri: nywila. Hati zinazowakilisha hatua kujenga-a pia itakuwa katika tawi svn, kwenye folda tofauti buildbot/worker_linux. Hati hizi ziko kwenye hazina na mali iliyohifadhiwa inayoweza kutekelezwa.

MjenziMwalimu и Mfanyakazi kukimbia kwa mwenyeji sawa mradi.mwenyeji .MjenziMwalimu huhifadhi faili zake kwenye folda /nyumbani/habr/bwana. Mfanyakazi imehifadhiwa katika njia ifuatayo /nyumbani/habr/mfanyakazi. Mchakato wa mawasiliano MjenziMwalimu-a na Mfanyakazi-a inafanywa kupitia bandari 4000 kulingana na itifaki BuildBot-a, yaani 'pb' itifaki.

Mradi unaolengwa umeandikwa kabisa katika Python. Kazi ni kufuatilia mabadiliko yake, kuunda faili inayoweza kutekelezwa, kutoa nyaraka, na kufanya majaribio. Ikitokea kushindwa, wasanidi programu wote wanahitaji kutuma ujumbe kwa barua pepe wakisema kuwa kuna kitendo ambacho hakijafanikiwa.

Maonyesho ya wavuti BuildBot tutaunganisha kwa bandari 80 kwa mradi.mwenyeji. Sio lazima kufunga Apatch. Kama sehemu ya maktaba iliyosokotwa tayari kuna seva ya wavuti, BuildBot huitumia.

Ili kuhifadhi habari za ndani kwa BuildBot tutatumia sqlite.

Mwenyeji anahitajika ili kutuma barua smtp.kikoa.chako - inaruhusu kutuma barua kutoka kwa barua [barua pepe inalindwa] bila uthibitishaji. Pia kwa mwenyejiSMTP ' Dakika zinasikika kwenye chapisho 1025.

Kuna watu wawili wanaohusika katika mchakato huu: admin и user. inasimamia BuildBot. mtumiaji ndiye mtu anayejitolea fanya-s.

Faili inayoweza kutekelezeka inatolewa kupitia kisakinishi. Nyaraka hutolewa kupitia oksijeni.

Kwa usanifu huu niliandika hivi: bwana.cfg:

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

Kwanza unahitaji tengeneza MjenziMwalimu-a na Mfanyakazi-a. Kisha ubandike faili hii bwana.cfg в /nyumbani/habr/bwana.

Hatua inayofuata ni kuanza huduma MjenziMwalimuaa


sudo buildbot start /home/habr/master

Kisha anza huduma Mfanyakazi-a


buildbot-worker start /home/habr/worker

Tayari! Sasa Buildbot itafuatilia mabadiliko na kuchochea fanya-y ndani svn, kufanya hatua za kujenga na kupima mradi na usanifu hapo juu.

Hapo chini nitaelezea baadhi ya vipengele vya hapo juu bwana.cfg.

6.1 Njiani kuelekea kwa bwana wako.cfg


Wakati wa kuandika yangu bwana.cfg Hitilafu nyingi zitafanywa, hivyo kusoma faili ya logi itahitajika. Imehifadhiwa kama MjenziMwalimu-ec njia kabisa /home/habr/master/twistd.log, na upande Mfanyakazi-a na njia kabisa /home/habr/worker/twistd.log. Unaposoma kosa na kurekebisha, utahitaji kuanzisha upya huduma MjenziMwalimu-a. Hivi ndivyo inavyofanywa:


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

6.2 Kufanya kazi na 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)

Kwanza, hebu tuangalie svn_poller. Hii bado ni kiolesura sawa, kupigia kura hazina mara moja kwa dakika. Kwa kesi hii svn_poller hufikia tawi pekee shina. Kigezo cha ajabu split_file=util.svn.split_file_alwaystrunk huweka sheria: jinsi ya kuvunja muundo wa folda svn kwenye matawi. Pia huwapa njia za jamaa. Kwa upande wake split_file_daima hurahisisha mchakato kwa kusema kuwa hazina inayo tu shina.

В Wapangaji imeonyeshwa BadilishaFilteranayeona hakuna na kuhusisha tawi nayo shina kwa mujibu wa chama husika kupitia split_file_daima. Kujibu mabadiliko katika shina, Inazindua wajenzi yenye jina Mradi wako.

mali hapa inahitajika ili msimamizi apokee orodha za utumaji barua za matokeo ya ujenzi na majaribio kama mmiliki wa mchakato.

Hatua ya kujenga-a Checkout yenye uwezo wa kufuta kabisa faili zozote zilizo katika toleo la ndani la hazina Mfanyakazi-A. Na kisha fanya kamili sasisho la svn. Hali imeundwa kupitia parameter hali=imejaa, mbinu=safi. Kigezo haltOnTailure anasema kuwa kama sasisho la svn itatekelezwa kwa kosa, basi mchakato mzima wa ujenzi na upimaji unapaswa kusimamishwa, kwani vitendo zaidi havina maana.

6.3 Barua kwako: wanahabari wameidhinishwa kutangaza


waandishi ni huduma ya kutuma arifa kwa barua pepe.


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]

Anaweza kutuma ujumbe njia tofauti.

MailNotifier hutumia barua pepe kutuma arifa.

template_html huweka kiolezo cha maandishi kwa jarida. HTML hutumiwa kuunda alama. Inabadilishwa na injini jinja2 (inaweza kulinganishwa na django). BuildBot ina seti ya viambishi ambavyo thamani zake hubadilishwa kuwa kiolezo wakati wa mchakato wa kutoa maandishi ya ujumbe. Vigezo hivi vimefungwa katika {{ brashi zilizopindapinda mara mbili }}. Kwa mfano, muhtasari inaonyesha hali ya shughuli zilizokamilishwa, ambayo ni, mafanikio au kutofaulu. A miradi itatoa Mradi wako. Kwa hivyo, kwa kutumia amri za udhibiti ndani jinja2, vigezo BuildBot-a na zana za umbizo la kamba ya python, unaweza kuunda ujumbe wa kuelimisha kabisa.

MailNotifier ina hoja zifuatazo.

kutoka kwa dr - anwani ambayo kila mtu atapokea jarida.

sendToInterestedUsers=True hutuma ujumbe kwa mmiliki na mtumiaji aliyetengeneza fanya.

Luke - kiambishi tamati ambacho lazima kiongezwe kwa majina ya watumiaji wanaopokea jarida. Hivyo admin jinsi mtumiaji atakavyopokea jarida kwenye anwani [barua pepe inalindwa].

mwenyeji wa relay inabainisha jina la mpangishaji ambapo seva inafunguliwa SMTPKwa smptPort inabainisha nambari ya mlango inayosikiliza SMTP seva.

mode="onyo" inasema kwamba utumaji barua unapaswa kufanywa tu ikiwa kuna angalau hatua moja kujenga-a, ambayo iliisha na hali ya kushindwa au onyo. Katika kesi ya mafanikio, hakuna haja ya kutuma jarida.

wapokeaji wa ziada ina orodha ya watu ambao barua inapaswa kutumwa kwa kuongeza mmiliki na mtu aliyefanya fanya.

ujumbeFormatter ni kitu kinachobainisha umbizo la ujumbe, kiolezo chake, na seti ya vigeu vinavyopatikana kutoka jinja2. Chaguzi kama vile wantProperties=Kweli и wantSteps=Kweli fafanua seti hii ya anuwai zinazopatikana.

with['services']=[sendMessageToAll] hutoa orodha ya huduma, kati ya ambayo yetu itakuwa mwandishi.

Tulifanya! Hongera sana

Tuliunda usanidi wetu wenyewe na kuona utendakazi unaoweza. BuildBot. Hii, nadhani, inatosha kuelewa ikiwa zana hii inahitajika kuunda mradi wako. Je, unavutiwa naye? Je, itakuwa na manufaa kwako? Je, yuko vizuri kufanya kazi naye? Kisha siandiki makala hii bure.

Na zaidi. Ningependa jumuiya ya wataalamu itumie BuildBot, ikawa pana, miongozo ilitafsiriwa, na kulikuwa na mifano zaidi.

Asanteni nyote kwa umakini wenu. Bahati njema.

Chanzo: mapenzi.com

Kuongeza maoni