Apeere ti imuse Integration Ilọsiwaju nipa lilo BuildBot

Apeere ti imuse Integration Ilọsiwaju nipa lilo BuildBot
(Aworan nipasẹ Computerizer lati Pixabay)

Hi!

Orukọ mi ni Evgeniy Cherkin, Mo jẹ oluṣeto eto lori ẹgbẹ idagbasoke ni ile-iṣẹ iwakusa kan Polymetal.

Nigbati o ba bẹrẹ iṣẹ akanṣe nla eyikeyi, o bẹrẹ lati ronu: “Kini sọfitiwia dara julọ lati lo lati ṣetọju rẹ?” Ise agbese IT kan lọ nipasẹ nọmba awọn ipele ṣaaju idasilẹ ẹya atẹle. O dara nigbati pq ti awọn ipele wọnyi jẹ adaṣe. Ilana adaṣe ti idasilẹ ẹya tuntun ti iṣẹ akanṣe IT funrararẹ ni a pe Imudarasi Tẹsiwaju. BuildBot ti jade lati jẹ oluranlọwọ to dara fun wa ni imuse ilana yii.

Ninu nkan yii Mo pinnu lati pese akopọ ti awọn iṣeeṣe BuildBot. Kini software yi lagbara lati? Bii o ṣe le sunmọ ọdọ rẹ ati bii o ṣe le kọ IṢẸRỌ IṢẸRỌ IṢẸ DỌRỌ deede pẹlu rẹ? O le lo iriri wa funrararẹ nipa ṣiṣẹda iṣẹ ṣiṣe fun kikọ ati idanwo iṣẹ akanṣe rẹ lori ẹrọ rẹ.

Awọn akoonu

Awọn akoonu

1. Kí nìdí BuildBot?
2. Erongba dari BuildMaster
3. fifi sori
4. Awọn igbesẹ akọkọ

5. Iṣeto ni. Igbese nipa igbese ohunelo

5.1 BuildmasterConfig
Awọn oṣiṣẹ 5.2
5.3 change_orisun
5.4 iṣeto

5.5 BuildFactory
5.6 ọmọle

6. Apeere ti ara rẹ iṣeto ni

6.1 Ni ọna oluwa rẹ.cfg
6.2 Nṣiṣẹ pẹlu svn
6.3 Lẹta si ọ: Awọn oniroyin ni aṣẹ lati kede

A ṣe! Oriire

1. Kí nìdí BuildBot?

Ni iṣaaju lori habr-e Mo wa awọn nkan nipa imuse Imudarasi Tẹsiwaju lilo BuildBot... Fun apẹẹrẹ, Eyi Mo ti ri ti o julọ ti alaye. Apeere miiran wa - rọrun. Awọn nkan wọnyi le jẹ ti igba apẹẹrẹ lati Afowoyi, ati eyi ni lẹhin ti o, ni English. Kẹkẹ ẹlẹsẹ mẹrin ṣe ibẹrẹ ti o dara. Lẹhin kika awọn nkan wọnyi, o ṣee ṣe lẹsẹkẹsẹ fẹ nkankan lori BuildBot lati ṣe.

Duro! Njẹ ẹnikan ti lo o ni awọn iṣẹ akanṣe wọn? O wa ni jade bẹẹni ọpọlọpọ lo ninu awọn iṣẹ-ṣiṣe wọn. Le ri apeere lilo BuildBot ati ni Google koodu pamosi.

Nítorí náà, ohun ni kannaa ti awọn eniyan lilo Buildbot? Lẹhinna, awọn irinṣẹ miiran wa: CruiseControl и Jenkins. Emi yoo dahun ni ọna yii. Fun ọpọlọpọ awọn iṣẹ-ṣiṣe Jenkins otito yio si to. Ni akoko rẹ, BuildBot - diẹ aṣamubadọgba, nigba ti isoro ti wa ni re nibẹ bi nìkan bi ni Jenkins. Yiyan jẹ tirẹ. Ṣugbọn niwọn bi a ti n wa ọpa fun iṣẹ akanṣe ibi-afẹde kan ti o dagbasoke, kilode ti o ko yan ọkan ti yoo gba laaye, bẹrẹ lati awọn igbesẹ ti o rọrun, lati gba eto kikọ ti o ni ibaraenisepo ati wiwo alailẹgbẹ.

Fun awọn ti a kọ iṣẹ akanṣe ibi-afẹde wọn si Python, ibeere naa dide: “Kilode ti o ko yan eto isọpọ ti o ni wiwo ti o han gbangba ni awọn ofin ti ede ti a lo ninu iṣẹ akanṣe?” Ati nisisiyi o to akoko lati ṣafihan awọn anfani BuildBot.

Nitorinaa, “quartet ohun elo” wa. Fun ara mi, Mo ti mọ awọn ẹya mẹrin BuildBot:

  1. O jẹ ilana orisun ṣiṣi labẹ iwe-aṣẹ GPL
  2. Eyi ni lilo Python bi ohun elo atunto ati apejuwe awọn iṣe ti o nilo
  3. Eyi jẹ aye lati gba esi lati ẹrọ lori eyiti apejọ naa waye
  4. Iwọnyi jẹ, nikẹhin, awọn ibeere to kere julọ fun Gbalejo kan. Imuṣiṣẹ nilo Python ati yiyi, ati pe ko nilo ẹrọ foju ati ẹrọ java.

2. Erongba dari BuildMaster

Apeere ti imuse Integration Ilọsiwaju nipa lilo BuildBot

Central si faaji pinpin iṣẹ-ṣiṣe ni BuildMaster. O jẹ iṣẹ ti:

  • ntọju orin ayipada ninu igi orisun ise agbese
  • rán Awọn aṣẹ ti o yẹ ki o ṣiṣẹ nipasẹ iṣẹ Osise lati kọ iṣẹ akanṣe ati idanwo rẹ
  • leti awọn olumulo nipa awọn abajade ti awọn iṣe ti o ya

BuildMaster tunto nipasẹ faili oluwa.cfg. Faili yii wa ninu gbongbo BuildMaster. Nigbamii Emi yoo fihan bi a ṣe ṣẹda gbongbo yii. Faili funrararẹ oluwa.cfg ni iwe afọwọkọ Python ti o nlo awọn ipe ninu BuildBot.

Next julọ pataki ohun BuildBot ní orúkọ Oṣiṣẹ. Iṣẹ yii le ṣe ifilọlẹ lori agbalejo miiran pẹlu OS ti o yatọ, tabi boya lori ọkan nibiti BuildMaster. O tun le wa ni agbegbe foju ti a pese silẹ ni pataki pẹlu awọn idii tirẹ ati awọn oniyipada. Awọn agbegbe foju wọnyi le ṣe imurasilẹ ni lilo awọn ohun elo Python bii virtualenv, venv.

BuildMaster awọn aṣẹ igbohunsafefe fun gbogbo eniyan Oṣiṣẹ-y, ati on, ni Tan, mu wọn ṣẹ. Iyẹn ni, o wa ni pe ilana ti kikọ ati idanwo iṣẹ akanṣe le tẹsiwaju Oṣiṣẹ-e nṣiṣẹ Windows ati lori Osise miiran nṣiṣẹ Linux.

Ṣayẹwo ise agbese orisun koodu waye lori kọọkan Oṣiṣẹ-e.

3. fifi sori

Nitorina, jẹ ki a lọ. Emi yoo lo Ubuntu 18.04 bi agbalejo naa. Emi yoo gbe ọkan sori rẹ BuildMaster-a ati ọkan Oṣiṣẹ-a. Ṣugbọn akọkọ o nilo lati fi Python3.7 sori ẹrọ:

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

Fun awọn ti o nilo Python3.7.2 dipo 3.7.1, o le ṣe atẹle naa:


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

Igbese ti o tẹle ni lati fi sori ẹrọ Tweeted и BuildBot, bakanna bi awọn idii ti o gba ọ laaye lati lo iṣẹ ṣiṣe afikun BuildBot-Awọn.


/*Все что под 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. Awọn igbesẹ akọkọ

Akoko lati ṣẹda BuildMaster. Yoo wa ninu folda wa /ile/habr/ oluwa.

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

Igbesẹ t’okan. Jẹ ká ṣẹda Oṣiṣẹ. Yoo wa ninu folda wa /ile/habr/osise.

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

Nigbati o ba ṣiṣe Oṣiṣẹ, lẹhinna nipasẹ aiyipada yoo ṣẹda ni /ile/habr/osise folda pẹlu awọn orukọ ti ise agbese, eyi ti o ti wa ni pato ninu oluwa.cfg. Ati ninu awọn folda pẹlu awọn orukọ ti ise agbese ti o yoo ṣẹda a liana kọ, ati pe yoo tẹsiwaju lati ṣe ṣayẹwo. Ṣiṣẹ liana fun Oṣiṣẹ- ati pe yoo di itọsọna kan /home/habr/YourProject/build.

"Golden Key
Ati nisisiyi ohun ti Mo kọ paragira ti tẹlẹ fun: iwe afọwọkọ ti titunto si yoo beere lati Oṣiṣẹ-ati ṣe latọna jijin ni itọsọna yii kii yoo ṣiṣẹ nitori iwe afọwọkọ ko ni awọn igbanilaaye lati ṣiṣẹ. Lati ṣatunṣe ipo naa, iwọ yoo nilo bọtini kan --umask=0o22, eyiti o ṣe idiwọ kikọ si itọsọna yii, ṣugbọn yoo ṣe idaduro awọn ẹtọ ifilọlẹ. Ati pe iyẹn ni gbogbo ohun ti a nilo.

BuildMaster и Oṣiṣẹ fi idi kan asopọ pẹlu kọọkan miiran. O ṣẹlẹ wipe o fi opin si pa ati Oṣiṣẹ nduro fun awọn akoko kan esi lati BuildMaster-A. Ti ko ba si esi, asopọ naa ti tun bẹrẹ. Bọtini --keepalive=60 o kan nilo lati tọka akoko lẹhin eyi so atunbere.

5. Iṣeto ni. Igbese nipa igbese ohunelo

Iṣeto ni BuildMaster ti wa ni ti gbe jade lori awọn ẹgbẹ ti awọn ẹrọ ibi ti a ti ṣiṣẹ pipaṣẹ ṣẹda-titunto si. Ninu ọran wa, eyi jẹ itọsọna kan /ile/habr/ oluwa. Faili iṣeto ni oluwa.cfg ko si tẹlẹ, ṣugbọn aṣẹ funrararẹ ti ṣẹda faili naa tẹlẹ oluwa.cmg.apẹẹrẹ. O nilo lati tun lorukọ rẹ si oluwa.cfg.apẹẹrẹ в oluwa.cfg

mv master.cfg.sample master.cfg

Jẹ ki a ṣii eyi oluwa.cfg. Ati pe jẹ ki a wo ohun ti o ni ninu. Ati lẹhin naa, jẹ ki a gbiyanju lati ṣe faili iṣeto ti ara wa.

oluwa.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 - iwe-itumọ ipilẹ ti faili iṣeto ni. O gbọdọ wa ninu faili iṣeto ni. Fun irọrun ti lilo, inagijẹ ti wa ni afihan ni koodu iṣeto ni "c". Awọn akọle awọn bọtini в c["bọtiniFromDist"] jẹ awọn eroja ti o wa titi fun ibaraenisepo pẹlu BuildMaster. Fun bọtini kọọkan, ohun ti o baamu jẹ aropo bi iye kan.

Awọn oṣiṣẹ 5.2

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

Ni akoko yii a fihan BuildMaster-y akojọ ti awọn Oṣiṣẹ-s. Funrarami Oṣiṣẹ a ṣẹda ti o ga, afihan o-osise-orukọ и ọrọigbaniwọle. Bayi wọn nilo lati wa ni pato dipo apẹẹrẹ-Osise и ṣe .

5.3 change_orisun

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

Nipa bọtini ayipada_orisun iwe-itumọ c a ni iraye si atokọ nibiti a fẹ fi nkan kan ti o ṣe ibo ibi ipamọ pẹlu koodu orisun ti iṣẹ akanṣe naa. Apeere naa nlo ibi ipamọ Git kan ti o jẹ ibo ni awọn aaye arin kan.

Awọn ariyanjiyan akọkọ ni ọna si ibi ipamọ rẹ.

workdir ṣe aṣoju ọna si folda nibiti o wa ni ẹgbẹ Oṣiṣẹ- ibatan si ọna /ile/habr/osise/YourProject/build git yoo tọju ẹya agbegbe ti ibi ipamọ naa.

ti eka ni ẹka kan pato ninu ibi ipamọ ti o yẹ ki o tẹle.

idiboAarin ni awọn nọmba ti aaya lẹhin eyi ti BuildMaster yoo dibo ibi ipamọ fun awọn ayipada.

Awọn ọna pupọ lo wa lati tọpa awọn ayipada si ibi ipamọ iṣẹ akanṣe kan.

Ọna ti o rọrun julọ ni Pipin, eyi ti o tumo si wipe BuildMaster lorekore idibo olupin pẹlu ibi ipamọ. Ti o ba jẹ ṣe afihan awọn ayipada ninu ibi ipamọ, lẹhinna BuildMaster yoo ṣẹda ohun ti abẹnu pẹlu diẹ ninu awọn idaduro ayipada ki o si fi ranṣẹ si olutọju iṣẹlẹ scheduler, eyi ti yoo ṣe ifilọlẹ awọn igbesẹ lati kọ ati idanwo iṣẹ naa lori Oṣiṣẹ-e. Lara awọn igbesẹ wọnyi yoo jẹ itọkasi imudojuiwọn ibi ipamọ. Gangan lori OṣiṣẹEyi yoo ṣẹda ẹda agbegbe ti ibi-ipamọ. Awọn alaye ti ilana yii yoo wa ni isalẹ ni awọn apakan meji ti o tẹle. (5.4 и 5.5).

Ọna ti o wuyi paapaa ti ipasẹ awọn iyipada si ibi ipamọ ni lati firanṣẹ awọn ifiranṣẹ taara lati olupin ti o gbalejo si BuildMaster- nipa yiyipada awọn koodu orisun ise agbese. Ni idi eyi, ni kete ti awọn Olùgbéejáde ṣe , olupin pẹlu ibi ipamọ ise agbese yoo fi ifiranṣẹ ranṣẹ BuildMaster-y. Ati pe oun, ni ọna, yoo ṣe idilọwọ rẹ nipa ṣiṣẹda ohun kan PBCChangeOrisun. Nigbamii, nkan yii yoo gbe lọ si scheduler, eyi ti o mu awọn igbesẹ ṣiṣẹ lati kọ iṣẹ naa ati idanwo rẹ. Apakan pataki ti ọna yii n ṣiṣẹ pẹlu kio-awọn iwe afọwọkọ olupin ni ibi ipamọ. Ninu iwe afọwọkọ kio-a, lodidi fun awọn sise processing nigbati -e, o nilo lati pe awọn IwUlO fifiranṣẹ ki o si pato awọn nẹtiwọki adirẹsi BuildMaster-A. O tun nilo lati pato ibudo nẹtiwọki ti yoo gbọ PBCChangeOrisun. PBCChangeOrisun, nipasẹ ọna, jẹ apakan BuildMaster-A. Ọna yii yoo nilo igbanilaaye admin-a lori olupin nibiti ibi ipamọ ise agbese wa. Iwọ yoo nilo akọkọ lati ṣe afẹyinti ti ibi ipamọ.

5.4 iṣeto


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

awọn iṣeto - Eyi jẹ ẹya ti o ṣe bi okunfa ti o bẹrẹ gbogbo pq ti apejọ ati idanwo ti iṣẹ naa.
Apeere ti imuse Integration Ilọsiwaju nipa lilo BuildBot

Awọn iyipada ti o gbasilẹ ayipada_orisun, yipada ninu ilana iṣẹ BuildBot-a lati tako ayipada ati bayi gbogbo Sheduler da lori wọn, o kọ awọn ibeere lati bẹrẹ ilana kikọ iṣẹ akanṣe. Sibẹsibẹ, o tun pinnu nigbati awọn ibeere wọnyi ti gbe siwaju si isinyi. Ohun kan Akole tọjú a isinyi ti awọn ibeere ati awọn orin ti awọn ipo ti awọn ti isiyi ijọ lori lọtọ Oṣiṣẹ-e. Akole wa lori BuildMaster-e ati lori Oṣiṣẹ-e. O firanṣẹ pẹlu BuildMaster-a lori Oṣiṣẹ- ati tẹlẹ pato kọ - lẹsẹsẹ awọn igbesẹ ti o gbọdọ tẹle.
A rii pe ninu apẹẹrẹ lọwọlọwọ iru awọn iṣeto Awọn ege 2 ti ṣẹda. Pẹlupẹlu, ọkọọkan ni iru tirẹ.

Iṣeto Ẹka Nikan - ọkan ninu awọn kilasi olokiki julọ lori iṣeto. O n wo ẹka kan ati pe o jẹ okunfa nipasẹ iyipada ti o gbasilẹ ninu rẹ. Nigbati o ba rii awọn ayipada, o le ṣe idaduro fifiranṣẹ ibeere kikọ (daduro fun akoko ti a pato ninu paramita pataki treeStableTimer). IN orukọ ṣeto orukọ iṣeto ti yoo han ni BuildBot-ayelujara ni wiwo. IN ChangeFilter a ti ṣeto àlẹmọ, lẹhin ti o ti kọja eyi ti o yipada ni ẹka ti o tọ iṣeto naa lati firanṣẹ ibeere fun ikole. IN Akole Names orukọ ti wa ni itọkasi olukọ-a, eyi ti a yoo ṣeto kekere kan nigbamii. Orukọ ninu ọran wa yoo jẹ kanna bi orukọ iṣẹ akanṣe: rẹ Project.

ForceScheduler nkan ti o rọrun pupọ. Iru iṣeto yii jẹ okunfa nipasẹ titẹ Asin nipasẹ BuildBot-ayelujara ni wiwo. Awọn paramita ni ohun kanna bi ninu Iṣeto Ẹka Nikan.

PS No. 3. Boya o yoo wa ni ọwọ
Igbakọọkan jẹ iṣeto ti o nṣiṣẹ ni ipo igbohunsafẹfẹ kan ti o wa titi akoko kan. Ipe naa dabi nkan bi eleyi


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 pato akoko ti igbakọọkan yii ni iṣẹju-aaya.

BuildFactory ṣẹda kan pato kọ, eyiti lẹhinna olukọ ranṣẹ si Oṣiṣẹ. awọn BuildFactory tọkasi awọn igbesẹ lati wa ni atẹle Oṣiṣẹ-y. Awọn igbesẹ ti wa ni afikun nipa pipe ọna addIgbese

Igbesẹ akọkọ ti a ṣafikun ni apẹẹrẹ yii jẹ git mọ -d -f -f –xlẹhinna isanwo git. Awọn iṣe wọnyi wa ninu paramita naa ọna, eyi ti a ko sọ ni kedere ṣugbọn o tumọ si iye aiyipada alabapade... Paramita mode='afikun' tọkasi wipe awọn faili ni o wa lati awọn liana ibi ti awọn chechout, lakoko ti o nsọnu lati ibi ipamọ, wa laifọwọkan.

Igbesẹ keji ti a ṣafikun ni pipe iwe afọwọkọ naa iwadii pẹlu paramita Pẹlẹ o lori ẹgbẹ Oṣiṣẹ-a lati liana /ile/habr/osise/YourProject/build pẹlu iyipada ayika PATHONPATH =... Bayi, o le kọ awọn iwe afọwọkọ tirẹ ki o ṣiṣẹ wọn ni ẹgbẹ Oṣiṣẹ-a gbogbo igbese util.ShellCommand. Awọn iwe afọwọkọ wọnyi le ṣee gbe taara sinu ibi ipamọ. Lẹhinna ni chechout-e ti won yoo subu sinu /ile/habr/osise/YourProject/build. Sibẹsibẹ, lẹhinna awọn "ṣugbọn" meji wa:

  1. Oṣiṣẹ gbọdọ ṣẹda pẹlu bọtini kan --mask ki o ko ni dènà awọn ẹtọ ipaniyan lẹhin ṣayẹwo-Awọn.
  2. ni git titari-e ti awọn wọnyi awọn iwe afọwọkọ ti o nilo lati pato awọn ohun ini excutableki nigbamii chechout-e ko padanu ẹtọ lati ṣiṣẹ iwe afọwọkọ Git.

5.6 ọmọle


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

Nipa kini o jẹ Akole ni a sọ fun nibi. Bayi Emi yoo sọ fun ọ ni alaye diẹ sii nipa bi o ṣe le ṣẹda rẹ. BuilderConfig ni a Constructor olukọ. Iru apẹẹrẹ ni c['olukọle'] o le pato orisirisi, niwon yi ni a dì ti ohun olukọ iru. Bayi jẹ ki ká rewrite awọn apẹẹrẹ lati BuildBot, mú un sún mọ́ iṣẹ́ wa.


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

Bayi Emi yoo sọ fun ọ nipa awọn paramita BuilderConfig.

orukọ pato orukọ olukọ-a. Nibi ti a lorukọ rẹ rẹ Project... Eyi tumọ si pe lori Oṣiṣẹ- ọna yii gan-an yoo ṣẹda /ile/habr/osise/YourProject/build. Sheduler nwa fun olukọ o kan nipa orukọ yi.

worknames ni dì Oṣiṣẹ-s. Kọọkan ti eyi ti gbọdọ wa ni afikun si c ['osise'].

factory - pato kọ, pẹlu eyiti o ni nkan ṣe pẹlu olukọ. Oun yoo ran nkan naa kọ on Oṣiṣẹ lati pari gbogbo awọn igbesẹ ti o wa ninu eyi kọ-Awọn.

6. Apeere ti ara rẹ iṣeto ni

Eyi ni apẹẹrẹ faaji ise agbese ti Mo daba lati ṣe nipasẹ BuildBot
.

A yoo lo bi eto iṣakoso ẹya svn. Ibi ipamọ funrararẹ yoo wa ni iru awọsanma kan. Eyi ni adirẹsi awọsanma yii svn.host/svn/YourProject/trunk. Ninu awọsanma labẹ svn orukọ olumulo akọọlẹ kan wa: olumulo, passwd: ọrọigbaniwọle. Awọn iwe afọwọkọ ti o duro awọn igbesẹ kọ-a yoo tun wa ni ẹka naa svn, ni lọtọ folda buildbot / Osise_linux. Awọn iwe afọwọkọ wọnyi wa ni ibi ipamọ pẹlu ohun-ini ti o fipamọ ṣiṣẹ.

BuildMaster и Oṣiṣẹ ṣiṣe awọn lori kanna ogun project.ogun .BuildMaster tọju awọn faili rẹ sinu folda kan /ile/habr/ oluwa. Oṣiṣẹ o wa ni ipamọ ni ọna atẹle /ile/habr/osise. Ibaraẹnisọrọ ilana BuildMaster-a ati Oṣiṣẹ-a ti gbe jade nipasẹ ibudo 4000 ni ibamu si ilana naa BuildBot-a, iyẹn 'pb' Ilana.

Ise agbese ibi-afẹde ti kọ patapata ni Python. Iṣẹ-ṣiṣe ni lati tọpa awọn ayipada rẹ, ṣẹda faili ti o le ṣiṣẹ, ṣe ipilẹṣẹ iwe, ati ṣe idanwo. Ni ọran ikuna, gbogbo awọn olupilẹṣẹ nilo lati fi ifiranṣẹ ranṣẹ nipasẹ imeeli ti o sọ pe igbese ti ko ni aṣeyọri wa.

Ifihan oju-iwe ayelujara BuildBot a yoo sopọ si ibudo 80 fun project.ogun. Ko ṣe pataki lati fi Apatch sori ẹrọ. Bi ara ti awọn ìkàwé ayidayida olupin ayelujara ti wa tẹlẹ, BuildBot nlo o.

Lati tọju alaye inu fun BuildBot ем использовать sqlite.

A beere ogun fun ifiweranṣẹ smtp.rẹ.ašẹ - o faye gba fifiranṣẹ awọn lẹta lati mail [imeeli ni idaabobo] lai ìfàṣẹsí. Paapaa lori agbalejo 'SMTP ' Awọn iṣẹju naa ni a gbọ ni ifiweranṣẹ 1025.

Awọn eniyan meji lo wa ninu ilana naa: admin и olumulo. nṣakoso BuildBot. olumulo ni eniyan ti o ṣe -s.

Exacutable faili ti wa ni ti ipilẹṣẹ nipasẹ pyinstaller. Iwe ti ipilẹṣẹ nipasẹ doksijin.

Fun faaji yii Mo kọ eyi: oluwa.cfg:

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

Ni akọkọ o nilo ṣẹda BuildMaster-a ati Oṣiṣẹ-a. Lẹhinna lẹẹmọ faili yii oluwa.cfg в /ile/habr/ oluwa.

Igbese ti o tẹle ni lati bẹrẹ iṣẹ naa BuildMaster


sudo buildbot start /home/habr/master

Lẹhinna bẹrẹ iṣẹ naa Oṣiṣẹ-a


buildbot-worker start /home/habr/worker

Ṣetan! Bayi Buildbot yoo orin awọn ayipada ati okunfa -y wọle svn, ṣiṣe awọn igbesẹ ti ile ati idanwo iṣẹ akanṣe pẹlu faaji ti o wa loke.

Ni isalẹ Emi yoo ṣe apejuwe diẹ ninu awọn ẹya ti oke oluwa.cfg.

6.1 Ni ọna oluwa rẹ.cfg


Nigba kikọ mi oluwa.cfg Ọpọlọpọ awọn aṣiṣe yoo ṣee ṣe, nitorinaa kika faili log yoo nilo. O ti wa ni ipamọ bi BuildMaster-ec idi ona /home/habr/master/twistd.log, ati lori ẹgbẹ Oṣiṣẹ-a pẹlu idi ona /home/habr/osise/twistd.log. Bi o ṣe n ka aṣiṣe naa ati ṣatunṣe rẹ, iwọ yoo nilo lati tun iṣẹ naa bẹrẹ BuildMaster-a. Eyi ni bi o ti ṣe:


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

6.2 Nṣiṣẹ pẹlu 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)

Ni akọkọ, jẹ ki a wo svn_poller. Eyi tun jẹ wiwo kanna, ni deede dibo ibi ipamọ lẹẹkan ni iṣẹju kan. Fun idi eyi svn_poller nikan wọle si ẹka ẹhin mọto. paramita ohun ijinlẹ split_file = util.svn.split_file_alwaysrunk ṣeto awọn ofin: bi o ṣe le fọ eto folda naa svn lori awọn ẹka. O tun fun wọn ni awọn ọna ibatan. Ni awọn oniwe-Tan split_file_alwaystrunk simplifies ilana nipa sisọ pe ibi ipamọ nikan ni ninu ẹhin mọto.

В Awọn oluṣeto itọkasi ChangeFiltereniti o ri ati pe o ṣepọ ẹka kan pẹlu rẹ ẹhin mọto gẹgẹ bi a fi fun sepo nipasẹ split_file_alwaystrunk. Fesi si awọn ayipada ninu ẹhin mọto, Awọn ifilọlẹ olukọ pẹlu orukọ rẹ Project.

awọn ini Nibi o nilo ki alabojuto gba awọn atokọ ifiweranṣẹ ti kikọ ati awọn abajade idanwo bi oniwun ilana naa.

Igbese kọ-a ṣayẹwo ti o lagbara lati paarẹ awọn faili eyikeyi ti o wa ni ẹya agbegbe ti ibi ipamọ patapata Oṣiṣẹ-A. Ati lẹhinna ṣe kikun svn imudojuiwọn. Awọn mode ti wa ni tunto nipasẹ awọn paramita mode = kikun, ọna = alabapade... Paramita haltOnTailure wi pe ti o ba svn imudojuiwọn yoo ṣe pẹlu aṣiṣe kan, lẹhinna gbogbo ilana ti ile ati idanwo yẹ ki o daduro, nitori awọn iṣe siwaju ko ni oye.

6.3 Lẹta si ọ: Awọn oniroyin ni aṣẹ lati kede


onirohin jẹ iṣẹ kan fun fifiranṣẹ awọn iwifunni nipasẹ imeeli.


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]

O le fi awọn ifiranṣẹ ranṣẹ awọn ọna oriṣiriṣi.

MailNotifier nlo imeeli lati fi awọn iwifunni ranṣẹ.

awoṣe_html ṣeto awoṣe ọrọ fun iwe iroyin naa. HTML ti lo lati ṣẹda isamisi. O ti wa ni títúnṣe nipasẹ awọn engine jinja2 (le ṣe afiwe pẹlu django). BuildBot ni ṣeto awọn oniyipada ti awọn iye wọn ti rọpo sinu awoṣe lakoko ilana ti ipilẹṣẹ ọrọ ifiranṣẹ. Awọn oniyipada wọnyi wa ni paamọ ni {{ awọn àmúró ilọpo meji }}. Fun apere, Lakotan ṣe afihan ipo ti awọn iṣẹ ṣiṣe ti o pari, iyẹn ni, aṣeyọri tabi ikuna. A ise agbese yoo jade rẹ Project. Nitorinaa, lilo awọn aṣẹ iṣakoso ni jinja2, oniyipada BuildBot-a ati awọn irinṣẹ ọna kika okun Python, o le ṣẹda ifiranṣẹ ti o ni alaye pupọ.

MailNotifier ni awọn wọnyi ariyanjiyan.

latiaddr - adirẹsi lati eyiti gbogbo eniyan yoo gba iwe iroyin naa.

sendToInterestUsers=Otitọ nfi ifiranṣẹ ranṣẹ si oniwun ati olumulo ti o ṣe .

wa - suffix ti o gbọdọ fi kun si awọn orukọ ti awọn olumulo ti n gba iwe iroyin naa. Nitorina admin bawo ni olumulo yoo ṣe gba iwe iroyin ni adirẹsi naa [imeeli ni idaabobo].

relayhost pato orukọ olupin lori eyiti olupin ti ṣii SMTP, kan smptPort pato nọmba ibudo ti o gbọ SMTP olupin.

mode="ikilọ" sọ pe ifiweranṣẹ yẹ ki o ṣee ṣe ti o ba wa ni o kere ju igbesẹ kan kọ-a, eyiti o pari pẹlu ikuna ipo tabi ikilọ. Ninu ọran ti aṣeyọri, ko si iwulo lati fi iwe iroyin ranṣẹ.

awọn olugba afikun ni atokọ ti awọn eniyan ti o yẹ ki o firanṣẹ ifiweranṣẹ ni afikun si eni ati eniyan ti o ṣe iṣẹ naa .

ifiranṣẹFormatter jẹ ohun kan ti o pato ọna kika ifiranṣẹ, awoṣe rẹ, ati ṣeto awọn oniyipada ti o wa lati jinja2. Awọn aṣayan bii wantProperties=Otitọ и wantSteps=Otitọ setumo yi ṣeto ti wa oniyipada.

pẹlu['awọn iṣẹ']=[firanṣẹMessageToAll] pese akojọ awọn iṣẹ, laarin eyiti tiwa yoo jẹ onirohin.

A ṣe! Oriire

A ṣẹda iṣeto ti ara wa ati rii iṣẹ ṣiṣe ti o lagbara. BuildBot. Eyi, Mo ro pe, to lati ni oye boya ọpa yii nilo lati ṣẹda iṣẹ akanṣe rẹ. Ṣe o nifẹ ninu rẹ? Ṣe yoo wulo fun ọ? Ṣe o ni itunu lati ṣiṣẹ pẹlu? Lẹhinna Emi ko kọ nkan yii ni asan.

Ati siwaju sii. Emi yoo fẹ agbegbe ọjọgbọn lilo BuildBot, di gbooro, awọn iwe afọwọkọ ni a tumọ, ati pe awọn apẹẹrẹ paapaa wa.

O ṣeun fun gbogbo akiyesi rẹ. Orire daada.

orisun: www.habr.com

Fi ọrọìwòye kun