Egy példa a folyamatos integráció megvalósítására BuildBottal

Egy példa a folyamatos integráció megvalósítására BuildBottal
(Kép készítette Számítógépes ból ből Pixabay)

Hi!

A nevem Jevgenyij Cserkin, Programozó vagyok egy bányászati ​​cég fejlesztőcsapatában Polimetál.

Bármilyen nagy projekt elindításakor elkezd gondolkodni: „Milyen szoftverrel lehet a legjobban szervizelni?” Egy IT-projekt több szakaszon megy keresztül, mielőtt kiadná a következő verziót. Jó, ha ezeknek a szakaszoknak a láncolata automatizált. Magának egy IT-projekt új verziójának kiadásának automatizált folyamatát nevezzük Folyamatos integráció. BuildBot jó asszisztensnek bizonyult számunkra ennek a folyamatnak a megvalósításában.

Ebben a cikkben úgy döntöttem, hogy áttekintést adok a lehetőségekről BuildBot. Mire képes ez a szoftver? Hogyan közeledjünk hozzá és hogyan építsünk ki vele egy normális HATÉKONY MUNKAKAPCSOLATOT? Tapasztalatainkat saját maga is alkalmazhatja, ha működő szolgáltatást hoz létre projektjének felépítéséhez és teszteléséhez a gépén.

Tartalom

Tartalom

1. Miért a BuildBot?
2. A BuildMaster által vezetett koncepció
3. Telepítés
4. Első lépések

5. Konfiguráció. Lépésről lépésre recept

5.1 BuildmasterConfig
5.2 dolgozók
5.3 change_source
5.4 ütemezők

5.5 BuildFactory
5.6 építő

6. Példa a saját konfigurációjára

6.1 Útban a mesterhez.cfg
6.2 Az svn használata
6.3 Levél Önnek: a riporterek jogosultak nyilatkozni

Megcsináltuk! Gratulálunk

1. Miért a BuildBot?

Korábban a habr-e-n találkoztam a megvalósításról szóló cikkekkel Folyamatos integráció felhasználásával BuildBot. Például, Ezt Ezt találtam a leginformatívabbnak. Van egy másik példa - könnyebb. Ezeket a cikkeket lehet fűszerezni példa a kézikönyvbőlÉs ezt utána angolul. A kupé jó kiindulópont. Miután elolvasta ezeket a cikkeket, valószínűleg azonnal szeretne valamit BuildBot csinálni.

Állj meg! Valaki használta már a projektjeiben? Kiderül, hogy igen sok alkalmazták feladataik során. Található példák használat BuildBot és a Google kódarchívumában.

Tehát mi az emberek logikája Buildbot? Végül is vannak más eszközök: Tempomat и Jenkins. így válaszolok. A legtöbb feladathoz Jenkins és az igazság elég lesz. viszont BuildBot - alkalmazkodóbb, miközben a problémákat olyan egyszerűen oldják meg, mint a benn Jenkins. A választás a tiéd. De mivel egy fejlesztési célprojekthez keresünk egy eszközt, miért ne válasszunk olyat, amelyik egyszerű lépésekből kiindulva lehetővé teszi egy interaktivitással és egyedi felülettel rendelkező build rendszer elkészítését.

Azok számára, akiknek a célprojektje pythonban van megírva, felvetődik a kérdés: „Miért ne válasszon olyan integrációs rendszert, amely világos felülettel rendelkezik a projektben használt nyelv szempontjából?” És most itt az ideje bemutatni az előnyöket BuildBot.

Tehát a mi „hangszeres kvartettünk”. Saját magam számára négy jellemzőt azonosítottam BuildBot:

  1. Ez egy nyílt forráskódú keretrendszer GPL licenc alatt
  2. Ez a python használata konfigurációs eszközként és a szükséges műveletek leírása
  3. Ez egy lehetőség arra, hogy választ kapjon attól a géptől, amelyen az összeszerelés történik
  4. Végül ezek a minimális követelmények a gazdagéphez. A telepítéshez python és twisted szükséges, és nincs szükség virtuális gépre és java gépre.

2. A BuildMaster által vezetett koncepció

Egy példa a folyamatos integráció megvalósítására BuildBottal

A feladatelosztási architektúra központi eleme BuildMaster. Ez egy olyan szolgáltatás, amely:

  • nyilvántartja változások a projekt forrásfájában
  • küld parancsok, amelyeket a Worker szolgáltatásnak végre kell hajtania a projekt felépítéséhez és teszteléséhez
  • értesíti a felhasználókat a megtett intézkedések eredményeiről

BuildMaster fájlon keresztül konfigurálva master.cfg. Ez a fájl a gyökérben van BuildMaster. Később megmutatom, hogyan jön létre ez a gyökér. Maga a fájl master.cfg python szkriptet tartalmaz, amely hívásokat használ BuildBot.

Következő legfontosabb tárgy BuildBot Ez egy név Munkás. Ez a szolgáltatás elindítható egy másik, eltérő operációs rendszerrel rendelkező gazdagépen, vagy esetleg azon, ahol BuildMaster. Különlegesen előkészített virtuális környezetben is létezhet saját csomagokkal és változókkal. Ezek a virtuális környezetek python segédprogramokkal készíthetők elő, mint pl virtualenv, venv.

BuildMaster parancsokat sugároz mindenkinek Munkás-y, és ő viszont teljesíti őket. Vagyis kiderül, hogy a projekt felépítésének és tesztelésének folyamata folytatódhat Munkás-e Windows rendszeren és egy másik, Linuxot futtató Workeren.

Pénztár projekt forráskódja mindegyiken előfordul Munkás-e.

3. Telepítés

Akkor gyerünk. Az Ubuntu 18.04-et fogom használni gazdagépként. teszek rá egyet BuildMaster-egy és egy Munkás-a. De először telepítenie kell a python3.7-et:

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

Azok számára, akiknek a 3.7.2 helyett a python3.7.1-re van szükségük, a következőket tehetik:


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

A következő lépés a telepítés Tweetelt и BuildBot, valamint a további funkciók használatát lehetővé tevő csomagok 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. Első lépések

Ideje alkotni BuildMaster. A mi mappánkban lesz /home/habr/master.

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

Következő lépés. Alkossunk Munkás. A mi mappánkban lesz /home/habr/worker.

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

Amikor futsz Munkás, akkor alapértelmezés szerint itt jön létre /home/habr/worker pontban megadott projekt nevével ellátott mappát master.cfg. És a projekt nevével rendelkező mappában létrehoz egy könyvtárat épít, és továbbra is ezt fogja tenni kijelentkezés. Munkakönyvtár a számára Munkás-és könyvtár lesz belőle /home/habr/yourProject/build.

"Aranykulcs
És most, amiért az előző bekezdést írtam: egy forgatókönyv, amiért Mester től fog követelni Munkás-és távolról ebben a könyvtárban végrehajtott művelet nem hajtódik végre, mert a szkriptnek nincs jogosultsága a futtatáshoz. A helyzet javításához kulcsra lesz szüksége --umask=0o22, amely tiltja az írást ebbe a könyvtárba, de megtartja az indítási jogokat. És ez minden, amire szükségünk van.

BuildMaster и Munkás kapcsolatot teremtenek egymással. Előfordul, hogy leszakad és Munkás vár egy ideig a válaszra BuildMaster-A. Ha nem érkezik válasz, a kapcsolat újraindul. Kulcs --keepalive=60 csak jelezni kellett, hogy mennyi idő után connect újraindul.

5. Konfiguráció. Lépésről lépésre recept

Configuration BuildMaster a gép azon oldalán hajtják végre, ahol a parancsot végrehajtottuk teremt-mester. Esetünkben ez egy könyvtár /home/habr/master. Konfigurációs fájl master.cfg még nem létezik, de maga a parancs már létrehozta a fájlt master.cmg.sample. Át kell nevezned erre master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Nyissuk ki ezt master.cfg. És nézzük, miből áll. És ezek után próbáljuk meg elkészíteni a saját konfigurációs fájlunkat.

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 — a konfigurációs fájl alapszótára. Ennek szerepelnie kell a konfigurációs fájlban. A könnyebb használat érdekében a konfigurációs kódban egy álnév szerepel "c". Címek kulcsok в c["keyFromDist"] rögzített elemek az interakcióhoz BuildMaster. Minden kulcsnál a megfelelő objektumot értékként helyettesítjük.

5.2 dolgozók

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

Ezúttal jelezzük BuildMaster-y listája Munkás-s. Magamat Munkás teremtettünk felett, jelezve te-munkás-név и jelszó. Most helyettük meg kell adni őket példa-munkás и elhalad .

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

Kulccsal változás_forrás szótár c hozzáférést kapunk ahhoz a listához, ahová el szeretnénk helyezni egy objektumot, amely lekérdezi a tárat a projekt forráskódjával. A példa egy Git-tárat használ, amely bizonyos időközönként lekérdezésre kerül.

Az első érv a tárhelyhez vezető útvonal.

munkakönyvtár az oldalon lévő mappa elérési útját jelöli Munkás- az út rokona /home/habr/worker/yourProject/build A git a tárhely helyi verzióját fogja tárolni.

ág tartalmaz egy adott ágat az adattárban, amelyet követni kell.

pollInterval másodpercek számát tartalmazza, amely után BuildMaster lekérdezi az adattárat a változtatásokról.

Számos módszer létezik a projekt lerakatában bekövetkezett változások nyomon követésére.

A legegyszerűbb módszer az Szavazás, ami arra utal BuildMaster időszakonként lekérdezi a szervert a tárolóval. Ha elkövetni tükrözte az adattár változásait, akkor BuildMaster némi késéssel létrehoz egy belső objektumot Változtat és küldje el az eseménykezelőnek Scheduler, amely elindítja a projekt felépítésének és tesztelésének lépéseit Munkás-e. Ezen lépések között lesz feltüntetve frissítés adattár. Pontosan be MunkásEzzel létrehoz egy helyi másolatot a tárhelyről. Ennek a folyamatnak a részleteiről alább, a következő két részben lesz szó. (5.4 и 5.5).

A lerakat változásainak nyomon követésének még elegánsabb módszere, ha üzeneteket küldünk közvetlenül az azt tároló szerverről BuildMaster- a projekt forráskódjainak megváltoztatásáról. Ebben az esetben, amint a fejlesztő teszi elkövetni, a projekttárolóval rendelkező szerver üzenetet küld BuildMaster-y. Ő pedig egy tárgy létrehozásával elfogja PBChangeSource. Ezután ez az objektum átkerül ide Scheduler, amely aktiválja a projekt felépítésének és tesztelésének lépéseit. Ennek a módszernek egy fontos része a munka horog-kiszolgáló szkriptek a tárolóban. A forgatókönyvben horog-a, felelős a feldolgozási műveletekért, amikor elkövetni-e, fel kell hívnia a segédprogramot változás küldése és adja meg a hálózati címet BuildMaster-A. Azt is meg kell adnia a hálózati portot, amelyik figyelni fog PBChangeSource. PBChangeSource, mellesleg része BuildMaster-A. Ehhez a módszerhez engedély szükséges admin-a azon a szerveren, ahol a projekttár található. Először biztonsági másolatot kell készítenie a tárhelyről.

5.4 ütemezők


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

ütemezők – ez egy olyan elem, amely elindítja a projekt teljes összeszerelési és tesztelési láncát.
Egy példa a folyamatos integráció megvalósítására BuildBottal

Azok a változások, amelyeket rögzítettek változás_forrás, átalakult a munkafolyamat során BuildBot-a kifogásolni Változtat és most minden Sheduler ezek alapján kéréseket állít össze a projektépítési folyamat elindításához. Ugyanakkor azt is meghatározza, hogy ezek a kérések mikor kerülnek tovább a várakozási sorba. Egy tárgy Építész tárolja a kérések sorát, és egy különálló egységen követi nyomon az aktuális összeállítás állapotát Munkás-e. Építész -on létezik BuildMaster-e és tovább Munkás-e. -vel küldi BuildMaster-a bekapcsolva Munkás-és már konkrét épít - követendő lépések sorozata.
A mostani példában ezt látjuk ütemezők 2 darab készül. Ráadásul mindegyiknek megvan a maga típusa.

SingleBranchScheduler – az egyik legnépszerűbb óra az órarendben. Egy ágat figyel, és az abban rögzített változás váltja ki. Ha változásokat lát, késleltetheti az összeállítási kérés elküldését (elhalaszthatja a speciális paraméterben megadott ideig treeStableTimer). BAN BEN név beállítja a megjelenő ütemezés nevét BuildBot- webes felület. BAN BEN ChangeFilter be van állítva egy szűrő, amelynek áthaladása után az ágban bekövetkezett változások felszólítják az ütemezést építési kérelem küldésére. BAN BEN builderNames név van feltüntetve építész-a, amit kicsit később állítunk be. A név esetünkben megegyezik a projekt nevével: a projekted.

ForceScheduler nagyon egyszerű dolog. Az ilyen típusú ütemezést egy egérkattintás váltja ki BuildBot- webes felület. A paraméterek lényege ugyanaz, mint itt SingleBranchScheduler.

PS No. 3. Talán jól fog jönni
Időszakos egy ütemezés, amely egy bizonyos időben rögzített gyakorisággal fut. A hívás valahogy így néz ki


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ásodpercben adja meg ennek a periodicitásnak az idejét.

BuildFactory specifikusat hoz létre épít, ami akkor építész címre küldi Munkás. -Ban BuildFactory jelzi a követendő lépéseket Munkás-y. Lépéseket adunk hozzá a metódus meghívásával addStep

Az első hozzáadott lépés ebben a példában az git tiszta -d -f -f -x, akkor git pénztár. Ezeket a műveleteket a paraméter tartalmazza módszer, ami nincs egyértelműen megadva, de egy alapértelmezett értékre utal friss... Paraméter mode='növekményes' azt jelzi, hogy a fájlok abból a könyvtárból származnak, ahol a chechout, bár hiányzik az adattárból, érintetlen marad.

A második hozzáadott lépés a szkript meghívása próba paraméterrel szia oldalán Munkás-a a könyvtárból /home/habr/worker/yourProject/build a PATHONPATH= környezeti változóval, így saját szkripteket írhat és végrehajthatja azokat az oldalon Munkás- minden lépést util.ShellCommand. Ezek a szkriptek közvetlenül elhelyezhetők a tárolóban. Aztán at chechout-e bele fognak esni /home/habr/worker/yourProject/build. Azonban van két „de”:

  1. Munkás kulccsal kell létrehozni --umask hogy utána ne blokkolja a végrehajtási jogokat kijelentkezés-a.
  2. -On git push-E szkriptek közül meg kell adnia a tulajdonságot menthetőhogy később chechout-e nem veszítette el a Git szkript végrehajtásának jogát.

5.6 építő


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

Arról, ami van Építész elmondták itt. Most részletesebben elmondom, hogyan kell létrehozni. BuilderConfig egy kivitelező építész. Ilyen tervezők be c['építők'] Többet is megadhat, mivel ez egy objektumlap építész típus. Most írjuk át a példát innen BuildBot, közelebb hozva a feladatunkhoz.


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

Most elmondom a paramétereket BuilderConfig.

név megadja a nevet építész-a. Itt neveztük el a projekted... Ez azt jelenti, hogy tovább Munkás- ez az út jön létre /home/habr/worker/yourProject/build. Sheduler keresni építész csak ezen a néven.

munkásnevek lapot tartalmaz Munkás-s. Mindegyiket hozzá kell adni c['dolgozók'].

gyár - konkrét épít, amelyhez kapcsolódik építész. Elküldi a tárgyat épít on Munkás az ebben foglalt összes lépés végrehajtásához épít-a.

6. Példa a saját konfigurációjára

Íme a példaprojekt-architektúra, amelyet ezen keresztül javasolok megvalósítani BuildBot
.

Verziókezelő rendszerként fogjuk használni svn. Maga az adattár valamilyen felhőben fog elhelyezkedni. Itt van ennek a felhőnek a címe svn.host/svn/yourProject/trunk. A felhőben alatta svn van egy fiók felhasználónév: használó, passwd: jelszó. Lépéseket ábrázoló parancsfájlok épít-a is a fiókban lesz svn, külön mappában buildbot/worker_linux. Ezek a szkriptek a mentett tulajdonsággal rendelkező lerakatban találhatók végrehajtható.

BuildMaster и Munkás ugyanazon a gazdagépen fut project.host .BuildMaster mappában tárolja a fájljait /home/habr/master. Munkás a következő útvonalon tárolódik /home/habr/worker. Folyamat kommunikáció BuildMaster-a és Munkás-a a 4000-es porton keresztül történik a protokoll szerint BuildBot-a, vagyis "pb" jegyzőkönyv.

A célprojekt teljes egészében Pythonban van megírva. A feladat a változások követése, végrehajtható fájl létrehozása, dokumentáció generálása és tesztelés. Sikertelenség esetén minden fejlesztőnek üzenetet kell küldenie e-mailben arról, hogy sikertelen művelet történt.

Webes megjelenítés BuildBot a 80-as porthoz fogunk csatlakozni project.host. Az Apatch telepítése nem szükséges. A könyvtár részeként sodrott már van webszerver, BuildBot használja.

Belső információk tárolására BuildBot használni fogjuk sqlite.

A postázáshoz host szükséges smtp.your.domain - lehetővé teszi a levelek küldését postáról [e-mail védett] hitelesítés nélkül. a műsorvezetőn issmtp A jegyzőkönyvet az 1025-ös postán hallgatják meg.

Két személy vesz részt a folyamatban: admin и használó. admin adminisztrál BuildBot. felhasználó az elkövető személy elkövetni-s.

A végrehajtható fájl a következőn keresztül jön létre pyinstaller. A dokumentáció a következőn keresztül történik doxigén.

Ehhez az architektúrához ezt írtam: 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"
}

Először is kell teremt BuildMaster-a és Munkás-a. Ezután illessze be ezt a fájlt master.cfg в /home/habr/master.

A következő lépés a szolgáltatás elindítása BuildMasters


sudo buildbot start /home/habr/master

Ezután indítsa el a szolgáltatást Munkás-a


buildbot-worker start /home/habr/worker

Kész! Most Buildbot nyomon követi a változásokat és aktiválja elkövetni-y be svn, a fenti architektúrával egy projekt felépítésének és tesztelésének lépéseit végrehajtva.

Az alábbiakban a fentiek néhány jellemzőjét ismertetem master.cfg.

6.1 Útban a mesterhez.cfg


Írás közben az én master.cfg Sok hiba történik, ezért el kell olvasni a naplófájlt. ként van tárolva BuildMaster-ec abszolút út /home/habr/master/twistd.log, és az oldalán Munkás-a abszolút úttal /home/habr/worker/twistd.log. A hiba elolvasása és kijavítása során újra kell indítania a szolgáltatást BuildMaster-a. Íme, hogyan történik:


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

6.2 Az svn használata


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)

Először is vessünk egy pillantást svn_poller. Ez továbbra is ugyanaz a felület, rendszeresen percenként egyszer lekérdezi a tárolót. Ebben az esetben svn_poller csak az ághoz fér hozzá törzs. Titokzatos paraméter split_file=util.svn.split_file_alwaystrunk meghatározza a szabályokat: hogyan bontsuk fel a mappastruktúrát svn az ágakon. Relatív utakat is kínál nekik. Viszont split_file_alwaystrunk leegyszerűsíti a folyamatot azzal, hogy a tároló csak tartalmaz törzs.

В Ütemezések jelzett ChangeFilteraki látja Egyik sem és ágat társít hozzá törzs egy adott asszociáció szerint keresztül split_file_alwaystrunk. A változásokra reagálva törzs, Elindul építész névvel a projekted.

ingatlanait itt azért van rá szükség, hogy az adminisztrátor a folyamat tulajdonosaként megkapja a felépítési és tesztelési eredmények levelezési listáit.

Lépés épít-a kijelentkezés képes teljesen törölni a tárhely helyi verziójában található fájlokat Munkás-A. És akkor csináld meg a teljes svn frissítés. Az üzemmód a paraméteren keresztül állítható be mód=teljes, method=friss... Paraméter haltOnTailure azt mondja, hogy ha svn frissítés hibával fog végrehajtani, akkor a teljes építési és tesztelési folyamatot fel kell függeszteni, mivel a további műveleteknek nincs értelme.

6.3 Levél Önnek: a riporterek jogosultak nyilatkozni


riporterek egy szolgáltatás e-mailben történő értesítések küldésére.


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]

Üzeneteket tud küldeni különböző utak.

MailNotifier e-mailt használ az értesítések küldésére.

sablon_html beállítja a hírlevél szövegsablonját. A HTML-t jelölés létrehozására használják. A motor módosítja jinja2 (összehasonlítható django). BuildBot olyan változókkal rendelkezik, amelyek értékeit behelyettesítik a sablonba az üzenetszöveg generálása során. Ezek a változók {{ dupla kapcsos kapcsos zárójelek }} közé vannak zárva. Például, összefoglalás megjeleníti a befejezett műveletek állapotát, azaz sikert vagy sikertelenséget. A projektek ki fogja adni a projekted. Tehát a vezérlőparancsok használatával jinja2, változók BuildBot-a és python karakterlánc-formázó eszközökkel meglehetősen informatív üzenetet hozhat létre.

MailNotifier a következő érveket tartalmazza.

fromaddr – az a cím, ahonnan mindenki megkapja a hírlevelet.

sendTo InterestedUsersAz =True üzenetet küld a tulajdonosnak és a felhasználónak, aki létrehozta elkövetni.

lookup — egy utótag, amelyet a hírlevelet kapó felhasználók nevéhez kell adni. Így admin hogyan kapja meg a felhasználó a hírlevelet a címen [e-mail védett].

relayhost megadja azt a gazdagépnevet, amelyen a szerver megnyílik smtpEgy smptPort megadja a figyelő port számát smtp szerver.

mode="figyelmeztetés" azt mondja, hogy a postázást csak akkor szabad megtenni, ha van legalább egy lépés épít-a, amely állapothibával vagy figyelmeztetéssel végződött. Siker esetén nem kell hírlevelet küldeni.

extraRecipients tartalmazza azoknak a személyeknek a listáját, akiknek a postai küldeményt el kell küldeni a tulajdonoson és az azt végző személyen kívül elkövetni.

messageFormatter egy olyan objektum, amely meghatározza az üzenet formátumát, a sablonját és a változók készletét, amelyekről elérhető jinja2. Opciók, mint pl wantProperties=Igaz и wantSteps=Igaz definiálja az elérhető változók készletét.

with['services']=[sendMessageToAll] szolgáltatások listáját tartalmazza, amelyek között a miénk is lesz riporter.

Megcsináltuk! Gratulálunk

Megalkottuk saját konfigurációnkat, és láttuk, hogy milyen funkciókra képes. BuildBot. Azt hiszem, ez elég ahhoz, hogy megértsük, szükség van-e erre az eszközre a projekt létrehozásához. Érdekel téged? Hasznos lesz számodra? Kényelmes vele dolgozni? Akkor nem hiába írom ezt a cikket.

És tovább. Szeretném, ha a szakmai közösség használná BuildBot, szélesebb lett, kézikönyveket fordítottak le, és még több volt a példa.

Köszönöm mindenkinek a figyelmet. Sok szerencsét.

Forrás: will.com

Hozzászólás