
(Image by from
Tere!
Minu nimi on Evgeny Cherkin, ma olen programmeerija kaevandamisettevõtte arendusmeeskonnas Polymetal.
Alustades mistahes suurt projekti, hakkad mõtlema: „Millist tarkvara on parim selle haldamiseks kasutada?” IT-projekt läbib enne järgmise versiooni väljalaskmist mitmeid etappe. On hea, kui nende etappide ahel on automatiseeritud. Automaatset protsessi, millega uue versiooniga IT-projekti välja antakse, nimetatakse Continuous Integration. BuildBot on meie jaoks hea abimees, mis viib selle protsessi ellu.
Selles artiklis olen otsustanud esitleda BuildBotvõimaluste üle. Milleks on see tarkvara võimeline? Kuidas sellele läheneda ja kuidas luua selle kasutamisega tõhusad tööalased suhted? Teie kogemusi võite rakendada ka oma projektis, luues oma masinas tööserviisi oma projekti kogumiseks ja testimiseks.
Sisukord
Sisukord
1. Miks BuildBot?
Varem olen habr-e-s kohtunud artiklitega selle rakendamise kohta Continuous Integration kasutades BuildBot. Näiteks, tundus mulle kõige informatiivsem. On ka teine, lihtsam õpikute näidete , vaid teha. BuildBot Oota! Kas keegi on seda üldse oma projektides kasutanud? Selgub, et jah,
rakendati neid oma ülesannetes. Samuti võib leida ka Google'i koodiarhiividest. kasutamist BuildBot Mis on siis nende inimeste loogika, kes kasutavad
CruiseControl Buildbot? Ведь есть другие инструменты: . Vastan nii. Enamikule ülesannetest ja Jenkinsileon see tõepoolest piisav. Omalt poolt on Jenkinsile – paindlikum ja seal lahendatakse ülesanded sama lihtsalt nagu BuildBot . Valik on sinu. Kuid kuna me otsime tööriista arengutaseme projekti jaoks, siis miks mitte valida see, mis võimaldab lihtsate sammude põhjal luua kogumissüsteemi, millel on interaktiivsus ja ainulaadne liides. Jenkinsile. Выбирать вам. Но раз уж мы ищем инструмент для развивающегося целевого проекта, то почему бы не выбрать тот, который позволит, отталкиваясь от простых шагов, получить систему сборки, имеющую интерактивность и уникальный интерфейс.
Neil, kelle sihtprojekt on kirjutatud pythonis, tekib küsimus: "Miks mitte valida integreerimissüsteem, kus on arusaadav liides projekti keele seisukohalt?" Ja nüüd on õige aeg tutvustada eeliseid BuildBot.
Nii et meie "tööriistade kvartett". Minu enda jaoks olen määratlenud neli omadust BuildBot:
- See on avatud lähtekoodiga raamistik GPL litsentsi alusel
- See kasutab pythonit konfigureerimise ja vajalike toimingute kirjeldamise tööriigina
- See võimaldab saada vastust masinalt, kus toimub ülesehitus
- Lõpuks on minimaalne nõue hostile. Ülevaatamiseks on vaja pythonit ja twisted'i, virtuaalmasinat ja java-masinat ei ole vaja.
2. Konseptsioon BuildMasteri juhtimisel

Ülesannete jaotamise arhitektuuri keskmes on BuildMaster. See on teenus, mis:
- jälgib projekti lähtekoodipuudutavaid muudatusi
- saadetakse käsklusi, mida peab täitma worker-teenus projekti ehitamiseks ja testimiseks
- teavitab kasutajaid sooritatud toimingute tulemustest
BuildMaster konfigureeritakse faili kaudu master.cfg. See fail asub juures BuildMaster. Hiljem näitan, kuidas see juur luuakse. Fail ise master.cfg sisaldab python — skripti, mis kasutab kutseid BuildBot.
Järgmine kõige olulisem objekt BuildBot on nimega Töötaja. See teenus võib töötada teisel hostil teise OS-iga või samas, kus BuildMaster. Seda saab ka käitada spetsiaalselt valmistatud virtuaalses keskkonnas oma pakettide ja muutujatega. Need virtuaalsed keskkonnad võivad olla valmistatud python-ülikonnad, nagu virtualenv, venv.
BuildMaster edastab käske igale Töötaja-le, ja see omakorda täidab need. See tähendab, et projekti ehitamine ja testimine võib toimuda Töötaja-l Windowsi haldamisel ja teisel Workeril linuxi haldamisel.
Checkout projekti lähtekoodid saavad toimuda igal Töötaja-l.
3. Paigaldamine
Nii et alustame. Hostina kasutan Ubuntu 18.04. Sellele paigaldan ühe BuildMaster-i ja ühe Töötaja-i. Kuid kõigepealt on vaja installida python3.7:
sudo apt-get update
sudo apt-get install python3.7
Neile, kellele on vajalik python3.7.2 selle asemel, et 3.7.1, võib teha järgmist:
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
Järgmise sammuna paigaldame Twisted ja BuildBot, samuti paketid, mis võimaldavad lisafunktsioonide kasutamist BuildBot-a.
/*Все что под 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. Esimesed sammud
Aeg luua BuildMaster. See on meil kaustas /home/habr/master.
mkdir master
buildbot create-master master # Siin me tõeliselt loomeJärgmine samm. Loome Töötaja. See on meil kaustas /home/habr/worker.
mkdir worker
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker localhost:4000 yourWorkerName password
Kui käivitate Töötaja, siis loob see vaikimisi /home/habr/worker kausta nimega projekti, mis on märgitud master.cfg. Ja projekti nimega kaustas loob ta katalooge build, ja seejärel teeb ta sinna checkout. Töökaustaks Töötaja-le saab kaust /home/habr/yourProject/build.
„Kuldne” võti
Ja nüüd see, mille pärast ma eelmist lõiku kirjutasin: skript, mis Master nõuab -lt, et Töötajateeks kaugelt selles kaustas, ei toimu, kuna skriptil ei ole käivitusõigusi. Probleemi lahendamiseks on vajalik võti —umask=0o22, mis piirab kirjutamisõigusi selles kaustas, kuid jätab käivitusõigused alles. Ja me vajame just seda.
BuildMaster ja Töötaja ühendavad omavahel. Mõnikord juhtub, et ühendus katkeb ja Töötaja ootab vastust BuildMaster-lt. Kui vastust ei tule, siis ühendus restarteeritakse. Võti —keepalive=60 on just vajalik selleks, et näidata aega, mille möödudes connect taaskäivitub.
5. Konfiguratsioon. Samm-sammult retsept
Konfiguratsioon BuildMaster toimub masina poolel, kus me käsu andsime create-master. Meie juhul — see on kaust /home/habr/master. Konfiguratsioonifail master.cfg ei ole veel olemas, kuid käsk on juba loonud faili master.cmg.sample. Tuleb see ümber nimetada master.cfg.sample ja master.cfg
mv master.cfg.sample master.cfgAvame selle master.cfg. Ja analüüsime, millest see koosneb. Ja seejärel proovime luua oma konfiguratsioonifaili.
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 — põhikoond konfiguratsioonifaili. See peab olema hädasti kaasatud konfiguratsioonifaili. Mugavuse huvides koodide konfigureerimisel tutvustatakse selle jaoks lisanimetust. «c». Nime ja c[«keyFromDist»] on fikseeritud elemendid interaktsiooniks BuildMaster. Iga võtme puhul asendatakse vastava objektiga.
5.2 workers
c['workers'] = [worker.Worker("example-worker", "pass")]Seekord määrame BuildMaster- nimekirja Töötaja-test. Me Töötaja oleme loonud , määrates your-worker-name ja parool. Nüüd tuleb need asendada example-worker ja pass .
5.3 change_source
c['change_source'] = []
c['change_source'].append(changes.GitPoller(
'git://github.com/buildbot/hello-world.git',
workdir='gitpoller-workdir', branch='master',
pollInterval=300))
Märgi change_source sõnastiku c kaudu saame ligipääsu nimekirjale, kuhu tuleb paigutada objekt, mis küsib projekti lähtekoodi hoidlat. Näites kasutatakse Git hoidlat, mida küsitakse teatud intervallide järel.
Esimene argument on tee teie hoidla juurde.
workdir esindab tee kausta, kus Töötaja-st suhtes tee /home/habr/worker/yourProject/build git salvestab hoidla kohalikku versiooni.
branch sisaldab konkreetset haru hoidlas, mida tuleb jälgida.
pollInterval sisaldab sekundite arvu, mille möödudes BuildMaster küsimine hoidlalt muudatuste osas.
On mitmeid meetodeid projekti hoidla muudatuste jälgimiseks.
Lihtsaim meetod on Küsimine, mis tähendab, et BuildMaster korduvate päringutega serverile, kus asub hoidla. Kui commit hoidlas on muudatused, siis BuildMaster tekitab see teatud viivitusega sisemise objekti Change ja edastab selle sündmuste töötlejale Scheduler, mis algatab projekti koostamise ja testimise sammud Töötaja–l. Nende sammude seas on toodud update hoidla. Just selles Töötaja–s luuakse hoidla kohalik koopia. Selle protsessi üksikasjad käsitletakse allpool kahes järgmises osas ( ja ).
Veelgi elegantsem meetod muudatuste jälgimiseks hoidlas on otse serverilt, kus see on majutatud, edastada teateid BuildMaster–le projekti lähtekoodide muutmisest. Sel juhul, niipea kui arendaja teeb commit, saadab projekti hoidla server teate BuildMaster–le. Ja see, omakorda, tabab selle, luues objekti PBChangeSource. Edasi antakse see objekt Scheduler, mis aktiveerib projekti koostamise ja testimise sammud. Selle meetodi oluline osa on töötamine hookhoidla serveri skriptidega. Skripti hook–s, mis vastutab tegevuste töötlemise eest commit–s, tuleb kutsuda utiliit sendchange ja märkida võrgu aadress BuildMaster–le. Tuleb märkida ka võrguport, mis kuulab PBChangeSource. PBChangeSource, mis on mu übrigens osa BuildMaster–s. See meetod nõuab õigusi admin–l serveris, kus projekti hoidla asub. Eelnevalt tuleb teha hoidla varukoopia.
5.4 shedulers
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"]))
schedulers – see on element, mis toimib käivitajana, mis käivitab kogu projekti koostamise ja testimise ahelat.

Muutused, mis on salvestatud change_source, töötlemise käigus BuildBot–s muutuvad objektiks Change ja nüüd iga Sheduler loob nende põhjal palveid projekti koostamise protsessi käivitamiseks. Kuid see määrab ka, millal need taotlused edasi järjekorda edastada. Objekt Builder salvestab endas taotluste järjekorra ja jälgib praeguse koostamise seisundit eraldi Töötaja–s. Builder eksisteerib nii BuildMaster–s kui ka Töötaja–s. See saadab BuildMaster–lt Töötaja–le juba konkreetse build – sammu seeria, mida tuleb teostada.
Näeme, et praeguses näites luuakse neid schedulers kokku 2 tk. Lisaks on igaühel oma tüüp.
SingleBranchScheduler – üks populaarsemaid tööplaanide klasse. See jälgib ühte haru ja aktiveerub, kui selles toimub fikseeritud muudatus. Kui ta muudatusi näeb, võib ta edasilükata päringu saatmist (edasilükata määratud aja jooksul eriparameetris) treeStableTimer). Siin nimi määratakse tööplaani nimi, mis kuvatakse BuildBot-veebiliideses. Siin ChangeFilter määratakse filter, mille kaudu toimub muudatuste tuvastamine harus, mis sunnib tööplaani saatma päringu ehitamiseks. Siin builderNames määratakse nimi Raspberry Pi 3 jaoks un-def, lts, mp kernelitega, kui pulseaudio on kasutusel, tuleb ühe helikaardi (kõrvaklapid või HDMI) välja lülitada, vastasel juhul võib arvuti välja lülitamine kesta kaua ja heli võib kaduda pulseaudio tõttu.-le, mille määrame kohe. Meie puhul on nimi sama, mis projekti nimi: yourProject.
ForceScheduler on üsna lihtne asi. See tööplaan aktiveeritakse hiireklõpsuga BuildBot-veebiliideses. Parameetrid on samad nagu SingleBranchScheduler.
P.S. №3. Siit võib abi olla.
Periodic — see on tööplaan, mis aktiveerub kindla aja jooksul. Kutsumine näeb välja umbes nii:
from buildbot.plugins import schedulers
nightly = schedulers.Periodic(name="daily",
builderNames=["full-solaris"],
periodicBuildTimer=24*60*60)
c['schedulers'] = [nightly]
5.5 BuildFactory
factory = util.BuildFactory()
factory.addStep(steps.Git(repourl='git://github.com/buildbot/hello-world.git', mode='incremental'))
factory.addStep(steps.ShellCommand(command=["trial", "hello"],
env={"PYTHONPATH": "."}))
periodicBuildTimer määrab selle perioodi kestuse sekundites.
BuildFactory loob konkreetse build, mis seejärel Raspberry Pi 3 jaoks un-def, lts, mp kernelitega, kui pulseaudio on kasutusel, tuleb ühe helikaardi (kõrvaklapid või HDMI) välja lülitada, vastasel juhul võib arvuti välja lülitamine kesta kaua ja heli võib kaduda pulseaudio tõttu. saadetakse Töötaja. Failis BuildFactory määratakse sammud, mida tuleb täita Töötaja-le. Sammud lisatakse meetodi addStep
esimene lisatud samm selle näites on git clean -d -f -f -x, seejärel huvilisi.. Need teod on määratud parameetris meetod, mis pole selgelt määratud, kuid eeldatakse, et sellel on vaikeväärtus fresh. Parameeter mode='incremental' näitab, et kaustast, kuhu tehakse chechout, jäävad puutumatuks need failid, mida ei ole repositooriumis.
Teine lisatud samm on skripti väljakutse trial c parameetriga hello serveri Töötaja-lt kaustast /home/habr/worker/yourProject/build c keskkonnamuutujaga PATHONPATH=… Nii saate kirjutada oma skripte ja käitada neid serveri Töötaja-l läbi sammu util.ShellCommand. Need skriptid saab paigutada otse repositooriumisse. Nii et töötamise ajal chechout-l nad jõuavad /home/habr/worker/yourProject/build. Kuid siis on kaks „aga“:
- Töötaja peab olema loodud võtmega et see ei takistaks õiguste täitmist pärast checkout-a.
- Kaugjuhtimisega git push-d nende skriptide puhul tuleb määrata omadus executable, et pärast chechout-d skripti täitmise õigused ei kaoks Git'is.
5.6 builders
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="runtests",
workernames=["example-worker"],
factory=factory))
Sellest, mis see on, Builder oli räägitud . Nüüd räägin ma üksikasjalikumalt, kuidas seda luua. BuilderConfig on konstruktor Raspberry Pi 3 jaoks un-def, lts, mp kernelitega, kui pulseaudio on kasutusel, tuleb ühe helikaardi (kõrvaklapid või HDMI) välja lülitada, vastasel juhul võib arvuti välja lülitamine kesta kaua ja heli võib kaduda pulseaudio tõttu.. Selliseid konstruktoreid saab c[‘builders’] seada mitu, kuna see on objektide loend Raspberry Pi 3 jaoks un-def, lts, mp kernelitega, kui pulseaudio on kasutusel, tuleb ühe helikaardi (kõrvaklapid või HDMI) välja lülitada, vastasel juhul võib arvuti välja lülitamine kesta kaua ja heli võib kaduda pulseaudio tõttu. . Nüüd kirjutame näite uuesti, tuues selle lähemale meie ülesandele. BuildBotc['builders'] = [] c['builders'].append(util.BuilderConfig(name="yourProject", workernames=["yourWorkerName"], factory=factory))
Nüüd räägin ma parameetritest
mille nimi BuilderConfig.
nimi -a. Siin nimetame selle Raspberry Pi 3 jaoks un-def, lts, mp kernelitega, kui pulseaudio on kasutusel, tuleb ühe helikaardi (kõrvaklapid või HDMI) välja lülitada, vastasel juhul võib arvuti välja lülitamine kesta kaua ja heli võib kaduda pulseaudio tõttu.. See tähendab, et selle alusel yourProject-s luuakse see tee, Töötajamis otsib /home/habr/worker/yourProject/build. Sheduler just selle nime järgi. Raspberry Pi 3 jaoks un-def, lts, mp kernelitega, kui pulseaudio on kasutusel, tuleb ühe helikaardi (kõrvaklapid või HDMI) välja lülitada, vastasel juhul võib arvuti välja lülitamine kesta kaua ja heli võib kaduda pulseaudio tõttu. workernames
sisaldab loendit -idest. Igaüks neist peab olema lisatud Töötajac[‘workers’] factory.
— konkreetne , millega see on seotud. buildSee saadab objekti Raspberry Pi 3 jaoks un-def, lts, mp kernelitega, kui pulseaudio on kasutusel, tuleb ühe helikaardi (kõrvaklapid või HDMI) välja lülitada, vastasel juhul võib arvuti välja lülitamine kesta kaua ja heli võib kaduda pulseaudio tõttu.kõigi sammude täitmiseks, mis kuuluvad selle build . Tundub, et Töötaja Siin on näidisprojekti struktuur, mille soovitan realiseerida läbi build-a.
6. Näidis oma konfiguratsioonist
Versioonihalduse süsteemina kasutame BuildBot
.
svn . Repo asub kuskil pilves. Siin on selle pilve aadresssvn.host/svn/yourProject/trunk , passwd: . Repo asub kuskil pilves. Siin on selle pilve aadress . Skriptid, mis esindavad samme kasutaja-a, asuvad samuti harus parool, eraldi kaustas buildbuildbot/worker_linux . Repo asub kuskil pilves. Siin on selle pilve aadress. Need skriptid asuvad repositooriumis koos salvestatud omadusega executabletöötavad ühe ja sama hosti peal project.host.
BuildMaster ja Töötaja hoiab oma faile kaustas hoiab samas teekonnas .BuildMaster . Protsesside /home/habr/master. Töötaja -a ja /home/habr/worker-a vahel toimub suhtlus 4000 porti kaudu koostöös BuildMaster-a, st Töötaja‘pb’ BuildBotprotokolliga. Sihtprojekt on täielikult kirjutatud pythonis. Ülesandeks on jälgida selle muudatusi, luua executable fail, genereerida dokumentatsioon, teostada testimine. Juhul, kui juhtub failure, tuleb kõigile arendajatele saata e-kiri, et teavitada neil ebaõnnestumisest. Veebi kuvamine
seame 80 porti jaoks
. Apatchi paigaldamine ei ole vajalik. Raamatukogus BuildBot twisted hoiab samas teekonnason juba veebiserver olemas, mida kasutatakse. Sisemiste andmete salvestamiseks BuildBot Postituslisti jaoks on vaja hosti
smtp.your.domain BuildBot asemel sqlite.
— see lubab saata kirju aadressilt projectHost@your.domain ilma autentimiseta. Samuti kuulatakse hostis ‘ smtp ‘ protokollis porti 1025.Protsessis on kaasatud kaks osalist: . admin haldab
. user on isik, kes sooritab admin ja kasutaja-id. BuildBotExecutable fail genereeritakse läbi commit-ы.
Exacutable файл генерируется через pyinstaller. Dokumentatsioon genereeritakse läbi doxygen.
Selle arhitektuuri jaoks kirjutasin ma sellise 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>Valmistatud versiooni staatus: {{ summary }}</h4>
<p>Kasutatav teenus ehitamiseks: {{ workername }}</p>
<p>Projekt: {{ projects }}</p>
<p>Juhtimisliidese vaatamiseks külastage linki: {{ buildbot_url }}</p>
<p>Koostamise tulemuse vaatamiseks külastage linki: {{ build_url }}</p>
<p>WinSCP abil saate serverisse sisse logida ip: xxx.xx.xxx.xx. Logides sisse habr/password, saate kogutud executable faili alla laadida kaustast ~/worker/yourProject/build/dist.</p>
<p><b>Koostamine viidi läbi Buildboti kaudu</b></p>
'''
sendMessageToAll = reporters.MailNotifier(fromaddr="projectHost@your.domain",
sendToInterestedUsers=True,
lookup="your.domain",
relayhost="smtp.your.domain",
smtpPort=1025,
mode="warnings",
extraRecipients=['user@your.domain'],
messageFormatter=reporters.MessageFormatter(
template=template_html,
template_type='html',
wantProperties=True,
wantSteps=True)
)
c['services'] = [sendMessageToAll]
c['title'] = "Ehitusprotsess"
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"
}
Alustamiseks on vajalik BuildMaster-a, st Töötaja-a. Siis sisestage see fail master.cfg ja /home/habr/master.
Järgmine samm on teenuse käivitamine BuildMaster-a
sudo buildbot start /home/habr/master
Seejärel käitage teenus Töötaja-a
buildbot-worker start /home/habr/worker
Valmis! Nüüd Buildbot hakatakse jälgima muudatusi ja see käivitub commit-u . Repo asub kuskil pilves. Siin on selle pilve aadress, teostades ehitamise ja testimise samme eespool nimetatud arhitektuuriga.
Allpool selgitan mõningaid omadusi eespool mainitud master.cfg.
6.1 Teel oma master.cfg juurde
Oma kirjutamise ajal tuleb palju vigu, seega tuleb lugeda logifaili. See hoitakse nii master.cfg -e c absoluutse tee BuildMaster, kui ka poolel /home/habr/master/twistd.log-a absoluutse tee Töötaja. Vigu lugedes ja parandades tuleb teenus /home/habr/worker/twistd.log-a taaskäivitada. Nii see käib: BuildMastersudo buildbot stop /home/habr/master sudo buildbot upgrade-master /home/habr/master sudo buildbot start /home/habr/master
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)
6.2 Töö svn-iga
Alustuseks vaatame
svn_poller . See on sama liides, mis küsib hoidlast iga minuti järel. Antud juhulpuudutab see ainult haru . See on sama liides, mis küsib hoidlast iga minuti järel. Antud juhul . Salapärane parameeter trunksplit_file=util.svn.split_file_alwaystrunk määrab reeglid: kuidas jagada kaustade struktuur harudeks. See pakub neile ka suhtelisi teid. Omakorda . Repo asub kuskil pilves. Siin on selle pilve aadress split_file_alwaystrunk lihtsustab protsessi, öeldes, et hoidlas on ainult Schedulers trunk.
Uues , mis näeb töötatakse välja ChangeFilterja seob sellega haru None antud assotsiatsiooni kaudu trunk . Reageerides muudatustele lihtsustab protsessi, öeldes, et hoidlas on ainult, käivitab trunkc nimega Raspberry Pi 3 jaoks un-def, lts, mp kernelitega, kui pulseaudio on kasutusel, tuleb ühe helikaardi (kõrvaklapid või HDMI) välja lülitada, vastasel juhul võib arvuti välja lülitamine kesta kaua ja heli võib kaduda pulseaudio tõttu. siin on vajalik, et administraator saaks tulemuste teadete saadetise nagu protsessi omanik. yourProject.
properties Samm
suudab täielikult eemaldada kõik failid, mis asuvad kohaliku hoidla versioonis build-a checkout -a. Ja siis teha täielik Töötajasvn update. Režiim on seadistatud parameetrigamode=full method=fresh, haltOnTailure. Parameeter tähendab, et kui говорит о том, что если Režiim on seadistatud parameetriga kui see ebaõnnestub, siis tuleb kogu kogumise ja testimise protsess peatada, kuna edasised tegevused pole mõttekad.
6.3 Teie postkast: reporters on volitatud teatama
reporterid on teadete saatmise teenus e-posti teel.
template_html=u'''
<h4>Valmistatud versiooni staatus: {{ summary }}</h4>
<p>Kasutatav teenus ehitamiseks: {{ workername }}</p>
<p>Projekt: {{ projects }}</p>
<p>Juhtimisliidese vaatamiseks külastage linki: {{ buildbot_url }}</p>
<p>Koostamise tulemuse vaatamiseks külastage linki: {{ build_url }}</p>
<p>WinSCP abil saate serverisse sisse logida ip: xxx.xx.xxx.xx. Logides sisse habr/password, saate kogutud executable faili alla laadida kaustast ~/worker/yourProject/build/dist.</p>
<p><b>Koostamine viidi läbi Buildboti kaudu</b></p>
'''
sendMessageToAll = reporters.MailNotifier(fromaddr="projectHost@your.domain",
sendToInterestedUsers=True,
lookup="your.domain",
relayhost="smtp.your.domain",
smtpPort=1025,
mode="warnings",
extraRecipients=['user@your.domain'],
messageFormatter=reporters.MessageFormatter(
template=template_html,
template_type='html',
wantProperties=True,
wantSteps=True)
)
c['services'] = [sendMessageToAll]
See võib saata sõnumeid .
MailNotifier kasutab e-posti teadete saatmiseks.
template_html määrab sõnumi saatmiseks teksti шаблони. Märgistuse loomiseks kasutatakse html-i. See on kohandatud mootoriga (võib võrrelda django). BuildBot omab muutuja komplekti, mille väärtused asendatakse templis sõnumi koostamise protsessis. Need muutujaid kirjutatakse {{ kahekordsetesse sulgudesse }}. Näiteks, kokkuvõte väljastab lõpetatud toimingute staatuse, see tähendab success või failure. Ja projects väljastab yourProject. Seega, juhtkomandode, muutuja jinja2-de ja pythonis stringide vormindamise vahendite abil saab luua üsna informatiivse sõnumi. BuildBotsisaldab järgmisi argumente.
MailNotifier fromaddr
– aadress, kust kõik saavad teadete saatmise. sendToInterestedUsers
=True saadab sõnumi omanikule ja kasutajale, kes tegilookup commit.
– sufiks, mille tuleb lisada kasutajanimedele, kes saavad saatmise. Nii kuna kasutaja saab saatmise aadressil admin@your.domain. admin relayhost
määrab hostinime, kus server on avatud , a Protsessis on kaasatud kaks osalist:smptPort määrab sadama numbri, mis kuulab mode=«warning» Protsessis on kaasatud kaks osalist: server.
ütleb, et saatmine tuleb teha ainult juhul, kui vähemalt üks samme -st lõppes staatusega failure või warning. Juhul success saatmist ei vajata. buildextraRecipients
sisaldab nimekirja isikutest, kellele tuleks saata teateid lisaks omanikule ja isikule, kes selle messageFormatter commit.
on objekt, mis määrab sõnumi vormingu, selle šabloni ja muutuja komplekti, mis on saadaval . Sellised parameetrid nagu jinja2wantProperties=True wantSteps=True ja määravad selle saadaval oleva muutuja komplekti. s[‘services’]=[sendMessageToAll]
pakub teenuste nimekirja, mille seas on ka meie reporter Oleme loonud oma konfigureerimise ja näinud funktsionaalsust, mida suudab.
Me tegime selle ära! Mu õnnitlused
. Seda, ma arvan, piisab, et mõista, kas see tööriist on teie projekti loomiseks vajalik. Kas see huvitab teid? Kas sellel on kasu? Kas sellega on mugav töötada? Siis ma ei kirjuta seda artiklit asjata. BuildBotJa veel. Sooviksin, et professionaalne kogukond, kes kasutab
, muutuks suuremaks, juhendeid tõlgitaks ja näidiseid oleks veel rohkem. BuildBotAitäh kõigile tähelepanu eest. Edu.
Всем спасибо за внимание. Удачи.
Allikas: habr.com
