(Тасвир аз ҷониби
Салом!
Номи ман аст Евгений Черкин, Ман як барномасоз дар гурӯҳи таҳияи як ширкати истихроҷи маъдан ҳастам Полиметалл.
Ҳангоми оғоз кардани ягон лоиҳаи калон, шумо фикр мекунед: "Барои хидматрасонии он кадом нармафзорро истифода бурдан беҳтар аст?" Лоиҳаи IT пеш аз нашри версияи навбатӣ аз якчанд марҳила мегузарад. Ин хуб аст, вақте ки занҷири ин марҳилаҳо автоматӣ карда мешавад. Раванди автоматии баровардани версияи нави лоиҳаи IT худи номида мешавад Интегратсияи доимӣ. BuildBot дар татбики ин процесс барои мо ёрдамчии хубе гардид.
Дар ин мақола ман қарор додам, ки шарҳи имкониятҳоро пешниҳод кунам BuildBot. Ин нармафзор ба чӣ қодир аст? Ба у чй тавр мурочиат кардан ва бо у МУНОСИБАТИ САМАРАБАХШИ муътадили корй барпо кардан мумкин аст? Шумо метавонед таҷрибаи моро худатон тавассути эҷоди хидмати корӣ барои сохтан ва озмоиши лоиҳаи худ дар мошини худ истифода баред.
Мундариҷа
Мундариҷа
1. Чаро BuildBot?
Қаблан дар habr-e ман мақолаҳоро дар бораи татбиқ пайдо кардам Интегратсияи доимӣ истифода бурда мешавад BuildBot... Масалан,
Ист! Оё касе воқеан онро дар лоиҳаҳои худ истифода кардааст? Маълум мешавад, ки ҳа
Пас мантиқи истифодаи одамон чӣ гуна аст Buildbot? Баъд аз ҳама, воситаҳои дигар вуҷуд доранд: Круизконтрол и Ҷенкинс. Ман ҳамин тавр ҷавоб медиҳам. Барои аксари вазифаҳо Ҷенкинс ва ҳақиқат кофӣ хоҳад буд. Дар навбати худ, BuildBot - мутобиқшавӣ бештар, дар ҳоле ки мушкилот дар он ҷо ҳамчун оддӣ ҳал карда мешаванд Ҷенкинс. Интихоб аз они шумост. Аммо азбаски мо абзоре барои лоиҳаи мақсадноки таҳияшавандаро меҷӯем, чаро якееро интихоб накунед, ки аз қадамҳои оддӣ ба даст овардани системаи сохтани дорои интерактивӣ ва интерфейси беназир имкон диҳад.
Барои онҳое, ки лоиҳаи ҳадафашон дар python навишта шудааст, савол ба миён меояд: "Чаро системаи ҳамгироиро интихоб накунед, ки интерфейси возеҳро аз нуқтаи назари забони дар лоиҳа истифодашуда дошта бошад?" Ва ҳоло вақти он расидааст, ки манфиатҳоро пешниҳод кунем BuildBot.
Инак, «квартети инструменталии» мо. Барои худам чор хусусиятро муайян кардам BuildBot:
- Он чаҳорчӯбаи кушодаасос дар зери иҷозатномаи GPL мебошад
- Ин истифодаи python ҳамчун воситаи конфигуратсия ва тавсифи амалҳои зарурӣ мебошад
- Ин имкониятест барои гирифтани ҷавоб аз мошине, ки дар он монтаж сурат мегирад
- Инҳо, ниҳоят, талаботи ҳадди ақал барои Мизбон мебошанд. Ҷойгиркунӣ python ва каҷро талаб мекунад ва мошини виртуалӣ ва мошини Java-ро талаб намекунад.
2. Консепсия таҳти роҳбарии BuildMaster
Маркази меъмории тақсимоти вазифаҳо мебошад 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.
"Калиди тиллоӣ
Ва ҳоло он чизе ки ман параграфи қаблиро барои он навиштам: скрипт, ки усто аз талаб хоханд кард Корманд-ва аз фосилаи дур дар ин директория иҷро карда намешавад, зеро скрипт ҳуқуқи кор карданро надорад. Барои ислоҳ кардани вазъият, ба шумо калид лозим аст
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 — луғати асосии файли конфигуратсия. Он бояд ба файли конфигуратсия дохил карда шавад. Барои осонии истифода, дар рамзи конфигуратсия тахаллус ҷорӣ карда шудааст "в". Унвонҳо
Кормандони 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, ки қадамҳоро барои сохтан ва озмоиши лоиҳа оғоз мекунад Корманд-д. Дар байни ин қадамҳо нишон дода мешавад навсозии анбор. Маҳз дар КормандИн як нусхаи маҳаллии анборро эҷод мекунад. Тафсилоти ин раванд дар поён дар ду фасли оянда баррасӣ хоҳад шуд. (
Усули боз ҳам зеботари пайгирии тағирот дар анбор ин фиристодани паёмҳо аз сервере мебошад, ки онро ҷойгир мекунад. 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- эътироз кардан иваз ва ҳоло ҳар Шедулер дар асоси онҳо, он дархостҳоро барои оғози раванди сохтани лоиҳа месозад. Аммо, он инчунин муайян мекунад, ки кай ин дархостҳо ба навбат интиқол дода мешаванд. Объект
Мо дар мисоли хозира чунин мебинем планкашхо 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. Аммо, пас ду "аммо" вуҷуд дорад:
- Корманд бояд бо калид сохта шавад
--умак то ки пас аз он ҳуқуқҳои иҷроро манъ накунад тафтиш-Дар. - дар тела додан-e аз ин скриптҳо шумо бояд амволро муайян кунед иҷрошавандато ки баъдтар чековар-e ҳуқуқи иҷрои скрипти Git-ро аз даст надод.
5.6 нафар бинокорон
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="runtests",
workernames=["example-worker"],
factory=factory))
Дар бораи он чи сохтмончӣ гуфта шуд
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="yourProject",
workernames=["yourWorkerName"],
factory=factory))
Ҳоло ман ба шумо дар бораи параметрҳо мегӯям BuilderConfig.
ном номро муайян мекунад бунёдгар-а. Дар ин ҷо мо онро номбар кардем Лоиҳаи шумо... Ин маънои онро дорад, ки дар Корманд— махз хамин рох сохта мешавад /home/habr/worker/yourProject/build. Шедулер кофта истодаам бунёдгар танҳо бо ин ном.
номи коргарон варақаро дар бар мегирад Корманд-с. Ҳар яки онҳо бояд илова карда шаванд в['коргарон'].
завод - мушаххас сохтан, ки бо он алокаманд аст бунёдгар. Вай объектро мефиристад сохтан ба Корманд ки тамоми қадамҳои дар ин ҷо зикршударо анҷом диҳед сохтан-Дар.
6. Намунаи конфигуратсияи шахсии шумо
Ин аст намунаи меъмории лоиҳа, ки ман пешниҳод мекунам, ки тавассути он татбиқ карда шавад BuildBot
.
Мо ҳамчун системаи идоракунии версия истифода хоҳем кард svn. Худи анбор дар як намуди абр ҷойгир хоҳад шуд. Ин аст суроғаи ин абр
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-а
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 барои эҷоди аломат истифода мешавад. Он аз ҷониби муҳаррик тағир дода мешавад
MailNotifier далелҳои зеринро дар бар мегирад.
аз аддр – суроғае, ки аз он ҳама бюллетенро мегиранд.
sendToInterestedUsers=True ба соҳиб ва корбаре, ки сохтааст, паём мефиристад содир кардан.
Ҷустуҷӯ кардан — суффикс, ки бояд ба номи корбароне, ки бюллетенро мегиранд, илова карда шавад. Пас администратор ки чӣ тавр истифодабаранда бюллетенро дар суроға қабул мекунад [почтаи электронӣ ҳифз карда шудааст].
мизбон номи мизбонеро, ки дар он сервер кушода мешавад, муайян мекунад SMTP, як smptPort рақами портеро, ки гӯш мекунад, муайян мекунад SMTP сервер.
режим = "огоҳӣ" мегӯяд, ки почта бояд танҳо дар сурате анҷом дода шавад, ки ҳадди аққал як қадам вуҷуд дошта бошад сохтан-a, ки бо нокомии вазъ ё огоҳӣ анҷом ёфт. Дар сурати муваффақ шудан, фиристодани бюллетен лозим нест.
Қабулкунандагони иловагӣ рӯйхати шахсонеро дар бар мегирад, ки ба онҳо илова ба соҳиб ва шахсе, ки паёмро анҷом додааст, бояд фиристода шавад. содир кардан.
messageFormatter объектест, ки формати паём, қолаби он ва маҷмӯи тағирёбандаҳои дастрасро муайян мекунад ҷинҷа 2. Имкониятҳо ба монанди wantProperties=Дуруст и wantSteps=Дуруст ин маҷмӯи тағирёбандаҳои дастрасро муайян кунед.
бо['services']=[sendMessageToAll] номгӯи хизматрасониҳоро пешниҳод мекунад, ки дар байни онҳо хидмати мо низ хоҳад буд ХАБАРНИГОРИ.
Мо инро кардем! Табрик мекунем
Мо конфигуратсияи худро офаридем ва дидем, ки функсияе, ки он қодир аст. BuildBot. Ман фикр мекунам, ки ин барои фаҳмидани он ки оё ин асбоб барои эҷоди лоиҳаи шумо лозим аст, кофӣ аст. Оё шумо ба ӯ таваҷҷӯҳ доред? Оё он ба шумо муфид хоҳад буд? Оё бо ӯ кор кардан бароҳат аст? Пас ман ин мақоларо беҳуда наменависам.
Ва минбаъд. Ман мехоҳам, ки ҷомеаи касбӣ истифода барад BuildBot, васеъ гардид, дастурхо тарчима шуданд ва мисолхо аз ин хам зиёд шуданд.
Ташаккур ба ҳама барои таваҷҷӯҳатон. Барори кор.
Манбаъ: will.com