Намунаи татбиқи интегратсияи доимӣ бо истифода аз BuildBot

Намунаи татбиқи интегратсияи доимӣ бо истифода аз BuildBot
(Тасвир аз ҷониби Компютерсоз аз Pixabay)

Салом!

Номи ман аст Евгений Черкин, Ман як барномасоз дар гурӯҳи таҳияи як ширкати истихроҷи маъдан ҳастам Полиметалл.

Ҳангоми оғоз кардани ягон лоиҳаи калон, шумо фикр мекунед: "Барои хидматрасонии он кадом нармафзорро истифода бурдан беҳтар аст?" Лоиҳаи IT пеш аз нашри версияи навбатӣ аз якчанд марҳила мегузарад. Ин хуб аст, вақте ки занҷири ин марҳилаҳо автоматӣ карда мешавад. Раванди автоматии баровардани версияи нави лоиҳаи IT худи номида мешавад Интегратсияи доимӣ. BuildBot дар татбики ин процесс барои мо ёрдамчии хубе гардид.

Дар ин мақола ман қарор додам, ки шарҳи имкониятҳоро пешниҳод кунам BuildBot. Ин нармафзор ба чӣ қодир аст? Ба у чй тавр мурочиат кардан ва бо у МУНОСИБАТИ САМАРАБАХШИ муътадили корй барпо кардан мумкин аст? Шумо метавонед таҷрибаи моро худатон тавассути эҷоди хидмати корӣ барои сохтан ва озмоиши лоиҳаи худ дар мошини худ истифода баред.

Мундариҷа

Мундариҷа

1. Чаро BuildBot?
2. Консепсия таҳти роҳбарии BuildMaster
3. Насбкунӣ
4. Қадамҳои аввал

5. Танзимот. Қадам ба қадам дорухат

5.1 BuildmasterConfig
Кормандони 5.2
5.3 Тағир_манбаъ
5.4 Барномасозони

5.5 Сохтмони Фабрикаи
5.6 нафар бинокорон

6. Намунаи конфигуратсияи шахсии шумо

6.1 Дар роҳ ба сӯи master.cfg
6.2 Кор бо svn
6.3 Мактуб ба шумо: хабарнигорон ваколат доранд, ки изҳор кунанд

Мо инро кардем! Табрик мекунем

1. Чаро BuildBot?

Қаблан дар habr-e ман мақолаҳоро дар бораи татбиқ пайдо кардам Интегратсияи доимӣ истифода бурда мешавад BuildBot... Масалан, Ҳаминаш Ман онро аз ҳама иттилоотӣ ёфтам. Мисоли дигар вуҷуд дорад - соддатар. Ин мақолаҳо метавонанд таҷриба карда шаванд мисол аз дастурва ин баъд аз он, ба забони англисӣ. Купе нуқтаи хуби оғози кор мекунад. Пас аз хондани ин мақолаҳо, шумо эҳтимол дарҳол чизе мехоҳед BuildBot кардан.

Ист! Оё касе воқеан онро дар лоиҳаҳои худ истифода кардааст? Маълум мешавад, ки ҳа бисёр онро дар вазифахои худ ба кор бурданд. ёфтан мумкин аст мисолҳо истифодаи BuildBot ва дар бойгонии рамзи Google.

Пас мантиқи истифодаи одамон чӣ гуна аст Buildbot? Баъд аз ҳама, воситаҳои дигар вуҷуд доранд: Круизконтрол и Ҷенкинс. Ман ҳамин тавр ҷавоб медиҳам. Барои аксари вазифаҳо Ҷенкинс ва ҳақиқат кофӣ хоҳад буд. Дар навбати худ, BuildBot - мутобиқшавӣ бештар, дар ҳоле ки мушкилот дар он ҷо ҳамчун оддӣ ҳал карда мешаванд Ҷенкинс. Интихоб аз они шумост. Аммо азбаски мо абзоре барои лоиҳаи мақсадноки таҳияшавандаро меҷӯем, чаро якееро интихоб накунед, ки аз қадамҳои оддӣ ба даст овардани системаи сохтани дорои интерактивӣ ва интерфейси беназир имкон диҳад.

Барои онҳое, ки лоиҳаи ҳадафашон дар python навишта шудааст, савол ба миён меояд: "Чаро системаи ҳамгироиро интихоб накунед, ки интерфейси возеҳро аз нуқтаи назари забони дар лоиҳа истифодашуда дошта бошад?" Ва ҳоло вақти он расидааст, ки манфиатҳоро пешниҳод кунем BuildBot.

Инак, «квартети инструменталии» мо. Барои худам чор хусусиятро муайян кардам BuildBot:

  1. Он чаҳорчӯбаи кушодаасос дар зери иҷозатномаи GPL мебошад
  2. Ин истифодаи python ҳамчун воситаи конфигуратсия ва тавсифи амалҳои зарурӣ мебошад
  3. Ин имкониятест барои гирифтани ҷавоб аз мошине, ки дар он монтаж сурат мегирад
  4. Инҳо, ниҳоят, талаботи ҳадди ақал барои Мизбон мебошанд. Ҷойгиркунӣ python ва каҷро талаб мекунад ва мошини виртуалӣ ва мошини Java-ро талаб намекунад.

2. Консепсия таҳти роҳбарии BuildMaster

Намунаи татбиқи интегратсияи доимӣ бо истифода аз BuildBot

Маркази меъмории тақсимоти вазифаҳо мебошад BuildMaster. Ин хидматест, ки:

  • риоя мекунад тағирот дар дарахти сарчашмаи лоиҳа
  • мефиристад фармонҳое, ки бояд аз ҷониби хидмати Коргар барои сохтани лоиҳа ва санҷиши он иҷро карда шаванд
  • хабар медихад истифодабарандагон дар бораи натиҷаҳои амалҳои андешидашуда

BuildMaster тавассути файл танзим карда мешавад master.cfg. Ин файл дар реша аст BuildMaster. Баъдтар ман нишон медиҳам, ки ин реша чӣ гуна сохта шудааст. Худи файл master.cfg дорои скрипти python мебошад, ки зангҳоро истифода мебарад BuildBot.

Объекти навбатии муҳимтарин BuildBot ном дорад Корманд. Ин хидмат метавонад дар ҳости дигар бо OS-и дигар ё шояд дар он ҷое оғоз шавад BuildMaster. Он инчунин метавонад дар муҳити маҷозии махсус омодашуда бо бастаҳо ва тағирёбандаҳои худ мавҷуд бошад. Ин муҳити маҷозӣ метавонанд бо истифода аз утилитаҳои python ба монанди виртуалӣ, венв.

BuildMaster ба хар кас фармон медихад Корманд-й, вай бошад, дар навбати худ онхоро ичро мекунад. Яъне, маълум мешавад, ки раванди сохтан ва санҷиши лоиҳа метавонад идома ёбад Корманд-e дар Windows кор мекунад ва дар Коргари дигаре, ки Linux кор мекунад.

Тафтиш рамзҳои сарчашмаи лоиҳа дар ҳар як Корманд-д.

3. Насбкунӣ

Пас, биёед. Ман Ubuntu 18.04-ро ҳамчун мизбон истифода хоҳам кард. Ман якеро ба он мегузорам BuildMaster-а ва як Корманд-а. Аммо аввал шумо бояд python3.7 -ро насб кунед:

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

Барои онҳое, ки ба ҷои 3.7.2 ба python3.7.1 ниёз доранд, шумо метавонед инҳоро иҷро кунед:


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

Қадами навбатӣ насб кардан аст Твиттер кард и BuildBot, инчунин бастаҳое, ки ба шумо имкон медиҳанд, ки функсияҳои иловагӣ истифода баред BuildBot-Дар.


/*Все что под 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. Қадамҳои аввал

Вақти эҷод кардан BuildMaster. Он дар папкаи мо хоҳад буд /хона/хабр/усто.

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

Қадами навбатӣ. биёед эҷод кунем Корманд. Он дар папкаи мо хоҳад буд /хона/хабр/коргар.

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

Вақте ки шумо давед Корманд, он гоҳ бо нобаёнӣ он дар эҷод мекунад /хона/хабр/коргар ҷузвдон бо номи лоиҳа, ки дар master.cfg. Ва дар папка бо номи лоиҳа он директория эҷод мекунад сохтан, ва минбаъд хам ичро хохад кард тафтиш. Феҳристи корӣ барои Корманд-ва он ба директория табдил меёбад /home/habr/yourProject/build.

"Калиди тиллоӣ
Ва ҳоло он чизе ки ман параграфи қаблиро барои он навиштам: скрипт, ки усто аз талаб хоханд кард Корманд-ва аз фосилаи дур дар ин директория иҷро карда намешавад, зеро скрипт ҳуқуқи кор карданро надорад. Барои ислоҳ кардани вазъият, ба шумо калид лозим аст --умаск = 0o22, ки навиштан ба ин феҳристро манъ мекунад, аммо ҳуқуқи оғозро нигоҳ медорад. Ва ин ҳама ба мо лозим аст.

BuildMaster и Корманд бо хамдигар алока мукаррар кунанд. Чунин мешавад, ки он мешиканад ва Корманд муддате мунтазири посух аз BuildMaster— А. Агар ҷавобе набошад, пайвастшавӣ аз нав оғоз карда мешавад. Калид --нигоҳ доштани = 60 танҳо барои нишон додани вақти баъд аз он лозим буд пайваст кардан аз нав оғоз мекунад.

5. Танзимот. Қадам ба қадам дорухат

Танзимот BuildMaster дар тарафи дастгохе, ки мо фармонро ичро карда будем, ба амал бароварда мешавад эҷод-усто. Дар ҳолати мо, ин директория аст /хона/хабр/усто. Файли конфигуратсия master.cfg ҳанӯз вуҷуд надорад, аммо худи фармон аллакай файлро офаридааст master.cmg.намуна. Шумо бояд онро ба он тағир диҳед master.cfg.намуна в master.cfg

mv master.cfg.sample master.cfg

Биёед инро кушоем master.cfg. Ва биёед бубинем, ки он аз чӣ иборат аст. Ва пас аз ин, биёед кӯшиш кунем, ки файли конфигуратсияи худро созем.

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 — луғати асосии файли конфигуратсия. Он бояд ба файли конфигуратсия дохил карда шавад. Барои осонии истифода, дар рамзи конфигуратсия тахаллус ҷорӣ карда шудааст "в". Унвонҳо калидҳо в c["keyFromDist"] унсурҳои устувор барои ҳамкорӣ бо онҳо мебошанд BuildMaster. Барои ҳар як калид объекти мувофиқ ҳамчун арзиш иваз карда мешавад.

Кормандони 5.2

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

Ин дафъа нишон медихем BuildMaster-y рӯйхати Корманд-с. худам Корманд офаридаем олї, ишора мекунад номи шумо коргар и гузарвожа. Акнун ба ҷои онҳо бояд мушаххас карда шавад намуна-кор и гузаштан .

5.3 Тағир_манбаъ

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

Бо калид тағири_манбаъ луғат c мо ба рӯйхат дастрасӣ пайдо мекунем, ки мо мехоҳем объектеро гузорем, ки дар анбор бо рамзи сарчашмаи лоиҳа пурсиш кунад. Дар мисол анбори Git истифода мешавад, ки дар фосилаҳои муайян пурсиш карда мешавад.

Далели аввал ин роҳ ба анбори шумост.

коргар нишон медиҳад, ки роҳ ба папка, ки дар тарафи Корманд-нисбат ба роҳ /home/habr/worker/yourProject/build git версияи маҳаллии анборро нигоҳ медорад.

филиал дорои як шохаи мушаххас дар анбор аст, ки бояд риоя карда шавад.

фосилаи пурсиш шумораи сонияҳои баъд аз он иборат аст BuildMaster барои тағирот дар анбор пурсиш хоҳад кард.

Якчанд усулҳо барои пайгирии тағирот дар анбори лоиҳа вуҷуд доранд.

Усули соддатарин аст Polling, ки ин маънои онро дорад BuildMaster давра ба давра серверро бо репозиторий пурсиш мекунад. Агар содир кардан дигаргунихоро дар анбор инъикос намуд, баъд BuildMaster объекти дохилиро бо каме таъхир эҷод мекунад иваз ва онро ба коркардкунандаи ҳодиса фиристед Scheduler, ки қадамҳоро барои сохтан ва озмоиши лоиҳа оғоз мекунад Корманд-д. Дар байни ин қадамҳо нишон дода мешавад навсозии анбор. Маҳз дар КормандИн як нусхаи маҳаллии анборро эҷод мекунад. Тафсилоти ин раванд дар поён дар ду фасли оянда баррасӣ хоҳад шуд. (5.4 и 5.5).

Усули боз ҳам зеботари пайгирии тағирот дар анбор ин фиристодани паёмҳо аз сервере мебошад, ки онро ҷойгир мекунад. BuildMaster- дар бораи тағир додани кодҳои сарчашмаҳои лоиҳа. Дар ин ҳолат, зудтар таҳиякунанда месозад содир кардан, сервер бо анбори лоиҳа паём мефиристад BuildMaster-й. Ва ӯ, дар навбати худ, онро тавассути эҷод кардани объект халалдор мекунад PBChangeSource. Минбаъд ин объект ба он интиқол дода мешавад Scheduler, ки қадамҳоро барои сохтани лоиҳа ва санҷиши он фаъол мекунад. Қисми муҳими ин усул кор бо чангак-скриптҳои сервер дар анбор. Дар скрипт чангак-а, масъул барои коркарди амалҳои вақте содир кардан-e, шумо бояд ба хидматрасонӣ занг занед тағир фиристед ва суроғаи шабакаро муайян кунед BuildMaster— А. Шумо инчунин бояд бандари шабакаро, ки гӯш мекунад, муайян кунед PBChangeSource. PBChangeSource, дар омади гап, қисми аст BuildMaster— А. Ин усул иҷозат талаб мекунад администратор-a дар сервере, ки анбори лоиҳа ҷойгир аст. Аввалан ба шумо лозим меояд, ки нусхаи эҳтиётии анборро созед.

5.4 Барномасозони


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

планкашхо - ин унсурест, ки ҳамчун триггер амал мекунад, ки тамоми силсилаи васлкунӣ ва санҷиши лоиҳаро оғоз мекунад.
Намунаи татбиқи интегратсияи доимӣ бо истифода аз BuildBot

Он тағиротҳое, ки сабт шудаанд тағири_манбаъ, дар процесси кор тагьир ёфт BuildBot- эътироз кардан иваз ва ҳоло ҳар Шедулер дар асоси онҳо, он дархостҳоро барои оғози раванди сохтани лоиҳа месозад. Аммо, он инчунин муайян мекунад, ки кай ин дархостҳо ба навбат интиқол дода мешаванд. Объект сохтмончӣ як навбати дархостҳоро нигоҳ медорад ва ҳолати маҷлиси ҷорӣро дар алоҳидагӣ пайгирӣ мекунад Корманд-д. сохтмончӣ вуҷуд дорад BuildMaster-е ва ғайра Корманд-д. бо мефиристад BuildMaster-а дар Корманд-ва аллакай мушаххас сохтан - як қатор қадамҳое, ки бояд риоя шаванд.
Мо дар мисоли хозира чунин мебинем планкашхо 2 адад сохта шудааст. Илова бар ин, ҳар як намуди худро дорад.

SingleBranchScheduler – яке аз дарсҳои маъмултарин дар ҷадвал. Он як шохаро тамошо мекунад ва бо тағирёбии сабтшуда дар он ба амал меояд. Вақте ки ӯ тағиротро мебинад, ӯ метавонад фиристодани дархости сохтмонро ба таъхир гузорад (ба таъхир дар мӯҳлате, ки дар параметри махсус нишон дода шудааст treeStableTimer). ДАР ном номи ҷадвалеро, ки дар он намоиш дода мешавад, муқаррар мекунад BuildBot-интерфейси веб. ДАР Тағйир додани филтр филтр муқаррар карда шудааст, ки пас аз гузаштани он тағйирот дар филиал ҷадвалро барои фиристодани дархост барои сохтмон водор мекунад. ДАР Номҳои бинокор ном нишон дода шудааст бунёдгар-а, ки каме дертар муқаррар мекунем. Ном дар ҳолати мо бо номи лоиҳа якхела хоҳад буд: Лоиҳаи шумо.

ForceScheduler чизи хеле содда. Ин намуди ҷадвал тавассути пахш кардани муш ба кор андохта мешавад BuildBot-интерфейси веб. Параметрҳо моҳияти якхела доранд, ки дар SingleBranchScheduler.

PS № 3. Шояд он муфид хоҳад буд
Даврӣ ҷадвалест, ки дар басомади муайяни вақт кор мекунад. Занг чунин менамояд


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

5.5 Сохтмони Фабрикаи


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 вақти ин давраро бо сонияҳо муайян мекунад.

BuildFactory мушаххас эҷод мекунад сохтан, ки пас бунёдгар мефиристад Корманд. Дар BuildFactory қадамҳои иҷрошавандаро нишон медиҳад Корманд-й. Қадамҳо тавассути даъват кардани усул илова карда мешаванд addStep

Қадами аввалини иловашуда дар ин мисол аст git clean -d -f -f -x, он гоҳ касс. Ин амалҳо ба параметр дохил карда шудаанд метод, ки ба таври возеҳ баён нашудааст, вале арзиши пешфарзро дар назар дорад тару тоза. Параметр режим = 'афзоянда' нишон медиҳад, ки файлҳо аз директория, ки дар он чековар, дар ҳоле ки аз анбор нест, бетағйир боқӣ мемонад.

Қадами дуюми иловашуда занги скрипт мебошад мурофиаи бо параметр Салом дар тарафи Корманд-а аз директория /home/habr/worker/yourProject/build бо тағирёбандаи муҳити PATHONPATH=... Ҳамин тариқ, шумо метавонед скриптҳои худро нависед ва онҳоро дар паҳлӯ иҷро кунед Корманд— хар кадам util.ShellCommand. Ин скриптҳоро мустақиман дар анбор ҷойгир кардан мумкин аст. Баъд дар чековар-э онҳо меафтанд /home/habr/worker/yourProject/build. Аммо, пас ду "аммо" вуҷуд дорад:

  1. Корманд бояд бо калид сохта шавад --умак то ки пас аз он ҳуқуқҳои иҷроро манъ накунад тафтиш-Дар.
  2. дар тела додан-e аз ин скриптҳо шумо бояд амволро муайян кунед иҷрошавандато ки баъдтар чековар-e ҳуқуқи иҷрои скрипти Git-ро аз даст надод.

5.6 нафар бинокорон


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

Дар бораи он чи сохтмончӣ гуфта шуд дар ин ҷо. Ҳоло ман ба шумо дар бораи чӣ гуна сохтани он муфассалтар нақл мекунам. BuilderConfig конструктор аст бунёдгар. Чунин дизайнерҳо дар c['бинокорон'] шумо метавонед якчандторо муайян кунед, зеро ин як варақи объектҳост бунёдгар навъи. Акнун биёед мисолро аз нав нависед BuildBot, онро ба вазифаи мо наздик мегардонад.


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

Ҳоло ман ба шумо дар бораи параметрҳо мегӯям BuilderConfig.

ном номро муайян мекунад бунёдгар-а. Дар ин ҷо мо онро номбар кардем Лоиҳаи шумо... Ин маънои онро дорад, ки дар Корманд— махз хамин рох сохта мешавад /home/habr/worker/yourProject/build. Шедулер кофта истодаам бунёдгар танҳо бо ин ном.

номи коргарон варақаро дар бар мегирад Корманд-с. Ҳар яки онҳо бояд илова карда шаванд в['коргарон'].

завод - мушаххас сохтан, ки бо он алокаманд аст бунёдгар. Вай объектро мефиристад сохтан ба Корманд ки тамоми қадамҳои дар ин ҷо зикршударо анҷом диҳед сохтан-Дар.

6. Намунаи конфигуратсияи шахсии шумо

Ин аст намунаи меъмории лоиҳа, ки ман пешниҳод мекунам, ки тавассути он татбиқ карда шавад BuildBot
.

Мо ҳамчун системаи идоракунии версия истифода хоҳем кард svn. Худи анбор дар як намуди абр ҷойгир хоҳад шуд. Ин аст суроғаи ин абр svn.host/svn/yourProject/trunk. Дар абр дар зери svn номи корбарии ҳисоб вуҷуд дорад: истифода, passwd: гузарвожа. Скриптҳое, ки қадамҳоро ифода мекунанд сохтан-а хам дар филиал хохад буд svn, дар папкаи алоҳида buildbot/worker_linux. Ин скриптҳо дар репозиторий бо амволи захирашуда ҷойгиранд иҷрошаванда.

BuildMaster и Корманд дар ҳамон мизбон кор кунед лоиҳа.мизбон .BuildMaster файлҳои худро дар ҷузвдон нигоҳ медорад /хона/хабр/усто. Корманд он дар роҳи зерин нигоҳ дошта мешавад /хона/хабр/коргар. Раванди алоқа BuildMaster-а ва Корманд-a мувофиқи протокол тавассути порти 4000 амалӣ карда мешавад BuildBot-а, яъне 'pb' протокол.

Лоиҳаи мақсаднок пурра дар Python навишта шудааст. Вазифа аз он иборат аст, ки тағиротҳои онро пайгирӣ кунед, файли иҷрошаванда эҷод кунед, ҳуҷҷатҳо эҷод кунед ва санҷиш гузаронед. Дар сурати нокомӣ, ҳамаи таҳиягарон бояд тавассути почтаи электронӣ паём фиристанд, ки амали ноком вуҷуд дорад.

Намоиши веб BuildBot мо ба порти 80 пайваст хоҳем кард лоиҳа.мизбон. Барои насб кардани Apatch шарт нест. Ҳамчун қисми китобхона каҷ аллакай сервери веб вуҷуд дорад, BuildBot истифода мебарад.

Барои нигоҳ доштани маълумоти дохилӣ барои BuildBot будем исползовать склит.

Барои фиристодани почта мизбон лозим аст smtp.домени шумо - он имкон медиҳад, ки мактубҳо аз почта фиристода шаванд [почтаи электронӣ ҳифз карда шудааст] бе аутентификатсия. Инчунин дар мизбон 'SMTP ' Протокол дар пости 1025 шунида мешавад.

Дар ин раванд ду нафар иштирок мекунанд: администратор и истифода. админ идора мекунад BuildBot. истифодабаранда шахсест, ки содир мекунад содир кардан-с.

Файли иҷрошаванда тавассути pyinstaller. Ҳуҷҷатҳо тавассути таҳия карда мешаванд доксиген.

Барои ин меъморӣ ман инро навиштам: 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"
}

Барои оғоз кардан, ба шумо лозим аст сохтан BuildMaster-а ва Корманд-а. Сипас ин файлро часбонед master.cfg в /хона/хабр/усто.

Қадами навбатӣ оғози хидмат аст BuildMaster


sudo buildbot start /home/habr/master

Сипас хидматро оғоз кунед Корманд-a


buildbot-worker start /home/habr/worker

Тайёр! Ҳозир Buildbot тағиротро пайгирӣ мекунад ва ангеза медиҳад содир кардан-й дар svn, иҷрои қадамҳои сохтмон ва озмоиши лоиҳа бо меъмории дар боло зикршуда.

Дар зер ман баъзе хусусиятҳои дар боло зикршударо тавсиф мекунам master.cfg.

6.1 Дар роҳ ба сӯи master.cfg


Ҳангоми навиштани ман master.cfg Хатогиҳои зиёд содир хоҳанд шуд, аз ин рӯ хондани файли гузориш талаб карда мешавад. Он ҳамчун захира карда мешавад BuildMaster-EC роҳи мутлақ /home/habr/master/twistd.log, ва дар тарафи Корманд-а бо роҳи мутлақ /home/habr/worker/twistd.log. Ҳангоми хондани хато ва ислоҳи он, шумо бояд хидматро аз нав оғоз кунед BuildMaster-а. Ин аст, ки чӣ тавр иҷро карда мешавад:


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

6.2 Кор бо 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)

Аввалан, биёед ба он назар андозем svn_poller. Ин ҳамон интерфейс аст, ки мунтазам дар як дақиқа як маротиба дар анбор пурсиш мекунад. Дар ин маврид svn_poller танхо ба филиал дохил мешавад танаи. Параметри пурасрор split_file=util.svn.split_file_alwaystrunk қоидаҳоро муқаррар мекунад: чӣ гуна сохтори папкаро вайрон кардан svn дар шохаҳо. Ӯ инчунин ба онҳо роҳҳои нисбӣ пешниҳод мекунад. Дар навбати худ split_file_alwaystrunk равандро бо гуфтани он, ки анбор танҳо дар бар мегирад, содда мекунад танаи.

В Нақшаҳо нишон дода шудааст Тағйир додани филтркй мебинад Ҳеҷ ва шохаеро бо он алокаманд мекунад танаи мувофиқи иттиҳодияи додашуда тавассути split_file_alwaystrunk. Вокуниш ба тағйирот дар танаи, Ба кор андохта мешавад бунёдгар бо ном Лоиҳаи шумо.

объектҳо дар ин ҷо он лозим аст, ки администратор рӯйхати почтаи электронии натиҷаҳои сохтмон ва санҷишро ҳамчун соҳиби раванд қабул кунад.

Қадами сохтан-a тафтиш қодир ба пурра нест кардани ҳама гуна файлҳое, ки дар версияи маҳаллии анбор ҷойгиранд Корманд— А. Ва он гоҳ пурра иҷро кунед навсозии svn. Режим тавассути параметр танзим карда мешавад режим = пур, усул = тару тоза. Параметр haltOnTailure мегуяд, ки агар навсозии svn бо хато иҷро карда мешавад, пас тамоми раванди сохтмон ва озмоиш бояд боздошта шавад, зеро амалҳои минбаъда маъно надоранд.

6.3 Мактуб ба шумо: хабарнигорон ваколат доранд, ки изҳор кунанд


хабарнигорон хидмати ирсоли огоҳиномаҳо тавассути почтаи электронӣ мебошад.


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]

Ӯ метавонад паём фиристад роҳҳои гуногун.

MailNotifier почтаи электрониро барои фиристодани огоҳиҳо истифода мебарад.

шаблон_html қолаби матниро барои бюллетен муқаррар мекунад. HTML барои эҷоди аломат истифода мешавад. Он аз ҷониби муҳаррик тағир дода мешавад ҷинҷа 2 (бо муқоиса кардан мумкин аст джанго). BuildBot дорои маҷмӯи тағирёбандаҳое мебошад, ки арзишҳои онҳо дар шаблон дар ҷараёни тавлиди матни паём иваз карда мешаванд. Ин тағирёбандаҳо ба {{ қавсҳои ҷингила дукарата }} дохил карда шудаанд. Барои намуна, хулоса ҳолати амалиёти анҷомёфта, яъне муваффақият ё нокомиро нишон медиҳад. А лоиҳаҳо мебарорад Лоиҳаи шумо. Ҳамин тавр, бо истифода аз фармонҳои идоракунӣ дар ҷинҷа 2, тағирёбандаҳо BuildBot-a ва абзорҳои форматкунии сатри python, шумо метавонед як паёми хеле иттилоотӣ эҷод кунед.

MailNotifier далелҳои зеринро дар бар мегирад.

аз аддр – суроғае, ки аз он ҳама бюллетенро мегиранд.

sendToInterestedUsers=True ба соҳиб ва корбаре, ки сохтааст, паём мефиристад содир кардан.

Ҷустуҷӯ кардан — суффикс, ки бояд ба номи корбароне, ки бюллетенро мегиранд, илова карда шавад. Пас администратор ки чӣ тавр истифодабаранда бюллетенро дар суроға қабул мекунад [почтаи электронӣ ҳифз карда шудааст].

мизбон номи мизбонеро, ки дар он сервер кушода мешавад, муайян мекунад SMTP, як smptPort рақами портеро, ки гӯш мекунад, муайян мекунад SMTP сервер.

режим = "огоҳӣ" мегӯяд, ки почта бояд танҳо дар сурате анҷом дода шавад, ки ҳадди аққал як қадам вуҷуд дошта бошад сохтан-a, ки бо нокомии вазъ ё огоҳӣ анҷом ёфт. Дар сурати муваффақ шудан, фиристодани бюллетен лозим нест.

Қабулкунандагони иловагӣ рӯйхати шахсонеро дар бар мегирад, ки ба онҳо илова ба соҳиб ва шахсе, ки паёмро анҷом додааст, бояд фиристода шавад. содир кардан.

messageFormatter объектест, ки формати паём, қолаби он ва маҷмӯи тағирёбандаҳои дастрасро муайян мекунад ҷинҷа 2. Имкониятҳо ба монанди wantProperties=Дуруст и wantSteps=Дуруст ин маҷмӯи тағирёбандаҳои дастрасро муайян кунед.

бо['services']=[sendMessageToAll] номгӯи хизматрасониҳоро пешниҳод мекунад, ки дар байни онҳо хидмати мо низ хоҳад буд ХАБАРНИГОРИ.

Мо инро кардем! Табрик мекунем

Мо конфигуратсияи худро офаридем ва дидем, ки функсияе, ки он қодир аст. BuildBot. Ман фикр мекунам, ки ин барои фаҳмидани он ки оё ин асбоб барои эҷоди лоиҳаи шумо лозим аст, кофӣ аст. Оё шумо ба ӯ таваҷҷӯҳ доред? Оё он ба шумо муфид хоҳад буд? Оё бо ӯ кор кардан бароҳат аст? Пас ман ин мақоларо беҳуда наменависам.

Ва минбаъд. Ман мехоҳам, ки ҷомеаи касбӣ истифода барад BuildBot, васеъ гардид, дастурхо тарчима шуданд ва мисолхо аз ин хам зиёд шуданд.

Ташаккур ба ҳама барои таваҷҷӯҳатон. Барори кор.

Манбаъ: will.com

Илова Эзоҳ