Enghraifft o weithredu Integreiddio Parhaus gyda BuildBot

Enghraifft o weithredu Integreiddio Parhaus gyda BuildBot
(Delwedd gan Cyfrifiadurwr o Pixabay)

Hi!

Fy enw i yw Evgeniy Cherkin, Rwy'n rhaglennydd ar dîm datblygu mewn cwmni mwyngloddio Polymetel.

Wrth ddechrau unrhyw brosiect mawr, rydych chi'n dechrau meddwl: "Pa feddalwedd sydd orau i'w ddefnyddio i'w gynnal?" Mae prosiect TG yn mynd trwy nifer o gamau cyn rhyddhau'r fersiwn nesaf. Mae'n dda pan fydd cadwyn y camau hyn yn awtomataidd. Gelwir y broses awtomataidd o ryddhau fersiwn newydd o brosiect TG ei hun Integreiddio Parhaus. BuildBot troi allan i fod yn gynorthwyydd da i ni wrth weithredu'r broses hon.

Yn yr erthygl hon penderfynais roi trosolwg o'r posibiliadau BuildBot. Beth mae'r feddalwedd hon yn gallu ei wneud? Sut i fynd ato a sut i adeiladu PERTHYNAS GWAITH EFFEITHIOL arferol ag ef? Gallwch gymhwyso ein profiad eich hun trwy greu gwasanaeth gweithiol ar gyfer adeiladu a phrofi eich prosiect ar eich peiriant.

Cynnwys

Cynnwys

1. Pam BuildBot?
2. Cysyniad dan arweiniad BuildMaster
3. Gosod
4. camau cyntaf

5. Cyfluniad. Rysáit cam wrth gam

5.1 BuildmasterConfig
Gweithwyr 5.2
5.3 newid_ffynhonnell
5.4 amserlenwyr

5.5 AdeiladuFactri
5.6 o adeiladwyr

6. Enghraifft o'ch cyfluniad eich hun

6.1 Ar y ffordd i'ch meistr.cfg
6.2 Gweithio gyda svn
6.3 Llythyr atoch: awdurdodir gohebwyr i ddatgan

Fe wnaethom ni! Llongyfarchiadau

1. Pam BuildBot?

Yn flaenorol ar habr-e deuthum ar draws erthyglau am weithredu Integreiddio Parhaus gan ddefnyddio BuildBot. Er enghraifft, Yr un yma Cefais y peth mwyaf addysgiadol. Mae enghraifft arall - symlach. Gellir rhoi blas ar yr erthyglau hyn enghraifft o'r llawlyfrAc hwn wedi hyny, yn Saesonaeg. Mae'r coupe yn fan cychwyn da. Ar ôl darllen yr erthyglau hyn, mae'n debyg y byddwch chi eisiau rhywbeth ymlaen ar unwaith BuildBot i'w wneud.

Stopiwch! A oes unrhyw un wedi ei ddefnyddio yn eu prosiectau mewn gwirionedd? Mae'n troi allan ie llawer ei gymhwyso yn eu gorchwylion. Gellir dod o hyd enghreifftiau defnyddio BuildBot ac mewn archifau cod Google.

Felly beth yw'r rhesymeg y mae pobl yn ei ddefnyddio Buildbot? Wedi'r cyfan, mae yna offer eraill: Rheoli Mordaith и Jenkins. Atebaf fel hyn. Ar gyfer y rhan fwyaf o dasgau Jenkins a bydd y gwirionedd yn ddigon. Yn ei dro, BuildBot - yn fwy addasol, tra bod problemau'n cael eu datrys yno mor syml ag yn Jenkins. Chi biau'r dewis. Ond gan ein bod yn chwilio am offeryn ar gyfer prosiect targed sy'n datblygu, beth am ddewis un a fydd yn caniatáu, gan ddechrau o gamau syml, i gael system adeiladu sydd â rhyngweithedd a rhyngwyneb unigryw.

I’r rhai y mae eu prosiect targed wedi’i ysgrifennu mewn python, mae’r cwestiwn yn codi: “Beth am ddewis system integreiddio sydd â rhyngwyneb clir o ran yr iaith a ddefnyddir yn y prosiect?” Ac yn awr mae'n bryd cyflwyno'r buddion BuildBot.

Felly, ein “pedwarawd offerynnol”. I mi fy hun, rwyf wedi nodi pedair nodwedd BuildBot:

  1. Mae'n fframwaith ffynhonnell agored o dan drwydded GPL
  2. Dyma'r defnydd o python fel offeryn ffurfweddu a disgrifiad o'r camau gweithredu gofynnol
  3. Dyma gyfle i dderbyn ymateb gan y peiriant y mae'r cynulliad yn digwydd arno
  4. Yn olaf, dyma'r gofynion sylfaenol ar gyfer Gwesteiwr. Mae defnyddio python a dirdro, ac nid oes angen peiriant rhithwir a pheiriant java.

2. Cysyniad dan arweiniad BuildMaster

Enghraifft o weithredu Integreiddio Parhaus gyda BuildBot

Yn ganolog i bensaernïaeth dosbarthu tasgau yw BuildMaster. Mae’n wasanaeth sy’n:

  • yn cadw golwg newidiadau yng nghoeden ffynhonnell y prosiect
  • yn anfon gorchmynion y dylid eu gweithredu gan y gwasanaeth Gweithiwr i adeiladu'r prosiect a'i brofi
  • yn hysbysu defnyddwyr am ganlyniadau'r camau a gymerwyd

BuildMaster wedi'i ffurfweddu trwy ffeil meistr.cfg. Mae'r ffeil hon yn y gwraidd BuildMaster. Yn ddiweddarach byddaf yn dangos sut mae'r gwraidd hwn yn cael ei greu. Y ffeil ei hun meistr.cfg yn cynnwys sgript python sy'n defnyddio galwadau BuildBot.

Y gwrthrych pwysicaf nesaf BuildBot mae ganddo enw gweithiwr. Gellir lansio'r gwasanaeth hwn ar westeiwr arall gydag OS gwahanol, neu efallai ar yr un lle BuildMaster. Gall hefyd fodoli mewn amgylchedd rhithwir a baratowyd yn arbennig gyda'i becynnau a'i newidynnau ei hun. Gellir paratoi'r amgylcheddau rhithwir hyn gan ddefnyddio cyfleustodau python fel rhithwirenv, venv.

BuildMaster yn darlledu gorchmynion i bawb gweithiwr-y, ac efe, yn ei dro, yn eu cyflawni. Hynny yw, mae'n troi allan y gall y broses o adeiladu a phrofi prosiect fynd yn ei blaen gweithiwr-e rhedeg Windows ac ar Weithiwr arall yn rhedeg Linux.

Desg dalu codau ffynhonnell prosiect yn digwydd ar bob un gweithiwr-e.

3. Gosod

Felly, gadewch i ni fynd. Byddaf yn defnyddio Ubuntu 18.04 fel gwesteiwr. Byddaf yn gosod un arno BuildMaster-a ac un gweithiwr-a. Ond yn gyntaf mae angen i chi osod python3.7:

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

I'r rhai sydd angen python3.7.2 yn lle 3.7.1, gallwch wneud y canlynol:


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

Y cam nesaf yw gosod Wedi trydar и BuildBot, yn ogystal â phecynnau sy'n eich galluogi i ddefnyddio ymarferoldeb ychwanegol BuildBot-Yr.


/*Все что под 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. camau cyntaf

Amser i greu BuildMaster. Bydd yn ein ffolder /cartref/habr/meistr.

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

Cam nesaf. Gadewch i ni greu gweithiwr. Bydd yn ein ffolder /cartref/habr/gweithiwr.

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

Pan fyddwch chi'n rhedeg gweithiwr, yna yn ddiofyn bydd yn creu i mewn /cartref/habr/gweithiwr ffolder gydag enw'r prosiect, a nodir yn meistr.cfg. Ac yn y ffolder gydag enw'r prosiect bydd yn creu cyfeiriadur adeiladu, a bydd yn parhau i'w wneud til. Cyfeiriadur gweithio ar gyfer gweithiwr-a bydd yn dod yn gyfeiriadur /cartref/habr/eich Prosiect/adeilad.

" Allwedd Aur
Ac yn awr yr hyn yr ysgrifennais y paragraff blaenorol ar ei gyfer: sgript sy'n Meistr bydd galw gan gweithiwr-a gwneud o bell yn y cyfeiriadur hwn ni fydd yn cael ei weithredu oherwydd nad oes gan y sgript yr hawliau i redeg. I gywiro'r sefyllfa, bydd angen allwedd arnoch --umask=0o22, sy'n gwahardd ysgrifennu i'r cyfeiriadur hwn, ond bydd yn cadw hawliau lansio. A dyna'r cyfan sydd ei angen arnom.

BuildMaster и gweithiwr sefydlu cysylltiad â'i gilydd. Mae'n digwydd ei fod yn torri i ffwrdd a gweithiwr aros am beth amser am ymateb gan BuildMaster-A. Os nad oes ymateb, caiff y cysylltiad ei ailgychwyn. Allwedd --keepalive=60 dim ond angen nodi'r amser ar ôl hynny cysylltu reboots.

5. Cyfluniad. Rysáit cam wrth gam

Ffurfweddiad BuildMaster yn cael ei wneud ar ochr y peiriant lle gwnaethom weithredu'r gorchymyn creu-feistr. Yn ein hachos ni, cyfeiriadur yw hwn /cartref/habr/meistr. Ffeil ffurfweddu meistr.cfg ddim yn bodoli eto, ond mae'r gorchymyn ei hun eisoes wedi creu'r ffeil meistr.cmg.sample. Mae angen i chi ei ailenwi i meistr.cfg.sample в meistr.cfg

mv master.cfg.sample master.cfg

Gadewch i ni agor yr un hon meistr.cfg. A gadewch i ni edrych ar yr hyn y mae'n ei gynnwys. Ac ar ôl hynny, gadewch i ni geisio gwneud ein ffeil ffurfweddu ein hunain.

meistr.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 — geiriadur sylfaenol y ffeil ffurfweddu. Rhaid ei gynnwys yn y ffeil ffurfweddu. Er hwylustod, cyflwynir alias yn y cod ffurfweddu "c". Teitlau allweddi в c["keyFromDist"] yn elfennau sefydlog ar gyfer rhyngweithio â nhw BuildMaster. Ar gyfer pob allwedd, amnewidir y gwrthrych cyfatebol fel gwerth.

Gweithwyr 5.2

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

Y tro hwn rydym yn nodi BuildMaster-y rhestr o gweithiwr-s. Fi fy hun gweithiwr creasom uchod, yn dynodi chi-gweithiwr-enw и cyfrinair. Nawr mae angen eu nodi yn lle hynny esiampl-weithiwr и pasio .

5.3 newid_ffynhonnell

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

Trwy allwedd newid_ffynhonnell geiriadur c rydym yn cael mynediad at y rhestr lle rydym am roi gwrthrych sy'n pleidleisio'r ystorfa gyda chod ffynhonnell y prosiect. Mae'r enghraifft yn defnyddio ystorfa Git sy'n cael ei archwilio ar adegau penodol.

Y ddadl gyntaf yw'r llwybr i'ch cadwrfa.

gwaithdir cynrychioli'r llwybr i'r ffolder lle ar yr ochr gweithiwr- perthynas i'r llwybr /cartref/habr/gweithiwr/eich Prosiect/adeilad bydd git yn storio'r fersiwn leol o'r ystorfa.

cangen yn cynnwys cangen benodol yn yr ystorfa y dylid ei dilyn.

poll Interval yn cynnwys nifer yr eiliadau ar ôl hynny BuildMaster yn pleidleisio yn y storfa am newidiadau.

Mae sawl dull o olrhain newidiadau i ystorfa prosiect.

Y dull symlaf yw Pleidleisio, sy'n awgrymu hynny BuildMaster yn pleidleisio'r gweinydd o bryd i'w gilydd gyda'r gadwrfa. Os ymrwymo adlewyrchu'r newidiadau yn yr ystorfa, felly BuildMaster yn creu gwrthrych mewnol gyda pheth oedi Newid a'i anfon at y sawl sy'n trin y digwyddiad Scheduler, a fydd yn lansio'r camau i adeiladu a phrofi'r prosiect ymlaen gweithiwr-e. Ymhlith y camau hyn bydd yn cael ei nodi diweddariad ystorfa. Yn union ymlaen gweithiwrBydd hyn yn creu copi lleol o'r gadwrfa. Ymdrinnir â manylion y broses hon isod yn y ddwy adran nesaf. (5.4 и 5.5).

Dull hyd yn oed yn fwy cain o olrhain newidiadau i gadwrfa yw anfon negeseuon yn uniongyrchol o'r gweinydd sy'n ei chynnal BuildMaster- ynghylch newid codau ffynhonnell y prosiect. Yn yr achos hwn, cyn gynted ag y bydd y datblygwr yn gwneud ymrwymo, bydd y gweinydd gyda storfa'r prosiect yn anfon neges BuildMaster-y. A bydd ef, yn ei dro, yn ei ryng-gipio trwy greu gwrthrych PBChangeFfynhonnell. Nesaf, bydd y gwrthrych hwn yn cael ei drosglwyddo i Scheduler, sy'n actifadu'r camau i adeiladu'r prosiect a'i brofi. Rhan bwysig o'r dull hwn yw gweithio gyda bachyn-server sgriptiau yn y gadwrfa. Yn y sgript bachyn-a, yn gyfrifol am brosesu gweithredoedd pan ymrwymo-e, mae angen i chi ffonio'r cyfleustodau anfon cyfnewid a nodwch gyfeiriad y rhwydwaith BuildMaster-A. Mae angen i chi hefyd nodi'r porthladd rhwydwaith a fydd yn gwrando PBChangeFfynhonnell. PBChangeFfynhonnell, gyda llaw, yn rhan BuildMaster-A. Bydd angen caniatâd ar gyfer y dull hwn admin-a ar y gweinydd lle mae ystorfa'r prosiect wedi'i lleoli. Yn gyntaf bydd angen i chi wneud copi wrth gefn o'r ystorfa.

5.4 amserlenwyr


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

amserlenwyr – mae hon yn elfen sy'n gweithredu fel sbardun sy'n cychwyn y gadwyn gyfan o gydosod a phrofi'r prosiect.
Enghraifft o weithredu Integreiddio Parhaus gyda BuildBot

Y newidiadau hynny a gofnodwyd newid_ffynhonnell, trawsnewid yn y broses o waith BuildBot-a i wrthwynebu Newid ac yn awr bob Sheduler yn seiliedig arnynt, mae'n adeiladu ceisiadau i gychwyn y broses adeiladu prosiect. Fodd bynnag, mae hefyd yn pennu pryd y caiff y ceisiadau hyn eu trosglwyddo ymhellach i'r ciw. Gwrthrych Builder yn storio ciw o geisiadau ac yn olrhain cyflwr y cynulliad presennol ar wahân gweithiwr-Mae'n. Builder yn bodoli ar BuildMaster-e ac ymlaen gweithiwr-e. Mae'n anfon gyda BuildMaster-a ymlaen gweithiwr-ac eisoes yn benodol adeiladu - cyfres o gamau y mae'n rhaid eu dilyn.
Gwelwn hynny yn yr enghraifft bresennol o'r fath amserlenwyr 2 ddarn yn cael eu creu. Ar ben hynny, mae gan bob un ei fath ei hun.

SenglBranchScheduler - un o'r dosbarthiadau mwyaf poblogaidd ar yr amserlen. Mae'n gwylio un gangen ac yn cael ei sbarduno gan newid cofnodedig ynddi. Pan fydd yn gweld newidiadau, gall oedi cyn anfon y cais adeiladu (gohirio am y cyfnod a nodir yn y paramedr arbennig treeStableTimer) AT enw yn gosod enw'r amserlen a fydd yn cael ei harddangos yn BuildBot-rhyngwyneb gwe. YN NewidFilter gosodir hidlydd, ar ôl pasio pa newidiadau yn y gangen sy'n ysgogi'r amserlen i anfon cais am adeiladu. YN Adeiladwyr Enwau enw yn cael ei nodi adeiladwr-a, y byddwn yn gosod ychydig yn ddiweddarach. Bydd yr enw yn ein hachos ni yr un fath ag enw'r prosiect: eich Prosiect.

ForceScheduler peth syml iawn. Mae'r math hwn o amserlen yn cael ei sbarduno gan gliciad llygoden drwodd BuildBot-rhyngwyneb gwe. Mae gan y paramedrau yr un hanfod ag yn SenglBranchScheduler.

Rhif PS 3. Efallai y bydd yn dod yn ddefnyddiol
Cyfnodol yn amserlen sy'n rhedeg ar amlder penodol amser penodol. Mae'r alwad yn edrych rhywbeth fel hyn


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

5.5 AdeiladuFactri


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": "."}))

cyfnodolBuildTimer yn pennu amser y cyfnod hwn mewn eiliadau.

AdeiladuFactory yn creu penodol adeiladu, sydd wedyn adeiladwr yn anfon i gweithiwr. Yn AdeiladuFactory yn nodi'r camau i'w dilyn gweithiwr-y. Ychwanegir camau trwy ffonio'r dull ychwaneguStep

Y cam ychwanegol cyntaf yn yr enghraifft hon yw git glan -d -f -f -xyna til git. Mae'r camau hyn wedi'u cynnwys yn y paramedr dull, nad yw wedi'i nodi'n glir ond sy'n awgrymu gwerth rhagosodedig ffres. Paramedr modd = 'cynyddrannol' yn nodi bod y ffeiliau o'r cyfeiriadur lle mae'r chechout, tra ar goll o'r ystorfa, yn aros heb ei gyffwrdd.

Yr ail gam ychwanegol yw galw'r sgript treial gyda pharamedr helo ar yr ochr gweithiwr-a o gyfeiriadur /cartref/habr/gweithiwr/eich Prosiect/adeilad gyda'r newidyn amgylchedd PATHONPATH=... Felly, gallwch ysgrifennu eich sgriptiau eich hun a'u gweithredu ar yr ochr gweithiwr-a bob cam util.ShellCommand. Gellir gosod y sgriptiau hyn yn uniongyrchol yn y gadwrfa. Yna yn chechout-e byddant yn syrthio i /cartref/habr/gweithiwr/eich Prosiect/adeilad. Fodd bynnag, yna mae dau “achos”:

  1. gweithiwr rhaid ei greu gydag allwedd --umask fel nad yw'n rhwystro hawliau gweithredu ar ôl til-Yr.
  2. Ar gwthio git-e o'r sgriptiau hyn mae angen i chi nodi'r eiddo excutablefelly yn ddiweddarach chechout-e ni chollodd yr hawl i weithredu'r sgript Git.

5.6 o adeiladwyr


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

Am beth ydyw Builder dywedwyd wrth yma. Nawr dywedaf wrthych yn fanylach sut i'w greu. AdeiladwrConfig yn adeiladwr adeiladwr. Dylunwyr o'r fath yn c['adeiladwyr'] gallwch nodi sawl un, gan fod hwn yn ddalen o wrthrychau adeiladwr math. Nawr gadewch i ni ailysgrifennu'r enghraifft o BuildBot, gan ei ddwyn yn nes at ein gorchwyl.


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

Nawr dywedaf wrthych am y paramedrau AdeiladwrConfig.

enw yn nodi'r enw adeiladwr-a. Yma rydym yn ei enwi eich Prosiect... Mae hyn yn golygu hynny ymlaen gweithiwr- bydd yr union lwybr hwn yn cael ei greu /cartref/habr/gweithiwr/eich Prosiect/adeilad. Sheduler edrych am adeiladwr dim ond wrth yr enw hwn.

enwau gweithwyr yn cynnwys dalen gweithiwr-s. Rhaid ychwanegu at bob un ohonynt c['gweithwyr'].

ffatri - penodol adeiladu, y mae yn gysylltiedig ag ef adeiladwr. Bydd yn anfon y gwrthrych adeiladu ar gweithiwr i gwblhau'r holl gamau sydd wedi'u cynnwys yn hyn adeiladu-Yr.

6. Enghraifft o'ch cyfluniad eich hun

Dyma'r bensaernïaeth prosiect enghreifftiol yr wyf yn bwriadu ei rhoi ar waith drwyddi BuildBot
.

Byddwn yn ei defnyddio fel system rheoli fersiynau svn. Bydd yr ystorfa ei hun wedi'i lleoli mewn rhyw fath o gwmwl. Dyma gyfeiriad y cwmwl hwn svn.host/svn/yourProject/trunk. Yn y cwmwl o dan svn mae enw defnyddiwr cyfrif: defnyddiwr, passwd: cyfrinair. Sgriptiau sy'n cynrychioli camau adeiladu-a bydd hefyd yn y gangen svn, mewn ffolder ar wahân buildbot/worker_linux. Mae'r sgriptiau hyn wedi'u lleoli yn y gadwrfa gyda'r eiddo a arbedwyd gweithredadwy.

BuildMaster и gweithiwr rhedeg ar yr un gwesteiwr project.host .BuildMaster yn storio ei ffeiliau mewn ffolder /cartref/habr/meistr. gweithiwr mae'n cael ei storio yn y llwybr canlynol /cartref/habr/gweithiwr. Cyfathrebu proses BuildMaster-a a gweithiwr-a yn cael ei wneud trwy borthladd 4000 yn unol â'r protocol BuildBot-a, hynny yw 'pb' protocol.

Mae'r prosiect targed wedi'i ysgrifennu'n gyfan gwbl yn Python. Y dasg yw olrhain ei newidiadau, creu ffeil gweithredadwy, cynhyrchu dogfennaeth, a chynnal profion. Mewn achos o fethiant, mae angen i bob datblygwr anfon neges trwy e-bost yn nodi bod gweithred aflwyddiannus.

Arddangosfa we BuildBot byddwn yn cysylltu â phorthladd 80 ar gyfer project.host. Nid oes angen gosod Apatch. Fel rhan o'r llyfrgell dirdro mae gweinydd gwe eisoes, BuildBot yn ei ddefnyddio.

I storio gwybodaeth fewnol ar gyfer BuildBot byddwn yn defnyddio sqlite.

Mae angen gwesteiwr ar gyfer postio smtp.your.domain - mae'n caniatáu anfon llythyrau o'r post [e-bost wedi'i warchod] heb ddilysu. Hefyd ar y gwesteiwr 'smtp ' Clywir y cofnodion yn y post 1025.

Mae dau berson yn rhan o’r broses: admin и defnyddiwr. gweinydd yn gweinyddu BuildBot. defnyddiwr yw'r person sy'n ymrwymo ymrwymo-s.

Ffeil Exacutable yn cael ei gynhyrchu drwy pyinstaller. Cynhyrchir dogfennaeth trwy docsigen.

Ar gyfer y bensaernïaeth hon ysgrifennais hwn: meistr.cfg:

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

Yn gyntaf mae angen creu BuildMaster-a a gweithiwr-a. Yna gludwch y ffeil hon meistr.cfg в /cartref/habr/meistr.

Y cam nesaf yw cychwyn y gwasanaeth BuildMasteraa


sudo buildbot start /home/habr/master

Yna dechreuwch y gwasanaeth gweithiwr-a


buildbot-worker start /home/habr/worker

Barod! Yn awr Buildbot bydd yn olrhain newidiadau a sbarduno ymrwymo-y mewn svn, perfformio camau adeiladu a phrofi prosiect gyda'r bensaernïaeth uchod.

Isod byddaf yn disgrifio rhai o nodweddion yr uchod meistr.cfg.

6.1 Ar y ffordd i'ch meistr.cfg


Wrth ysgrifennu fy meistr.cfg Bydd llawer o wallau'n cael eu gwneud, felly bydd angen darllen y ffeil log. Mae'n cael ei storio fel BuildMaster-ec llwybr absoliwt /home/habr/master/twistd.log, ac ar yr ochr gweithiwr-a gyda llwybr absoliwt /home/habr/worker/twistd.log. Wrth i chi ddarllen y gwall a'i drwsio, bydd angen i chi ailgychwyn y gwasanaeth BuildMaster-a. Dyma sut mae'n cael ei wneud:


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

6.2 Gweithio gyda 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)

Yn gyntaf, gadewch i ni edrych ar svn_poliwr. Mae hwn yn dal i fod yr un rhyngwyneb, yn pleidleisio yn rheolaidd yr ystorfa unwaith y funud. Yn yr achos hwn svn_poliwr dim ond mynediad i'r gangen cefnffyrdd. Paramedr dirgel split_file=util.svn.split_file_alwaystrunk yn gosod y rheolau: sut i dorri'r strwythur ffolder svn ar y canghenau. Mae hefyd yn cynnig llwybrau cymharol iddynt. Yn ei dro split_file_alwaysstrunk yn symleiddio'r broses trwy ddweud mai dim ond cynnwys yr ystorfa cefnffyrdd.

В Trefnwyr wedi'i nodi NewidFilterpwy sy'n gweld Dim ac yn cysylltu cangen ag ef cefnffyrdd yn ol cyssylltiad a roddir trwy split_file_alwaysstrunk. Ymateb i newidiadau yn cefnffyrdd, Yn lansio adeiladwr ag enw eich Prosiect.

eiddo yma mae ei angen fel bod y gweinyddwr yn derbyn rhestrau postio o ganlyniadau adeiladu a phrofi fel perchennog y broses.

Cam adeiladu-a til gallu dileu'n llwyr unrhyw ffeiliau sydd wedi'u lleoli yn y fersiwn leol o'r gadwrfa gweithiwr-A. Ac yna gwnewch yr lawn diweddariad svn. Mae'r modd wedi'i ffurfweddu trwy'r paramedr modd = llawn, dull = ffres. Paramedr haltOnTailure yn dweud os diweddariad svn yn cael ei weithredu gyda gwall, yna dylid atal y broses gyfan o adeiladu a phrofi, gan nad yw camau pellach yn gwneud synnwyr.

6.3 Llythyr atoch: awdurdodir gohebwyr i ddatgan


gohebwyr yn wasanaeth ar gyfer anfon hysbysiadau drwy e-bost.


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]

Mae'n gallu anfon negeseuon gwahanol ffyrdd.

MailNotifier yn defnyddio e-bost i anfon hysbysiadau.

templed_html yn gosod y templed testun ar gyfer y cylchlythyr. Defnyddir HTML i greu marcio. Mae'n cael ei addasu gan yr injan jînja2 (gellir cymharu â django). BuildBot Mae ganddo set o newidynnau y mae eu gwerthoedd yn cael eu hamnewid yn y templed yn ystod y broses o gynhyrchu testun y neges. Mae'r newidynnau hyn wedi'u hamgáu mewn {{ braces cyrliog dwbl }}. Er enghraifft, crynodeb yn dangos statws gweithrediadau gorffenedig, hynny yw, llwyddiant neu fethiant. A prosiectau bydd allbwn eich Prosiect. Felly, gan ddefnyddio gorchmynion rheoli yn jînja2, newidynnau BuildBot-a ac offer fformatio llinyn python, gallwch greu neges eithaf addysgiadol.

MailNotifier yn cynnwys y dadleuon canlynol.

fromaddr – y cyfeiriad y bydd pawb yn derbyn y cylchlythyr ohono.

anfonToDefnyddwyrDiddordeb=Mae Gwir yn anfon neges at y perchennog a'r defnyddiwr a wnaeth ymrwymo.

am-edrych — ôl-ddodiad y mae'n rhaid ei ychwanegu at enwau defnyddwyr sy'n derbyn y cylchlythyr. Felly admin sut y bydd y defnyddiwr yn derbyn y cylchlythyr yn y cyfeiriad [e-bost wedi'i warchod].

relaywest yn pennu'r enw gwesteiwr y mae'r gweinydd yn cael ei agor arno smtpI smptPort yn nodi'r rhif porthladd sy'n gwrando smtp gweinydd.

modd = "rhybudd" yn dweud y dylid postio dim ond os oes o leiaf un cam adeiladu-a, a ddaeth i ben gyda'r methiant statws neu rybudd. Yn achos llwyddiant, nid oes angen anfon cylchlythyr.

Derbynwyr ychwanegol yn cynnwys rhestr o bersonau y dylid anfon y post atynt yn ogystal â’r perchennog a’r person a gyflawnodd y ymrwymo.

negesFformatiwr yn wrthrych sy'n pennu fformat y neges, ei dempled, a set o newidynnau sydd ar gael o jînja2. Opsiynau fel wantProperties=Gwir и wantSteps=Gwir diffinio'r set hon o newidynnau sydd ar gael.

gyda['gwasanaethau']=[anfonMessageToAll] yn darparu rhestr o wasanaethau, ymhlith y rhai y bydd ein rhai ni gohebydd.

Fe wnaethom ni! Llongyfarchiadau

Fe wnaethon ni greu ein cyfluniad ein hunain a gweld yr ymarferoldeb y mae'n gallu ei wneud. BuildBot. Mae hyn, rwy'n meddwl, yn ddigon i ddeall a oes angen yr offeryn hwn i greu eich prosiect. Oes gennych chi ddiddordeb ynddo? A fydd yn ddefnyddiol i chi? A yw'n gyfforddus i weithio gydag ef? Yna nid wyf yn ysgrifennu'r erthygl hon yn ofer.

Ac ymhellach. Hoffwn i'r gymuned broffesiynol ddefnyddio BuildBot, daeth yn ehangach, cyfieithwyd llawlyfrau, a chafwyd hyd yn oed mwy o enghreifftiau.

Diolch i chi gyd am eich sylw. Pob lwc.

Ffynhonnell: hab.com

Ychwanegu sylw