Esimerkki jatkuvasta integraatiosta BuildBotin kanssa

Esimerkki jatkuvasta integraatiosta BuildBotin kanssa
(Kuva: Tietokoneisaattori alkaen Pixabay)

Hi!

Nimeni on Jevgeni Cherkin, Olen ohjelmoija kaivosyhtiön kehitystiimissä Polymetalli.

Kun aloitat minkä tahansa suuren projektin, alat miettiä: "Mitä ohjelmistoa on parasta käyttää sen ylläpitämiseen?" IT-projekti käy läpi useita vaiheita ennen seuraavan version julkaisua. On hyvä, kun näiden vaiheiden ketju on automatisoitu. Itse IT-projektin uuden version automaattista julkaisua kutsutaan nimellä Jatkuva integraatio. BuildBot osoittautui meille hyväksi avustajaksi tämän prosessin toteuttamisessa.

Tässä artikkelissa päätin antaa yleiskatsauksen mahdollisuuksista BuildBot. Mihin tämä ohjelmisto pystyy? Miten lähestyä häntä ja miten rakentaa hänen kanssaan normaali TEHOKAS TYÖSUHDE? Voit soveltaa kokemustamme itse luomalla toimivan palvelun projektin rakentamiseen ja testaamiseen koneellesi.

Pitoisuus

Pitoisuus

1. Miksi BuildBot?
2. BuildMasterin johtama konsepti
3. Asennus
4. Ensimmäiset askeleet

5. Kokoonpano. Askel askeleelta resepti

5.1 BuildmasterConfig
5.2 työntekijät
5.3 change_source
5.4 aikataulut

5.5 BuildFactory
5.6 rakentajaa

6. Esimerkki omasta kokoonpanostasi

6.1 Matkalla master.cfg:lle
6.2 Työskentely svn:n kanssa
6.3 Kirje sinulle: toimittajilla on oikeus ilmoittaa

Me teimme sen! Onnittelut

1. Miksi BuildBot?

Aiemmin habr-e:ssä törmäsin täytäntöönpanoa koskeviin artikkeleihin Jatkuva integraatio kanssa BuildBot. Esim, tämä Minusta se oli informatiivisin. On toinenkin esimerkki - helpompaa. Näitä artikkeleita voidaan maustaa esimerkki ohjekirjastaJa это sen jälkeen englanniksi. Coupe on hyvä lähtökohta. Kun olet lukenut nämä artikkelit, haluat todennäköisesti heti jotain päälle BuildBot tehdä.

Lopettaa! Onko kukaan oikeasti käyttänyt sitä projekteissaan? Osoittautuu kyllä monet soveltaneet sitä tehtäviinsä. Voidaan löytää esimerkkejä käyttää BuildBot ja Googlen koodiarkistoissa.

Joten mikä on ihmisten logiikka Buildbot? Loppujen lopuksi on muita työkaluja: Vakionopeudensäädin и Jenkins. Vastaan ​​näin. Useimpiin tehtäviin Jenkins ja totuus riittää. puolestaan BuildBot - mukautuvampi, kun taas ongelmat ratkaistaan ​​siellä yhtä yksinkertaisesti kuin sisällä Jenkins. Päätös on sinun. Mutta koska etsimme työkalua kehittyvään kohdeprojektiin, niin miksi ei valita sellainen, joka mahdollistaa yksinkertaisista vaiheista alkaen koontijärjestelmän, jossa on interaktiivisuus ja ainutlaatuinen käyttöliittymä.

Niille, joiden kohdeprojekti on kirjoitettu pythonilla, herää kysymys: "Miksi ei valittaisi integraatiojärjestelmää, jolla on selkeä käyttöliittymä projektissa käytetyn kielen suhteen?" Ja nyt on aika esitellä edut BuildBot.

Joten "instrumentaalikvartettimme". Olen tunnistanut itselleni neljä ominaisuutta BuildBot:

  1. Se on avoimen lähdekoodin kehys GPL-lisenssillä
  2. Tämä on pythonin käyttö konfigurointityökaluna ja tarvittavien toimien kuvaus
  3. Tämä on mahdollisuus saada vastaus koneelta, jolla kokoonpano tapahtuu
  4. Nämä ovat lopuksi isännän vähimmäisvaatimukset. Käyttöönotto vaatii pythonin ja twistedin, eikä se vaadi virtuaalikoneita ja Java-konetta.

2. BuildMasterin johtama konsepti

Esimerkki jatkuvasta integraatiosta BuildBotin kanssa

Keskeinen tehtävänjakoarkkitehtuuri on BuildMaster. Se on palvelu, joka:

  • pitää kirjaa muutokset projektin lähdepuussa
  • lähettää komennot, jotka Worker-palvelun tulee suorittaa projektin rakentamiseksi ja sen testaamiseksi
  • ilmoittaa käyttäjille toteutettujen toimien tuloksista

BuildMaster määritetty tiedoston kautta master.cfg. Tämä tiedosto on juurissa BuildMaster. Myöhemmin näytän kuinka tämä juuri luodaan. Itse tiedosto master.cfg sisältää python-skriptin, joka käyttää kutsuja BuildBot.

Seuraavaksi tärkein kohde BuildBot Se on nimi Työntekijä. Tämä palvelu voidaan käynnistää toisessa isännässä, jossa on eri käyttöjärjestelmä, tai ehkä siinä, jossa BuildMaster. Se voi myös esiintyä erityisesti valmistetussa virtuaaliympäristössä, jossa on omat paketit ja muuttujat. Nämä virtuaaliympäristöt voidaan valmistaa käyttämällä python-apuohjelmia, kuten virtualenv, venv.

BuildMaster lähettää komentoja kaikille Työntekijä-y, ja hän puolestaan ​​täyttää ne. Eli käy ilmi, että projektin rakentamis- ja testausprosessi voi jatkua Työntekijä-e Windowsissa ja toisessa Workerissa, jossa on Linux.

Tarkista projektin lähdekoodit esiintyvät jokaisessa Työntekijä-e.

3. Asennus

Mennään siis. Käytän isäntänä Ubuntu 18.04. Laitan yhden sen päälle BuildMaster-a ja yksi Työntekijä-a. Mutta ensin sinun on asennettava python3.7:

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

Niille, jotka tarvitsevat python3.7.2:n 3.7.1:n sijaan, voit tehdä seuraavaa:


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

Seuraava vaihe on asennus twiittasi и BuildBot, sekä paketteja, joiden avulla voit käyttää lisätoimintoja 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. Ensimmäiset askeleet

Aika luoda BuildMaster. Se tulee olemaan kansiossamme /home/habr/master.

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

Seuraava askel. Luodaan Työntekijä. Se tulee olemaan kansiossamme /koti/habr/työntekijä.

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

Kun juokset Työntekijä, niin se luodaan oletuksena sisään /koti/habr/työntekijä kansio projektin nimellä, joka on määritelty master.cfg. Ja kansioon, jossa on projektin nimi, se luo hakemiston rakentaa, ja tekee niin jatkossakin kassa. Työhakemisto Työntekijä- ja siitä tulee hakemisto /home/habr/yourProject/build.

"Kultainen avain
Ja nyt se, mitä varten kirjoitin edellisen kappaleen: käsikirjoitus siitä Master tulee vaatimaan Työntekijä-ja tehty etänä tässä hakemistossa ei suoriteta, koska komentosarjalla ei ole oikeuksia suorittaa. Tilanteen korjaamiseksi tarvitset avaimen --umask=0o22, joka kieltää kirjoittamisen tähän hakemistoon, mutta säilyttää käynnistysoikeudet. Ja siinä kaikki mitä tarvitsemme.

BuildMaster и Työntekijä muodostavat yhteyden toisiinsa. Se tapahtuu, että se katkeaa ja Työntekijä odottaa jonkin aikaa vastausta BuildMaster-A. Jos vastausta ei tule, yhteys käynnistetään uudelleen. Avain --keepalive=60 piti vain ilmoittaa aika, jonka jälkeen kytkeä käynnistyy uudelleen.

5. Kokoonpano. Askel askeleelta resepti

kokoonpano BuildMaster suoritetaan koneen sillä puolella, jolla suoritimme komennon luo-mestari. Meidän tapauksessamme tämä on hakemisto /home/habr/master. Asetustiedosto master.cfg ei ole vielä olemassa, mutta komento itse on jo luonut tiedoston master.cmg.sample. Sinun on nimettävä se uudelleen master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Avataan tämä master.cfg. Ja katsotaanpa, mistä se koostuu. Ja sen jälkeen yritetään tehdä oma asetustiedosto.

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 — määritystiedoston perussanakirja. Se on sisällytettävä asetustiedostoon. Käytön helpottamiseksi asetuskoodiin on lisätty alias "vs". Otsikot näppäimiä в c["keyFromDist"] ovat kiinteitä elementtejä vuorovaikutukseen BuildMaster. Jokaisen avaimen kohdalla vastaava objekti korvataan arvona.

5.2 työntekijät

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

Tällä kertaa osoitamme BuildMaster-y lista Työntekijä-s. Itse Työntekijä loimme edellä, osoittaa sinä-työntekijä-nimi и salasana. Nyt ne on määritettävä sen sijaan esimerkki-työntekijä и kulkea .

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

Avaimella change_source sanakirja c saamme pääsyn luetteloon, johon haluamme sijoittaa objektin, joka kysyy arkistosta projektin lähdekoodin. Esimerkki käyttää Git-tietovarastoa, jota kyselyt tehdään tietyin väliajoin.

Ensimmäinen argumentti on polku arkistoon.

työhakemisto edustaa polkua sivussa olevaan kansioon Työntekijä- sukulainen polkuun /home/habr/worker/yourProject/build git tallentaa arkiston paikallisen version.

sivuliike sisältää tietyn haaran arkistossa, jota tulee noudattaa.

pollInterval sisältää sekuntien määrän, jonka jälkeen BuildMaster kysyy arkistosta muutoksia.

On useita tapoja seurata projektin arkiston muutoksia.

Yksinkertaisin menetelmä on Vaalit, mikä viittaa siihen BuildMaster kysyy ajoittain palvelimelta arkiston. Jos sitoutumaan heijasteli arkiston muutoksia BuildMaster luo sisäisen objektin pienellä viiveellä Muutos ja lähetä se tapahtumankäsittelijälle Scheduler, joka käynnistää vaiheet projektin rakentamiseksi ja testaamiseksi Työntekijä-e. Näistä vaiheista ilmoitetaan päivitys arkisto. Juuri päällä TyöntekijäTämä luo arkistosta paikallisen kopion. Tämän prosessin yksityiskohdat käsitellään alla kahdessa seuraavassa osassa. (5.4 и 5.5).

Vielä tyylikkäämpi tapa seurata arkiston muutoksia on lähettää viestejä suoraan sitä isännöivältä palvelimelta BuildMaster- projektin lähdekoodien muuttamisesta. Tässä tapauksessa heti, kun kehittäjä tekee sitoutumaan, palvelin, jolla on projektivarasto, lähettää viestin BuildMaster-y. Ja hän vuorostaan ​​sieppaa sen luomalla esineen PBChangeSource. Seuraavaksi tämä objekti siirretään kohteeseen Scheduler, joka aktivoi vaiheet projektin rakentamiseksi ja sen testaamiseksi. Tärkeä osa tätä menetelmää on työskentely koukku-palvelinkomentosarjat arkistossa. Käsikirjoituksessa koukku-a, vastuussa käsittelytoimista, kun sitoutumaan-E, sinun täytyy soittaa apuohjelmaan lähetä muutos ja määritä verkko-osoite BuildMaster-A. Sinun on myös määritettävä verkkoportti, joka kuuntelee PBChangeSource. PBChangeSource, muuten on osa BuildMaster-A. Tämä menetelmä vaatii luvan admin-a palvelimella, jossa projektivarasto sijaitsee. Sinun on ensin tehtävä varmuuskopio arkistosta.

5.4 aikataulut


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

aikatauluttimet – Tämä on elementti, joka toimii laukaisuna, joka käynnistää projektin koko kokoonpano- ja testausketjun.
Esimerkki jatkuvasta integraatiosta BuildBotin kanssa

Ne muutokset, jotka kirjattiin change_source, muuttunut työprosessin aikana BuildBot-a vastustaa Muutos ja nyt jokainen Sheduler niiden perusteella se rakentaa pyyntöjä projektin rakennusprosessin aloittamiseksi. Se kuitenkin määrittää myös, milloin nämä pyynnöt siirretään edelleen jonoon. Esine Rakentaja tallentaa pyyntöjen jonon ja seuraa nykyisen kokoonpanon tilaa erilliselle palvelimelle Työntekijä-On. Rakentaja on olemassa BuildMaster-e ja edelleen Työntekijä-e. Hän lähettää mukana BuildMaster- päällä Työntekijä- ja jo konkreettinen rakentaa - sarja vaiheita, joita on noudatettava.
Näemme sen nykyisessä esimerkissä sellaisena aikatauluttimet 2 kpl luodaan. Lisäksi jokaisella on oma tyyppinsä.

SingleBranchScheduler – yksi suosituimmista tunneista aikataulussa. Se tarkkailee yhtä haaraa ja laukaisee sen tallennetusta muutoksesta. Kun hän näkee muutoksia, hän voi viivyttää koontipyynnön lähettämistä (lykätä erikoisparametrissa määritetyn ajan treeStableTimer). nimi asettaa näytettävän aikataulun nimen BuildBot-verkkokäyttöliittymä. SISÄÄN ChangeFilter asetetaan suodatin, jonka läpimenon jälkeen haaran muutokset saavat aikataulun lähettämään rakentamispyynnön. SISÄÄN rakentajien nimet nimi ilmoitetaan rakentaja-a, jonka asetamme hieman myöhemmin. Nimi tässä tapauksessa on sama kuin projektin nimi: sinun projektisi.

ForceScheduler hyvin yksinkertainen asia. Tämän tyyppinen aikataulu käynnistyy hiiren napsautuksella BuildBot-verkkokäyttöliittymä. Parametrit ovat samat kuin kohdassa SingleBranchScheduler.

PS nro 3. Ehkä se tulee tarpeeseen
Ajoittainen on aikataulu, joka kulkee tietyllä aikavälillä. Puhelu näyttää suunnilleen tältä


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äärittää tämän jaksollisuuden ajan sekunneissa.

BuildFactory luo tietyn rakentaa, mikä sitten rakentaja lähettää osoitteeseen Työntekijä. Sisään BuildFactory osoittaa noudatettavat vaiheet Työntekijä-y. Vaiheet lisätään kutsumalla menetelmää addStep

Ensimmäinen lisätty vaihe tässä esimerkissä on git puhdas -d -f -f -x, sitten git kassalla. Nämä toiminnot sisältyvät parametriin menetelmä, jota ei ole ilmaistu selvästi, mutta se tarkoittaa oletusarvoa tuore... Parametri mode='inkrementaalinen' ilmaisee, että tiedostot ovat hakemistosta, jossa chechout, vaikka se puuttuu arkistosta, pysyy koskemattomana.

Toinen lisätty vaihe on skriptin kutsuminen oikeudenkäynti parametrin kanssa hei siinä sivussa Työntekijä-a hakemistosta /home/habr/worker/yourProject/build ympäristömuuttujalla PATHONPATH=... Voit siis kirjoittaa omia skriptejäsi ja suorittaa ne sivulla Työntekijä- joka askeleella util.ShellCommand. Nämä skriptit voidaan sijoittaa suoraan arkistoon. Sitten klo chechout-e ne putoavat /home/habr/worker/yourProject/build. Sitten on kuitenkin kaksi "mutta":

  1. Työntekijä on luotava avaimella --umask jotta se ei estä suoritusoikeuksia sen jälkeen kassa-
  2. At git push-yksi näistä skripteistä sinun on määritettävä ominaisuus parannettavissaniin sitten myöhemmin chechout-e ei menettänyt oikeutta suorittaa Git-skripti.

5.6 rakentajaa


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

Mikä on Rakentaja kerrottiin täällä. Nyt kerron sinulle yksityiskohtaisemmin sen luomisesta. BuilderConfig on rakentaja rakentaja. Sellaisia ​​suunnittelijoita c['rakentajat'] voit määrittää useita, koska tämä on objektiarkki rakentaja tyyppi. Kirjoitetaan nyt esimerkki uudelleen BuildBot, mikä tuo sen lähemmäs tehtäväämme.


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

Nyt kerron sinulle parametreista BuilderConfig.

nimi määrittää nimen rakentaja-a. Tässä annoimme sille nimen sinun projektisi. Tämä tarkoittaa, että päällä Työntekijä- juuri tämä polku luodaan /home/habr/worker/yourProject/build. Sheduler etsii rakentaja juuri tällä nimellä.

työntekijöiden nimet sisältää arkin Työntekijä-s. Jokainen niistä on lisättävä c['työntekijät'].

tehdas - erityinen rakentaa, johon se liittyy rakentaja. Hän lähettää kohteen rakentaa päälle Työntekijä suorittaaksesi kaikki tähän sisältyvät vaiheet rakentaa-

6. Esimerkki omasta kokoonpanostasi

Tässä on esimerkkiprojektiarkkitehtuuri, jota ehdotan toteutettavaksi BuildBot
.

Käytämme versionhallintajärjestelmänä svn. Itse arkisto sijoittuu jonkinlaiseen pilveen. Tässä on tämän pilven osoite svn.host/svn/yourProject/trunk. Pilven alla svn tilillä on käyttäjätunnus: lähettämä, passwd: salasana. Skriptit, jotka edustavat vaiheita rakentaa-a on myös osastolla svn, erillisessä kansiossa buildbot/worker_linux. Nämä komentosarjat sijaitsevat arkistossa, jossa on tallennettu ominaisuus suoritettavan.

BuildMaster и Työntekijä ajaa samalla isännällä projekti.isäntä .BuildMaster tallentaa tiedostonsa kansioon /home/habr/master. Työntekijä se tallennetaan seuraavaan polkuun /koti/habr/työntekijä. Prosessiviestintä BuildMaster-a ja Työntekijä-a suoritetaan portin 4000 kautta protokollan mukaisesti BuildBot-a, eli 'pb' protokollaa.

Kohdeprojekti on kirjoitettu kokonaan Pythonilla. Tehtävänä on seurata sen muutoksia, luoda suoritettava tiedosto, luoda dokumentaatio ja suorittaa testaus. Epäonnistumisen sattuessa kaikkien kehittäjien on lähetettävä sähköpostiviesti, jossa kerrotaan, että toiminto on epäonnistunut.

Web-näyttö BuildBot yhdistämme porttiin 80 varten projekti.isäntä. Apatchia ei tarvitse asentaa. Osana kirjastoa kierretty siellä on jo web-palvelin, BuildBot käyttää sitä.

Sisäisten tietojen tallentamiseen BuildBot käytämme sqlite.

Postitusta varten tarvitaan isäntä smtp.oma.verkkotunnus - se mahdollistaa kirjeiden lähettämisen postista [sähköposti suojattu] ilman todennusta. myös isännässä'smtp Pöytäkirja kuullaan postissa 1025.

Prosessissa on mukana kaksi henkilöä: admin и lähettämä. admin hallinnoi BuildBot. käyttäjä on henkilö, joka sitoutuu sitoutumaan-s.

Suoritettava tiedosto luodaan kautta pyinstaller. Dokumentaatio luodaan kautta happi.

Tätä arkkitehtuuria varten kirjoitin tämän: 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"
}

Ensin tarvitset luoda BuildMaster-a ja Työntekijä-a. Liitä sitten tämä tiedosto master.cfg в /home/habr/master.

Seuraava askel on palvelun käynnistäminen BuildMasters


sudo buildbot start /home/habr/master

Aloita sitten palvelu Työntekijä-a


buildbot-worker start /home/habr/worker

Valmis! Nyt Buildbot seuraa muutoksia ja laukaisee sitoutumaan-y sisään svn, suorittaa projektin rakentamisen ja testauksen vaiheet yllä olevalla arkkitehtuurilla.

Alla kuvailen joitain yllämainittujen ominaisuuksia master.cfg.

6.1 Matkalla master.cfg:lle


Kun kirjoitan minun master.cfg Tehdään monia virheitä, joten lokitiedosto on luettava. Se tallennetaan muodossa BuildMaster-ec absoluuttinen polku /home/habr/master/twistd.log, ja sivulla Työntekijä-a absoluuttisella polulla /home/habr/worker/twistd.log. Kun luet virheen ja korjaat sen, sinun on käynnistettävä palvelu uudelleen BuildMaster-a. Näin se tehdään:


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

6.2 Työskentely svn:n kanssa


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)

Katsotaanpa ensin svn_poller. Tämä on edelleen sama käyttöliittymä, joka säännöllisesti pollaa arkistoa kerran minuutissa. Tässä tapauksessa svn_poller pääsee vain haaraan runko. Salaperäinen parametri split_file=util.svn.split_file_alwaystrunk asettaa säännöt: miten kansiorakenne hajotetaan svn oksilla. Hän tarjoaa heille myös suhteellisia polkuja. puolestaan split_file_alwaystrunk yksinkertaistaa prosessia sanomalla, että arkisto sisältää vain runko.

В Aikataulut ilmoitettu ChangeFilterkuka näkee Ei eristetty ja liittää siihen haaran runko tietyn yhdistyksen mukaan split_file_alwaystrunk. Vastaa muutoksiin runko, Aloittaa rakentaja nimen kanssa sinun projektisi.

ominaisuudet täällä sitä tarvitaan, jotta järjestelmänvalvoja saa postituslistat rakennus- ja testaustuloksista prosessin omistajana.

vaihe rakentaa-a kassa pystyy poistamaan kokonaan kaikki tiedostot, jotka sijaitsevat arkiston paikallisessa versiossa Työntekijä-A. Ja sitten tehdä täysi svn päivitys. Tila konfiguroidaan parametrin avulla tila = täynnä, metodi = tuore... Parametri haltOnTailure sanoo että jos svn päivitys suoritetaan virheellä, koko rakennus- ja testausprosessi tulisi keskeyttää, koska jatkotoimissa ei ole järkeä.

6.3 Kirje sinulle: toimittajilla on oikeus ilmoittaa


Toimittajat on palvelu ilmoitusten lähettämiseen sähköpostitse.


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]

Hän osaa lähettää viestejä eri tavoilla.

MailNotifier käyttää sähköpostia ilmoitusten lähettämiseen.

template_html asettaa uutiskirjeen tekstimallin. HTML:ää käytetään merkintöjen luomiseen. Sitä muokkaa moottori jinja2 (voidaan verrata Django). BuildBot sisältää joukon muuttujia, joiden arvot korvataan malliin viestin tekstin luomisen aikana. Nämä muuttujat on suljettu {{ double curly aaltosulkeisiin }}. Esimerkiksi, yhteenveto näyttää suoritettujen toimintojen tilan, eli onnistumisen tai epäonnistumisen. A hankkeet tulee ulos sinun projektisi. Joten käyttämällä ohjauskomentoja sisään jinja2, muuttujat BuildBot-a ja python-merkkijonojen muotoilutyökalut, voit luoda varsin informatiivisen viestin.

MailNotifier sisältää seuraavat argumentit.

fromaddr – osoite, josta kaikki saavat uutiskirjeen.

lähetä kiinnostuneille käyttäjille=True lähettää viestin tekijälle ja käyttäjälle sitoutumaan.

Katso ylös — pääte, joka on lisättävä uutiskirjeen vastaanottavien käyttäjien nimiin. Niin admin miten käyttäjä saa uutiskirjeen osoitteeseen [sähköposti suojattu].

välityspalvelin määrittää isäntänimen, jolla palvelin avataan smtp, The smptPort määrittää kuuntelevan portin numeron smtp palvelin.

mode="varoitus" sanoo, että postitus tulisi tehdä vain, jos siinä on vähintään yksi vaihe rakentaa-a, joka päättyi tilavirheeseen tai varoitukseen. Menestyksen tapauksessa uutiskirjettä ei tarvitse lähettää.

ylimääräiset vastaanottajat sisältää luettelon henkilöistä, joille postitus tulee lähettää omistajan ja sen suorittaneen henkilön lisäksi sitoutumaan.

messageFormatter on objekti, joka määrittää viestin muodon, sen mallin ja joukon muuttujia, joista on saatavilla jinja2. Vaihtoehdot kuten wantProperties=True и wantSteps = Totta määrittää tämän joukon käytettävissä olevia muuttujia.

with['services']=[sendMessageToAll] tarjoaa luettelon palveluista, joihin kuuluu myös meidän toimittaja.

Me teimme sen! Onnittelut

Loimme oman kokoonpanomme ja näimme sen toiminnallisuuden. BuildBot. Tämä mielestäni riittää ymmärtämään, tarvitaanko tätä työkalua projektisi luomiseen. Oletko kiinnostunut hänestä? Onko siitä sinulle hyötyä? Onko hänen kanssaan mukava työskennellä? Sitten en kirjoita tätä artikkelia turhaan.

Ja kauemmas. Haluaisin ammatillisen yhteisön käyttävän BuildBot, laajeni, käsikirjoja käännettiin ja esimerkkejä oli vielä enemmän.

Kiitos kaikille huomiosta. Onnea.

Lähde: will.com

Lisää kommentti