Ib qho piv txwv ntawm kev siv txuas ntxiv nrog BuildBot

Ib qho piv txwv ntawm kev siv txuas ntxiv nrog BuildBot
(Image los ntawm Computerizer los ntawm Pixabay)

Nyob zoo!

Kuv npe Evgeniy Cherkin, Kuv yog ib tug programmer ntawm pab pawg txhim kho ntawm lub tuam txhab mining Polymetal.

Thaum pib ib qhov project loj, koj pib xav: "Dab tsi software yog qhov zoo tshaj los siv los tswj nws?" Ib txoj haujlwm IT mus dhau ntau theem ua ntej tso tawm cov ntawv tom ntej. Nws yog qhov zoo thaum cov saw hlau ntawm cov theem no yog automated. Cov txheej txheem automated ntawm kev tso tawm ib qho tshiab ntawm IT project nws tus kheej hu ua Nruam Kev Nrhav. BuildBot tau dhau los ua tus pabcuam zoo rau peb hauv kev siv cov txheej txheem no.

Hauv tsab xov xwm no kuv tau txiav txim siab los muab cov ntsiab lus ntawm qhov ua tau BuildBot. Qhov no software muaj peev xwm yog dab tsi? Yuav ua li cas mus cuag nws thiab yuav ua li cas los tsim kom muaj ib tug zoo ua hauj lwm kev sib raug zoo nrog nws? Koj tuaj yeem siv peb cov kev paub dhau los ntawm koj tus kheej los ntawm kev tsim cov kev pabcuam ua haujlwm rau kev tsim thiab sim koj qhov project ntawm koj lub tshuab.

Txheem

Txheem

1. Vim li cas BuildBot?
2. Lub tswv yim coj los ntawm BuildMaster
3. Kev teeb tsa
4. Thawj kauj ruam

5. Kev teeb tsa. Kauj ruam los ntawm kauj ruam daim ntawv qhia

5.1 BuildmasterConfig
5.2 neeg ua haujlwm
5.3 hloov_source
5.4 cov txheej txheem

5.5 BuildFactory
5.6 tus tsim

6. Piv txwv ntawm koj tus kheej configuration

6.1 Ntawm txoj kev mus rau koj tus tswv.cfg
6.2 Ua haujlwm nrog svn
6.3 Tsab ntawv rau koj: cov neeg sau xov xwm raug tso cai tshaj tawm

Peb tau ua! Nrog koj zoo siab

1. Vim li cas BuildBot?

Yav dhau los ntawm habr-e kuv tuaj hla cov lus hais txog kev siv Nruam Kev Nrhav siv BuildBot... Piv txwv li, Qhov no Kuv pom nws cov ntaub ntawv tshaj plaws. Muaj lwm qhov piv txwv - yooj yim dua. Cov khoom no tuaj yeem ua raws caij nyoog piv txwv los ntawm phau ntawvthiab nws tom qab ntawd, hauv lus Askiv. Lub coupe ua qhov pib zoo. Tom qab nyeem cov ntawv no, tej zaum koj yuav xav tau ib yam dab tsi tam sim ntawd BuildBot ua.

Nres! Puas muaj leej twg tau siv nws hauv lawv cov haujlwm? Nws hloov tawm yog ntau siv nws hauv lawv txoj haujlwm. nrhiav tau piv txwv ua si BuildBot thiab hauv Google code archives.

Yog li dab tsi yog qhov logic ntawm cov neeg siv Buildbot? Tom qab tag nrho, muaj lwm yam cuab yeej: CruiseControl и Jenkins. Kuv yuav teb li no. Rau feem ntau cov haujlwm Jenkins thiab qhov tseeb yuav txaus. Nyob rau hauv nws lem, BuildBot - ntau yoog raws, thaum muaj teeb meem daws tau yooj yim li hauv Jenkins. Qhov kev xaiv yog koj li. Tab sis txij li thaum peb tab tom nrhiav ib lub cuab yeej rau kev tsim lub hom phiaj, vim li cas ho tsis xaiv ib qho uas yuav tso cai, pib los ntawm cov kauj ruam yooj yim, kom tau txais kev tsim kho uas muaj kev sib cuam tshuam thiab qhov sib txawv tshwj xeeb.

Rau cov neeg uas nws lub hom phiaj yog sau rau hauv python, cov lus nug tshwm sim: "Vim li cas ho tsis xaiv ib qho kev sib koom ua ke uas muaj qhov cuam tshuam meej ntawm cov lus siv hauv qhov project?" Thiab tam sim no nws yog lub sijhawm los nthuav qhia cov txiaj ntsig BuildBot.

Yog li, peb "instrumental quartet". Rau kuv tus kheej, kuv tau txheeb xyuas plaub yam BuildBot:

  1. Nws yog ib qho kev qhib lub moj khaum raws li GPL daim ntawv tso cai
  2. Qhov no yog kev siv python ua ib qho cuab yeej teeb tsa thiab piav qhia txog cov haujlwm uas yuav tsum tau ua
  3. Qhov no yog lub sijhawm kom tau txais cov lus teb los ntawm lub tshuab uas lub rooj sib txoos tshwm sim
  4. Cov no yog, thaum kawg, yam tsawg kawg nkaus uas yuav tsum tau ua rau tus tswv. Kev xa mus yuav tsum tau python thiab twisted, thiab tsis xav tau lub tshuab virtual thiab java tshuab.

2. Lub tswv yim coj los ntawm BuildMaster

Ib qho piv txwv ntawm kev siv txuas ntxiv nrog BuildBot

Central rau lub luag haujlwm faib architecture yog BuildMaster. Nws yog ib qho kev pabcuam uas:

  • lem hloov nyob rau hauv qhov project qhov chaw tsob ntoo
  • xa cov lus txib uas yuav tsum tau ua los ntawm Cov Neeg Ua Haujlwm Pabcuam los tsim qhov project thiab sim nws
  • ceeb toom cov neeg siv hais txog cov txiaj ntsig ntawm kev nqis tes ua

BuildMaster configured ntawm cov ntaub ntawv xib.cfg. Cov ntaub ntawv no yog nyob rau hauv lub hauv paus BuildMaster. Tom qab ntawd kuv yuav qhia yuav ua li cas lub hauv paus no yog tsim. Cov ntaub ntawv nws tus kheej xib.cfg muaj cov ntawv python uas siv hu BuildBot.

Tom ntej no tseem ceeb tshaj plaws BuildBot muaj npe Tus neeg ua haujlwm. Qhov kev pabcuam no tuaj yeem tsim tawm ntawm lwm tus tswv tsev nrog lub OS sib txawv, lossis tej zaum ntawm qhov chaw BuildMaster. Nws kuj tseem tuaj yeem muaj nyob hauv ib puag ncig tshwj xeeb uas tau npaj virtual nrog nws cov pob khoom thiab hloov pauv. Cov chaw virtual no tuaj yeem npaj siv cov khoom siv python zoo li virtualenv, kev.

BuildMaster tshaj tawm cov lus txib rau txhua tus Tus neeg ua haujlwm-y, thiab nws, nyob rau hauv lem, ua kom tiav lawv. Ntawd yog, nws hloov tawm tias cov txheej txheem ntawm kev tsim thiab sim ib qhov project tuaj yeem mus Tus neeg ua haujlwm-e khiav Windows thiab ntawm lwm tus neeg ua haujlwm khiav Linux.

Txheeb xyuas project source codes tshwm sim ntawm txhua tus Tus neeg ua haujlwm-e.

3. Kev teeb tsa

Yog li, cia peb mus. Kuv yuav siv Ubuntu 18.04 ua tus tswv tsev. Kuv mam li tso ib qho rau nws BuildMaster-a ib Tus neeg ua haujlwm-a. Tab sis ua ntej koj yuav tsum nruab python3.7:

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

Rau cov neeg xav tau python3.7.2 hloov 3.7.1, koj tuaj yeem ua cov hauv qab no:


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

Cov kauj ruam tom ntej yog rau nruab Tweeted и BuildBot, nrog rau cov pob khoom uas tso cai rau koj siv cov haujlwm ntxiv BuildBot-Qhov.


/*Все что под 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. Thawj kauj ruam

Lub sijhawm tsim BuildMaster. Nws yuav nyob hauv peb daim ntawv tais ceev tseg /home/habr/master.

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

Kauj ruam tom ntej. Wb tsim Tus neeg ua haujlwm. Nws yuav nyob hauv peb daim ntawv tais ceev tseg /home/habr/worker.

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

Thaum koj khiav Tus neeg ua haujlwm, ces los ntawm lub neej ntawd nws yuav tsim nyob rau hauv /home/habr/worker folder nrog lub npe ntawm qhov project, uas tau teev nyob rau hauv xib.cfg. Thiab nyob rau hauv lub nplaub tshev nrog lub npe ntawm qhov project nws yuav tsim ib tug directory tsim, thiab yuav ua ntxiv mus checkout. Ua haujlwm directory rau Tus neeg ua haujlwm-thiab nws yuav dhau los ua ib phau ntawv /home/habr/yourProject/build.

"Golden Key
Thiab tam sim no qhov kuv tau sau cov kab lus dhau los rau: ib tsab ntawv uas Master yuav thov los ntawm Tus neeg ua haujlwm-thiab ua nyob deb hauv phau ntawv no yuav tsis raug tua vim tias tsab ntawv tsis muaj cai khiav. Txhawm rau kho qhov xwm txheej, koj yuav xav tau tus yuam sij --umask=0o22, uas txwv tsis pub sau rau daim ntawv teev npe no, tab sis yuav khaws cov cai tso tawm. Thiab qhov ntawd yog txhua yam peb xav tau.

BuildMaster и Tus neeg ua haujlwm tsim kom muaj kev sib txuas nrog ib leeg. Nws tshwm sim tias nws tawg tawm thiab Tus neeg ua haujlwm tos qee lub sij hawm rau cov lus teb los ntawm BuildMaster-A. Yog tias tsis muaj lus teb, kev sib txuas yog rov pib dua. Ntsiab --keepalive=60 tsuas yog xav tau los qhia lub sijhawm tom qab ntawd txuas reboots.

5. Kev teeb tsa. Kauj ruam los ntawm kauj ruam daim ntawv qhia

Configuration BuildMaster yog nqa tawm ntawm sab ntawm lub tshuab uas peb tau ua tiav cov lus txib tsim-master. Hauv peb qhov xwm txheej, qhov no yog daim ntawv teev npe /home/habr/master. Configuration file xib.cfg tseem tsis tau muaj, tab sis cov lus txib nws tus kheej twb tau tsim cov ntaub ntawv master.cmg.sample. Koj yuav tsum tau hloov npe rau nws master.cfg.sample в xib.cfg

mv master.cfg.sample master.cfg

Cia peb qhib qhov no xib.cfg. Thiab cia saib seb nws muaj dab tsi. Thiab tom qab ntawd, cia peb sim ua peb tus kheej cov ntaub ntawv teeb tsa.

xib.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 - phau ntawv txhais lus yooj yim ntawm cov ntaub ntawv teeb tsa. Nws yuav tsum muaj nyob rau hauv cov ntaub ntawv configuration. Rau kev yooj yim ntawm kev siv, ib tug alias yog qhia nyob rau hauv lub configuration code "c". Cov npe yuam sij в c["keyFromDist"] yog cov ntsiab lus ruaj rau kev sib cuam tshuam nrog BuildMaster. Rau txhua tus yuam sij, cov khoom sib thooj raug hloov ua tus nqi.

5.2 neeg ua haujlwm

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

Lub sijhawm no peb qhia BuildMaster-y lis Tus neeg ua haujlwm-s. Kuv tus kheej Tus neeg ua haujlwm peb tsim ntau dua, qhia koj-neeg ua haujlwm-npe и lo lus zais. Tam sim no lawv yuav tsum tau teev tseg piv txwv-tus neeg ua haujlwm и dhau .

5.3 hloov_source

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

Los ntawm tus yuam sij change_source phau ntawv txhais lus c peb tau txais kev nkag mus rau cov npe uas peb xav muab ib yam khoom uas pov npav rau qhov chaw cia nrog qhov project qhov chaws. Qhov piv txwv siv Git repository uas tau xaiv los ntawm qee lub sijhawm.

Thawj qhov kev sib cav yog txoj hauv kev rau koj qhov chaw cia khoom.

ua haujlwm sawv cev rau txoj kev mus rau lub nplaub tshev uas nyob rau sab Tus neeg ua haujlwm- ib tug txheeb ze rau txoj kev /home/habr/worker/yourProject/build git yuav khaws lub zos version ntawm lub repository.

ceg muaj ib ceg nyob rau hauv lub repository uas yuav tsum tau ua raws li.

pollInterval muaj tus naj npawb ntawm cov vib nas this tom qab ntawd BuildMaster yuav ntsuam xyuas lub repository rau kev hloov.

Muaj ntau txoj hauv kev los taug qab cov kev hloov pauv rau qhov project qhov chaw cia khoom.

Txoj kev yooj yim tshaj yog Tus xaiv, uas txhais tau tias BuildMaster periodically polls lub server nrog lub repository. Yog cog lus reflected cov kev hloov nyob rau hauv lub repository, ces BuildMaster yuav tsim ib qho khoom siv nrog qee qhov qeeb hloov thiab xa mus rau tus neeg tuav ntaub ntawv Teem sijhawm, uas yuav tso tawm cov kauj ruam los tsim thiab sim qhov project ntawm Tus neeg ua haujlwm-e. Ntawm cov kauj ruam no yuav qhia update chaw cia khoom. Raws nraim li Tus neeg ua haujlwmQhov no yuav tsim ib daim ntawv luam hauv zos ntawm lub chaw khaws cia. Cov ntsiab lus ntawm cov txheej txheem no yuav hais hauv qab no hauv ob ntu tom ntej. (5.4 и 5.5).

Ib txoj hauv kev zoo tshaj plaws ntawm kev taug qab cov kev hloov pauv mus rau qhov chaw cia khoom yog xa cov lus ncaj qha los ntawm server hosting nws mus rau BuildMaster- hais txog kev hloov qhov project source codes. Hauv qhov no, sai li sai tau thaum tus tsim tawm ua cog lus, tus neeg rau zaub mov nrog qhov project repository yuav xa lus BuildMaster-y. Thiab nws, nyob rau hauv lem, yuav cuam tshuam nws los ntawm kev tsim ib yam khoom PBCchangeSource. Tom ntej no, cov khoom no yuav raug xa mus rau Teem sijhawm, uas qhib cov kauj ruam los tsim qhov project thiab sim nws. Ib qho tseem ceeb ntawm txoj kev no yog ua haujlwm nrog nuv- server scripts nyob rau hauv lub repository. Hauv tsab ntawv nuv-a, lub luag haujlwm rau kev ua haujlwm thaum cog lus-e, koj yuav tsum hu rau qhov chaw siv hluav taws xob xa pauv thiab qhia qhov chaw nyob network BuildMaster-A. Koj kuj yuav tsum tau qhia lub network chaw nres nkoj uas yuav mloog PBCchangeSource. PBCchangeSource, los ntawm txoj kev, yog ib feem BuildMaster-A. Txoj kev no yuav xav tau kev tso cai admin-a ntawm lub server qhov twg qhov project repository nyob. Koj yuav tsum xub ua ib tug thaub qab ntawm lub repository.

5.4 cov txheej txheem


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

cov teem sijhawm - qhov no yog ib qho tseem ceeb uas ua raws li qhov tshwm sim uas pib tag nrho cov saw ntawm kev sib dhos thiab kev sim ntawm qhov project.
Ib qho piv txwv ntawm kev siv txuas ntxiv nrog BuildBot

Cov kev hloov pauv uas tau sau tseg change_source, hloov pauv hauv cov txheej txheem ua haujlwm BuildBot-ib to object hloov thiab tam sim no txhua Sheduler raws li lawv, nws tsim kev thov kom pib qhov project tsim txheej txheem. Txawm li cas los xij, nws tseem txiav txim siab thaum twg cov kev thov no raug xa mus ntxiv rau cov kab. Ib yam khoom Builder khaws cov kab ntawm kev thov thiab taug qab lub xeev ntawm lub rooj sib txoos tam sim no ntawm ib qho cais Tus neeg ua haujlwm-e. Builder muaj nyob rau BuildMaster-e thiab lwm yam Tus neeg ua haujlwm-e. Nws xa nrog BuildMaster-ib on Tus neeg ua haujlwm-thiab twb hais meej tsim - ib tug series ntawm cov kauj ruam uas yuav tsum tau ua raws li.
Peb pom tias hauv qhov piv txwv tam sim no xws li cov teem sijhawm 2 daim yog tsim. Ntxiv mus, txhua tus muaj nws tus kheej hom.

SingleBranchScheduler - ib qho ntawm cov chav kawm nrov tshaj plaws ntawm lub sijhawm. Nws saib ib ceg thiab ua rau muaj kev hloov pauv hauv nws. Thaum nws pom cov kev hloov pauv, nws tuaj yeem ncua sijhawm xa daim ntawv thov tsim (hloov mus rau lub sijhawm teev tseg hauv qhov tshwj xeeb parameter treeStableTimer)). IN lub npe teem lub npe ntawm lub sij hawm uas yuav tsum tau muab tso rau hauv BuildBot- web interface. IN ChangeFilter lub lim tau teem tseg, tom qab dhau qhov kev hloov pauv ntawm ceg ntoo kom lub sijhawm xa daim ntawv thov kev tsim kho. IN builderNames npe yog qhia builder-a, uas peb yuav teem me ntsis tom qab. Lub npe hauv peb rooj plaub yuav zoo ib yam li lub npe ntawm qhov project: koj qhov project.

ForceScheduler ib qho yooj yim heev. Hom lub sij hawm no yog tshwm sim los ntawm tus nas nyem los ntawm BuildBot- web interface. Parameters muaj tib lub ntsiab lus zoo li hauv SingleBranchScheduler.

PS nr 3. Tej zaum nws yuav los ua ke
Sijhawm yog ib lub sij hawm uas khiav ntawm ib lub sij hawm-taw zaus. Kev hu zoo li no


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 qhia lub sij hawm ntawm no periodicity nyob rau hauv vib nas this.

BuildFactory tsim ib qho tshwj xeeb tsim, uas ces builder xa mus Tus neeg ua haujlwm. Cov BuildFactory qhia cov kauj ruam yuav tsum ua raws Tus neeg ua haujlwm-y. Cov kauj ruam yog ntxiv los ntawm kev hu rau txoj kev addStep

Thawj kauj ruam ntxiv hauv qhov piv txwv no yog git huv -d -f -f -xces git tawm. Cov kev ua no muaj nyob rau hauv parameter txoj kev, uas tsis tau hais meej tab sis implies tus nqi default tshiab. Parameter hom = 'incremental' qhia tias cov ntaub ntawv yog los ntawm cov directory qhov twg chechout, thaum uas ploj lawm los ntawm qhov chaw cia, nyob twj ywm untouched.

Cov kauj ruam thib ob ntxiv yog hu rau tsab ntawv mus sib hais nrog parameter nyob zoo ntawm sab Tus neeg ua haujlwm-a los ntawm directory /home/habr/worker/yourProject/build nrog rau ib puag ncig hloov pauv PATHONPATH =... Yog li, koj tuaj yeem sau koj tus kheej cov ntawv thiab ua rau lawv ntawm sab Tus neeg ua haujlwm-ib txhua kauj ruam siv.ShellCommand. Cov ntawv sau no tuaj yeem muab tso ncaj qha rau hauv qhov chaw cia khoom. Ces ntawm chechout-e lawv yuav poob rau hauv /home/habr/worker/yourProject/build. Txawm li cas los xij, muaj ob "tab sis":

  1. Tus neeg ua haujlwm yuav tsum tau tsim nrog tus yuam sij --ua kom nws tsis thaiv txoj cai ua tom qab checkout-Qhov.
  2. ntawm git laub-e ntawm cov ntawv sau no koj yuav tsum tau qhia cov cuab yeej exacutableyog li ntawd tom qab chechout-e tsis poob txoj cai los ua Git tsab ntawv.

5.6 tus tsim


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

Hais txog dab tsi nws yog Builder tau hais no. Tam sim no kuv yuav qhia rau koj paub ntau ntxiv txog yuav ua li cas tsim nws. BuilderConfig yog tus tsim builder. Xws li designers nyob rau hauv c ['builders'] koj tuaj yeem qhia ntau yam, vim qhov no yog ib daim ntawv ntawm cov khoom builder hom. Tam sim no cia peb rov sau cov piv txwv ntawm BuildBot, coj nws los ze zog rau peb txoj haujlwm.


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

Tam sim no kuv yuav qhia koj txog cov kev txwv BuilderConfig.

lub npe qhia lub npe builder-a. Ntawm no peb hu nws koj qhov project. Qhov no txhais tau tias nyob rau Tus neeg ua haujlwm- txoj kev no yuav raug tsim /home/habr/worker/yourProject/build. Sheduler nrhiav builder tsuas yog los ntawm lub npe no.

cov npe neeg ua haujlwm muaj ntawv Tus neeg ua haujlwm-s. Txhua yam uas yuav tsum tau ntxiv rau c ['cov neeg ua haujlwm'].

Hoobkas - tshwj xeeb tsim, uas nws yog txuam builder. Nws yuav xa khoom tsim rau Tus neeg ua haujlwm kom ua tiav tag nrho cov kauj ruam suav nrog hauv qhov no tsim-Qhov.

6. Piv txwv ntawm koj tus kheej configuration

Nov yog qhov piv txwv qhov project architecture uas kuv thov kom siv los ntawm BuildBot
.

Peb yuav siv raws li ib tug version tswj system svn. Lub repository nws tus kheej yuav nyob rau hauv tej yam huab. Ntawm no yog qhov chaw nyob ntawm huab svn.host/svn/yourProject/cov. Hauv huab hauv qab svn muaj ib tug account username: cov neeg siv, passwd: lo lus zais. Scripts uas sawv cev rau cov kauj ruam tsim-ib kuj yuav nyob rau hauv ceg svn, nyob rau hauv ib daim ntawv tais ceev tseg buildbot/worker_linux. Cov ntawv sau no nyob hauv qhov chaw khaws cia nrog cov khoom khaws cia tua tau.

BuildMaster и Tus neeg ua haujlwm khiav ntawm tib tus tswv tsev project.host .BuildMaster khaws nws cov ntaub ntawv rau hauv ib daim ntawv tais ceev tseg /home/habr/master. Tus neeg ua haujlwm nws yog khaws cia rau hauv txoj kev hauv qab no /home/habr/worker. Txheej txheem kev sib txuas lus BuildMaster-a thiab Tus neeg ua haujlwm-a yog nqa tawm los ntawm chaw nres nkoj 4000 raws li txoj cai BuildBot-a, yog 'pb' raws tu qauv.

Lub phiaj xwm phiaj xwm tau sau tag nrho hauv Python. Lub luag haujlwm yog taug qab nws cov kev hloov pauv, tsim cov ntaub ntawv ua tiav, tsim cov ntaub ntawv, thiab ua qhov kev sim. Nyob rau hauv cov ntaub ntawv ntawm tsis ua hauj lwm, tag nrho cov developers yuav tsum tau xa ib cov lus los ntawm email hais tias muaj ib tug ua tsis tiav.

Web zaub BuildBot peb yuav txuas rau qhov chaw nres nkoj 80 rau project.host. Nws tsis tsim nyog rau nruab Apatch. Raws li ib feem ntawm lub tsev qiv ntawv twisted twb muaj web server lawm, BuildBot siv nws.

Txhawm rau khaws cov ntaub ntawv sab hauv rau BuildBot .дем использовать sqlite.

Yuav tsum muaj tus tswv tsev rau kev xa ntawv smtp.your.domain - nws tso cai xa ntawv los ntawm kev xa ntawv [email tiv thaiv] tsis muaj authentication. Kuj ntawm tus tswv tsev 'SMTP ' Cov feeb tau hnov ​​​​txog 1025.

Muaj ob tus neeg koom nrog hauv cov txheej txheem: admin и cov neeg siv. admin tswj BuildBot. tus neeg siv yog tus neeg ua txhaum cog lus-s.

Exacutable cov ntaub ntawv yog generated ntawm pyinstaller. Cov ntaub ntawv yog tsim los ntawm doxygen.

Rau qhov architecture no kuv sau qhov no: xib.cfg:

xib.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"
}

Ua ntej koj xav tau tsim BuildMaster-a thiab Tus neeg ua haujlwm-a. Ces paste cov ntaub ntawv no xib.cfg в /home/habr/master.

Cov kauj ruam tom ntej yog pib qhov kev pabcuam BuildMasteraa


sudo buildbot start /home/habr/master

Tom qab ntawd pib qhov kev pabcuam Tus neeg ua haujlwm-a


buildbot-worker start /home/habr/worker

Npaj txhij! Tam sim no Buildbot yuav taug qab kev hloov pauv thiab ua rau cog lus-y ib svn, ua cov kauj ruam ntawm lub tsev thiab sim ib qhov project nrog rau saum toj no architecture.

Hauv qab no kuv yuav piav qhia txog qee yam ntawm cov saum toj no xib.cfg.

6.1 Ntawm txoj kev mus rau koj tus tswv.cfg


Thaum sau kuv xib.cfg Ntau qhov yuam kev yuav raug ua, yog li nyeem cov ntawv teev lus yuav tsum tau ua. Nws yog khaws cia li BuildMaster-ec absolute txoj kev /home/habr/master/twistd.log, thiab ntawm sab Tus neeg ua haujlwm-ib txoj hauv kev /home/habr/worker/twistd.log. Thaum koj nyeem qhov yuam kev thiab kho nws, koj yuav tsum rov pib qhov kev pabcuam BuildMaster-a. Nov yog qhov nws ua tiav:


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

6.2 Ua haujlwm nrog 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)

Ua ntej, cia peb ua tib zoo saib svn_cov. Qhov no tseem yog tib lub interface, tsis tu ncua xaiv cov chaw khaws cia ib feeb. Hauv qhov no svn_cov tsuas yog nkag mus rau ceg pob tw. Mysterious parameter split_file=util.svn.split_file_alwaystrunk teeb tsa cov cai: yuav ua li cas thiaj li rhuav tshem cov qauv ntawv tais ceev tseg svn ntawm ceg. Nws kuj muab lawv txoj kev txheeb ze. Nyob rau hauv nws lem split_file_alwaystrunk simplifies tus txheej txheem los ntawm hais tias lub repository tsuas muaj pob tw.

В Teem sijhawm qhia ChangeFilterleej twg pom tsis muaj leej twg thiab koom ib ceg nrog nws pob tw raws li lub koom haum muab los ntawm split_file_alwaystrunk. Teb rau kev hloov hauv pob tw, Launches builder nrog npe koj qhov project.

zog ntawm no nws yog qhov xav tau kom tus thawj tswj hwm tau txais cov npe xa ntawv ntawm kev tsim thiab kev sim cov txiaj ntsig raws li tus tswv ntawm cov txheej txheem.

Kauj ruam tsim-a checkout muaj peev xwm tshem tawm tag nrho cov ntaub ntawv nyob rau hauv lub zos version ntawm lub repository Tus neeg ua haujlwm-A. Thiab ces ua tag nrho svn kev. Cov hom yog configured los ntawm cov parameter hom = puv, method = tshiab. Parameter nresOnTailure hais tias yog svn kev yuav raug txiav txim nrog qhov yuam kev, tom qab ntawd tag nrho cov txheej txheem ntawm lub tsev thiab kev sim yuav tsum tau muab tshem tawm, vim tias kev ua haujlwm ntxiv tsis ua rau muaj kev nkag siab zoo.

6.3 Tsab ntawv rau koj: cov neeg sau xov xwm raug tso cai tshaj tawm


reporters yog ib qho kev pabcuam xa cov ntawv ceeb toom los ntawm email.


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]

Nws tuaj yeem xa xov txawv txoj kev.

MailNotifier siv email xa cov ntawv ceeb toom.

template_html teeb cov ntawv template rau cov ntawv xov xwm. HTML yog siv los tsim markup. Nws yog hloov kho los ntawm lub cav jinj 2 (yuav muab piv nrog django ua). BuildBot muaj cov txheej txheem sib txawv uas nws cov txiaj ntsig tau hloov pauv mus rau hauv cov qauv thaum lub sijhawm tsim cov ntawv xov xwm. Cov kev hloov pauv no tau muab ntim rau hauv {{ ob chav curly braces }}. Piv txwv li, Cov ntsiab lus qhia txog cov xwm txheej ntawm kev ua tiav, uas yog, ua tiav lossis tsis ua tiav. A tej yaam num yuav tso zis koj qhov project. Yog li, siv cov kev tswj hwm hauv jinj 2, sib txawv BuildBot-a thiab python txoj hlua formatting cov cuab yeej, koj tuaj yeem tsim cov lus qhia zoo heev.

MailNotifier muaj cov lus sib cav hauv qab no.

los ntawmaddr - qhov chaw nyob uas txhua tus yuav tau txais tsab ntawv xov xwm.

sendToInterestedUsers=True xa lus rau tus tswv thiab cov neeg siv uas tsim cog lus.

lookup - lub ntsiab lus uas yuav tsum tau ntxiv rau cov npe ntawm cov neeg siv tau txais tsab ntawv xov xwm. Yog li admin yuav ua li cas tus neeg siv yuav tau txais tsab ntawv xov xwm ntawm qhov chaw nyob [email tiv thaiv].

relayhost qhia lub hostname uas lub server qhib SMTP, ib tug smptPort qhia tus lej chaw nres nkoj uas mloog SMTP server.

hom = "ceeb toom" hais tias kev xa ntawv yuav tsum tsuas yog ua tiav yog tias muaj tsawg kawg ib kauj ruam tsim-a, uas xaus nrog cov xwm txheej tsis ua haujlwm lossis ceeb toom. Nyob rau hauv cov ntaub ntawv ntawm kev vam meej, tsis tas yuav xa ib tsab ntawv xov xwm.

extraRecipients muaj cov npe ntawm cov neeg uas xa ntawv yuav tsum xa mus ntxiv rau tus tswv thiab tus neeg ua haujlwm cog lus.

messageFormatter yog ib yam khoom uas qhia cov hom ntawv, nws cov template, thiab ib pawg ntawm cov variables muaj los ntawm jinj 2. Kev xaiv xws li xavProperties = True и xavSteps=True txhais cov txheej txheem muaj nyob.

with['services']=[sendMessageToAll] muab ib daim ntawv teev cov kev pabcuam, uas peb yuav yog reporter.

Peb tau ua! Nrog koj zoo siab

Peb tsim peb tus kheej configuration thiab pom cov functionality uas nws muaj peev xwm. BuildBot. Qhov no, kuv xav tias, txaus kom nkag siab seb qhov cuab yeej no puas xav tau los tsim koj qhov project. Koj puas txaus siab rau nws? Nws puas yuav muaj txiaj ntsig rau koj? Nws puas nyiam ua haujlwm nrog? Tom qab ntawd kuv tsis sau tsab xov xwm no hauv vain.

Thiab ntxiv. Kuv xav kom cov kws tshaj lij hauv zej zog siv BuildBot, tau dav dua, phau ntawv txhais lus tau muab txhais, thiab muaj ntau dua piv txwv.

Ua tsaug rau nej txhua tus los mloog. Hmoov zoo.

Tau qhov twg los: www.hab.com

Ntxiv ib saib