Conto ngalaksanakeun Integrasi Kontinyu nganggo BuildBot

Conto ngalaksanakeun Integrasi Kontinyu nganggo BuildBot
(Gambar ku Komputerisasi ti Pixabay)

Salam!

Nami abdi Evgeniy Cherkin, Kami programmer dina tim ngembangkeun di hiji parusahaan pertambangan Poliéster.

Nalika ngamimitian proyék ageung, anjeun mimiti mikir: "Software naon anu paling hadé dianggo pikeun ngajaga éta?" Proyék IT ngalangkungan sababaraha tahapan sateuacan ngaleupaskeun versi salajengna. Éta saé nalika ranté tahapan ieu otomatis. Prosés otomatis ngaleupaskeun versi anyar tina hiji proyék IT sorangan disebut Pamaduan kontinyu. BuildBot tétéla janten asisten anu saé pikeun urang dina ngalaksanakeun prosés ieu.

Dina artikel ieu kuring mutuskeun pikeun nyadiakeun tinjauan kamungkinan BuildBot. Naon software ieu sanggup? Kumaha cara ngadeukeutan anjeunna sareng kumaha ngawangun HUBUNGAN KERJA EFEKTIF normal sareng anjeunna? Anjeun tiasa nerapkeun pangalaman urang sorangan ku nyiptakeun jasa anu tiasa dianggo pikeun ngawangun sareng nguji proyék anjeun dina mesin anjeun.

eusi

eusi

1. Naha BuildBot?
2. Konsep dipingpin ku BuildMaster
3. Pamasangan
4. Léngkah munggaran

5. Konfigurasi. Step by step resep

5.1 BuildmasterConfig
pagawe 5.2
5.3 change_source
5.4 schedulers

5.5 BuildFactory
5.6 tukang

6. Conto konfigurasi anjeun sorangan

6.1 Dina jalan ka master Anjeun.cfg
6.2 Gawe sareng svn
6.3 Surat ka anjeun: wartawan otorisasi pikeun nyatakeun

Urang ngalakukeun eta! ngawilujengkeun

1. Naha BuildBot?

Saméméhna dina habr-e kuring datang di sakuliah artikel ngeunaan palaksanaan Pamaduan kontinyu ngagunakeun BuildBot. Contona, Anu ieu Kuring mendakan éta paling informatif. Aya conto sejen - leuwih basajan. artikel ieu bisa seasoned conto tina manualjeung eta sanggeus éta, dina basa Inggris. coupe ngajadikeun titik awal alus. Sanggeus maca artikel ieu, Anjeun meureun bakal langsung hayang hal on BuildBot ngalakukeun.

Eureun! Geus saha sabenerna dipaké dina proyék maranéhanana? Tétéla enya seueur ngalarapkeunana dina tugasna. Bisa kapanggih conto ngagunakeun BuildBot sareng dina arsip kode Google.

Jadi naon logika jalma ngagunakeun Buildbot? Barina ogé, aya alat anu sanés: CruiseControl и Jenkins. Kuring bakal ngajawab cara kieu. Kanggo sabagéan ageung tugas Jenkins jeung bebeneran bakal cukup. Dina gilirannana, BuildBot - leuwih adaptif, bari masalah anu direngsekeun aya sagampil dina Jenkins. pilihan Anjeun. Tapi saprak urang pilari alat pikeun proyék udagan ngembang, naha henteu milih hiji anu bakal ngidinan, mimitian ti léngkah basajan, pikeun ménta sistem ngawangun nu boga interactivity sarta panganteur unik.

Pikeun anu udagan proyékna ditulis dina python, timbul patarosan: "Naha henteu milih sistem integrasi anu gaduh antarmuka anu jelas dina hal basa anu dianggo dina proyék éta?" Sareng ayeuna waktos nampilkeun kauntungan BuildBot.

Ku kituna, urang "quartet instrumental". Pikeun kuring sorangan, kuring parantos ngaidentifikasi opat fitur BuildBot:

  1. Éta mangrupikeun kerangka open source dina lisénsi GPL
  2. Ieu mangrupikeun panggunaan python salaku alat konfigurasi sareng pedaran ngeunaan tindakan anu diperyogikeun
  3. Ieu mangrupa kasempetan pikeun nampa respon ti mesin nu assembly lumangsung
  4. Ieu, tungtungna, syarat minimum pikeun Host. Deployment merlukeun python na twisted, sarta teu merlukeun mesin virtual jeung mesin java.

2. Konsep dipingpin ku BuildMaster

Conto ngalaksanakeun Integrasi Kontinyu nganggo BuildBot

Sentral kana arsitéktur distribusi tugas téh BuildMaster. Éta mangrupikeun jasa anu:

  • ngalacak parobahan dina tangkal sumber proyék
  • ngirim Paréntah anu kedah dieksekusi ku jasa Worker pikeun ngawangun proyék sareng nguji éta
  • ngabéjaan pamaké ngeunaan hasil lampah nu dilaksanakeun

BuildMaster ngonpigurasi via file master.cfg. File ieu aya dina akar BuildMaster. Engké kuring bakal némbongkeun kumaha akar ieu dijieun. File sorangan master.cfg ngandung skrip python anu ngagunakeun telepon BuildBot.

Satuluyna obyék pangpentingna BuildBot boga ngaran Pagawe. Ladenan ieu tiasa diluncurkeun dina host anu sanés nganggo OS anu béda, atanapi panginten dina hiji tempat BuildMaster. Éta ogé tiasa aya dina lingkungan maya anu disiapkeun khusus sareng bungkusan sareng variabel sorangan. Lingkungan maya ieu tiasa disiapkeun nganggo utilitas python sapertos virtualenv, venv.

BuildMaster nyiarkeun paréntah ka saréréa Pagawe-y, sarta anjeunna, kahareupna minuhan aranjeunna. Hartina, tétéla prosés ngawangun jeung nguji hiji proyék bisa lumangsung Pagawe-e ngajalankeun Windows jeung dina Worker sejen ngajalankeun Linux.

Parios kode sumber proyék lumangsung dina unggal Pagawe-e.

3. Pamasangan

Ku kituna, hayu urang balik. Kuring bakal ngagunakeun Ubuntu 18.04 salaku host. Kuring bakal nempatkeun hiji di dinya BuildMaster-a jeung hiji Pagawe-a. Tapi mimitina anjeun kedah pasang python3.7:

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

Pikeun anu peryogi python3.7.2 tibatan 3.7.1, anjeun tiasa ngalakukeun ieu:


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

Lengkah saterusna nyaeta masang Ditweet и BuildBot, kitu ogé bungkusan nu ngidinan Anjeun pikeun make pungsi tambahan BuildBot-The.


/*Все что под 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. Léngkah munggaran

Waktos pikeun nyiptakeun BuildMaster. Éta bakal aya dina polder urang /imah/habr/master.

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

Lengkah saterusna. Hayu urang nyieun Pagawe. Éta bakal aya dina polder urang /imah/habr/pagawe.

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

Nalika anjeun ngajalankeun Pagawe, teras sacara standar bakal nyiptakeun /imah/habr/pagawe folder kalawan nami proyék, nu dieusian dina master.cfg. Sareng dina polder kalayan nami proyék éta bakal nyiptakeun diréktori ngawangun, sarta bakal neruskeun ngalakukeun eta parios. Diréktori gawé pikeun Pagawe- sareng éta bakal janten diréktori /home/habr/yourProject/build.

"Kunci Emas
Sareng ayeuna naon anu kuring nyerat paragraf sateuacana pikeun: naskah éta ngawasaan bakal pamenta ti Pagawe-jeung dipigawé jarak jauh dina diréktori ieu moal dieksekusi sabab naskah teu boga idin pikeun ngajalankeun. Pikeun ngabenerkeun kaayaan, anjeun peryogi konci --umask=0o22, nu ngalarang nulis kana diréktori ieu, tapi bakal nahan hak peluncuran. Sareng éta sadayana anu urang peryogikeun.

BuildMaster и Pagawe ngadegkeun hubungan saling. Ieu kajadian nu ngarecah na Pagawe ngantosan sababaraha waktos kanggo respon ti BuildMaster-A. Upami teu aya réspon, sambungan dibalikan deui. konci --keepalive=60 ngan diperlukeun pikeun nunjukkeun waktu sanggeus éta nyambungan reboots.

5. Konfigurasi. Step by step resep

Konfigurasi BuildMaster dilumangsungkeun dina sisi mesin dimana urang dieksekusi paréntah nyiptakeun-master. Dina kasus urang, ieu diréktori /imah/habr/master. file konfigurasi master.cfg teu aya acan, tapi paréntah sorangan geus dijieun file master.cmg.sample. Anjeun kudu ngaganti ngaran ka master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Hayu urang buka hiji ieu master.cfg. Sareng hayu urang tingali naon eusina. Sareng saatos éta, hayu urang cobian ngadamel file konfigurasi urang sorangan.

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 - kamus dasar tina file konfigurasi. Ieu kudu kaasup kana file konfigurasi. Pikeun betah pamakéan, hiji landian diwanohkeun dina kode konfigurasi "c". Judul-judul konci в c["keyFromDist"] mangrupakeun elemen tetep pikeun interaksi jeung BuildMaster. Pikeun unggal konci, obyék anu cocog digantikeun salaku nilai.

pagawe 5.2

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

Waktos ieu kami nunjukkeun BuildMaster-y daptar Pagawe-s. Kuring sorangan Pagawe urang nyiptakeun luhur, nunjukkeun Anjeun-pagawe-ngaran и password. Ayeuna aranjeunna kedah dieusian gantina pagawe conto и ngaliwatan .

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

Ku konci change_source kamus c kami meunang aksés ka daptar dimana urang rék nempatkeun hiji obyék nu polling Repository kalawan kode sumber proyék urang. Conto ngagunakeun gudang Git anu dijajal dina interval nu tangtu.

Argumen kahiji nyaéta jalur ka gudang Anjeun.

workdir ngagambarkeun jalur ka folder mana di sisi Pagawe-a relatif ka jalur /home/habr/worker/yourProject/build git bakal nyimpen versi lokal tina gudang.

cabang ngandung cabang husus dina Repository nu kudu dituturkeun.

pollInterval ngandung jumlah detik sanggeus éta BuildMaster bakal polling gudang pikeun parobahan.

Aya sababaraha metode pikeun ngalacak parobahan kana gudang proyék.

Metodeu pangbasajanna nyaéta Polling, nu ngandung harti yén BuildMaster périodik polling server sareng gudang. Lamun ngalakukeun kajahatan reflected parobahan dina Repository nu, lajeng BuildMaster bakal nyieun hiji obyék internal kalawan sababaraha reureuh ngarobah sareng kirimkeun ka panyatur acara Scheduler, anu bakal ngaluncurkeun léngkah-léngkah pikeun ngawangun sareng nguji proyék éta Pagawe-e. Di antara léngkah-léngkah ieu bakal dituduhkeun update gudang. Persis on PagaweIeu bakal nyieun salinan lokal Repository nu. Sacara rinci ngeunaan prosés ieu bakal katutupan di handap dina dua bagian salajengna. (5.4 и 5.5).

Metodeu anu langkung elegan pikeun nyukcruk parobahan kana gudang nyaéta ngirim pesen langsung ti pangladén anu nyayogikeunana BuildMaster- ngeunaan ngarobah kodeu sumber proyék. Dina hal ieu, pas pamekar ngajadikeun ngalakukeun kajahatan, server sareng gudang proyék bakal ngirim pesen BuildMaster-y. Sarta anjeunna, kahareupna bakal intercept ku nyieun hiji obyék PBCchangeSource. Salajengna, obyék ieu bakal dialihkeun ka Scheduler, anu ngaktifkeun léngkah-léngkah pikeun ngawangun proyék sareng nguji éta. Bagian penting tina metoda ieu gawé bareng cantol-Skrip server dina gudang. Dina naskah cantol-a, jawab ngolah lampah nalika ngalakukeun kajahatan-e, Anjeun kudu nelepon utiliti ngirim robah jeung nangtukeun alamat jaringan BuildMaster-A. Anjeun oge kudu nangtukeun port jaringan nu bakal ngadangukeun PBCchangeSource. PBCchangeSource, Ku jalan kitu, mangrupa bagian BuildMaster-A. Metoda ieu bakal merlukeun idin admin-a dina server dimana Repository proyék ieu lokasina. Anjeun mimitina kudu nyieun cadangan Repository nu.

5.4 schedulers


c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
        name="all",
        change_filter=util.ChangeFilter(branch='master'),
        treeStableTimer=None,
        builderNames=["runtests"]))
c['schedulers'].append(schedulers.ForceScheduler(
        name="force",
        builderNames=["runtests"]))

schedulers - ieu mangrupa unsur nu tindakan minangka pemicu nu dimimitian sakabéh ranté assembly sarta nguji proyék.
Conto ngalaksanakeun Integrasi Kontinyu nganggo BuildBot

Éta parobahan anu dirékam change_source, robah dina prosés gawé BuildBot-a pikeun obyék ngarobah tur ayeuna unggal Sheduler dumasar kana éta, éta ngawangun requests pikeun ngamimitian prosés ngawangun proyék. Sanajan kitu, eta oge nangtukeun lamun requests ieu ditransfer salajengna ka antrian. Hiji obyék nu ngawangun nyimpen antrian requests sarta ngalacak kaayaan assembly ayeuna on misah Pagawe-e. nu ngawangun aya dina BuildMaster-e jeung saterusna Pagawe-e. Anjeunna ngirimkeun kalawan BuildMaster-a on Pagawe-sarta geus husus ngawangun - runtuyan léngkah anu kudu dituturkeun.
Urang nempo yén dina conto ayeuna misalna schedulers 2 lembar dijieun. Leuwih ti éta, unggal boga tipe sorangan.

SingleBranchScheduler - salah sahiji kelas anu pang populerna dina jadwal. Éta ningali hiji cabang sareng dipicu ku parobahan anu dirékam dina éta. Nalika anjeunna ningali parobihan, anjeunna tiasa ngalambatkeun ngirim pamenta ngawangun (nunda pikeun periode anu ditangtukeun dina parameter khusus tangkalStableTimer). DI nami netepkeun nami jadwal anu bakal ditingalikeun BuildBot-antarmuka wéb. DI ChangeFilter filter a diatur, sanggeus lulus nu robah dina cabang ajakan jadwal pikeun ngirim pamundut pikeun konstruksi. DI ngaran tukang ngaran dituduhkeun nu ngawangun-a, nu urang bakal nangtukeun saeutik engké. Ngaran dina hal urang bakal sarua jeung ngaran proyék: Proyék anjeun.

ForceScheduler hiji hal basajan pisan. Jenis jadwal ieu dipicu ku ngaklik beurit BuildBot-antarmuka wéb. Parameter gaduh hakekat anu sami sareng di SingleBranchScheduler.

PS No. 3. Meureun bakal datang dina gunana
Périodik nyaéta jadwal anu dijalankeun dina frékuénsi anu ditangtukeun ku waktos. Telepon sigana sapertos kieu


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": "."}))

périodikBuildTimer nangtukeun waktu periodicity ieu dina detik.

BuildFactory nyiptakeun husus ngawangun, anu saterusna nu ngawangun ngirimkeun ka Pagawe. The BuildFactory nuduhkeun léngkah-léngkah anu kudu dilaksanakeun Pagawe-y. Léngkah-léngkah ditambah ku nyauran metodeu tambihanStep

Léngkah tambihan munggaran dina conto ieu nyaéta git bersih -d -f -f –xsaterusna git Checkout. Peta ieu kaasup kana parameter metode, nu teu jelas nyatakeun tapi ngakibatkeun nilai standar seger. Parameter mode = 'tambahan' nunjukkeun yén file téh ti diréktori mana nu chechout, bari leungit ti gudang, tetep teu kacekel.

Lengkah tambahan kadua nyaéta nelepon naskah pangadilan kalawan parameter Halo di sisi Pagawe-a ti diréktori /home/habr/worker/yourProject/build kalayan variabel lingkungan PATHONPATH=... Ku kituna, anjeun tiasa nyerat skrip anjeun nyalira sareng ngalaksanakeunana di sisi Pagawe-a unggal léngkah util.ShellCommand. Skrip ieu tiasa disimpen langsung kana gudang. Lajeng di chechout-e aranjeunna bakal digolongkeun kana /home/habr/worker/yourProject/build. Nanging, teras aya dua "tapi":

  1. Pagawe kudu dijieun ku konci --umask ku kituna teu meungpeuk hak palaksanaan sanggeus parios-The.
  2. di git nyorong-e tina Aksara ieu anjeun kudu nangtukeun harta bisa dieksekusisupados engke chechout-e henteu kaleungitan hak pikeun ngaéksekusi skrip Git.

5.6 tukang


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

Perkawis naon na nu ngawangun dicaritakeun di dieu. Ayeuna kuring bakal nyarioskeun ka anjeun langkung rinci ngeunaan cara nyiptakeunana. BuilderConfig nyaeta constructor a nu ngawangun. Desainer sapertos di c['tukang bangunan'] Anjeun bisa nangtukeun sababaraha, saprak ieu mangrupa lambar objék nu ngawangun ngetik. Ayeuna hayu urang nulis ulang conto ti BuildBot, bringing eta ngadeukeutan ka tugas urang.


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

Ayeuna kuring bakal nyaritakeun ngeunaan parameter BuilderConfig.

nami nangtukeun ngaran nu ngawangun-a. Di dieu urang ngaranna éta Proyék anjeun... Ieu ngandung harti yén on Pagawe- jalur ieu pisan bakal dijieun /home/habr/worker/yourProject/build. Sheduler milarian nu ngawangun ngan ku ngaran ieu.

ngaran pagawé ngandung lambaran Pagawe-s. Tiap di antarana kudu ditambahkeun kana c['pagawe'].

pabrik - husus ngawangun, jeung nu pakait nu ngawangun. Anjeunna bakal ngirim obyék ngawangun dina Pagawe pikeun ngalengkepan sadaya léngkah anu kalebet dina ieu ngawangun-The.

6. Conto konfigurasi anjeun sorangan

Ieu conto arsitéktur proyék anu kuring ngajukeun pikeun nerapkeun via BuildBot
.

Urang bakal ngagunakeun salaku sistem kontrol versi svn. Repositori sorangan bakal aya dina sababaraha jenis awan. Ieu alamat awan ieu svn.host/svn/yourProject/trunk. Dina méga handapeun svn aya ngaran pamaké akun: nu make, paswd: password. Naskah anu ngagambarkeun léngkah ngawangun-a ogé bakal di cabang svn, dina folder misah buildbot / worker_linux. Skrip ieu lokasina di gudang kalayan harta anu disimpen laksana.

BuildMaster и Pagawe ngajalankeun on host sarua project.host .BuildMaster nyimpen file na dina polder /imah/habr/master. Pagawe eta disimpen dina jalur handap /imah/habr/pagawe. Proses komunikasi BuildMaster-a jeung Pagawe-a dilumangsungkeun ngaliwatan port 4000 nurutkeun protokol BuildBot-a, éta 'pb' protokol.

Proyék target ditulis sagemblengna dina Python. Tugasna nyaéta pikeun ngalacak parobahanana, nyiptakeun file anu tiasa dieksekusi, ngahasilkeun dokuméntasi, sareng ngalaksanakeun tés. Upami gagal, sadaya pamekar kedah ngirim pesen ku email anu nyatakeun yén aya tindakan anu gagal.

tampilan wéb BuildBot urang bakal nyambung ka port 80 keur project.host. Teu perlu masang Apache. Salaku bagian tina perpustakaan twisted geus aya web server, BuildBot ngagunakeun éta.

Pikeun nyimpen informasi internal pikeun BuildBot urang bakal ngagunakeun sqlite.

A host diperlukeun pikeun milis smtp.your.domain - ngamungkinkeun ngirim surat tina surat [email dijaga] tanpa auténtikasi. Ogé dina host 'SMTP ' Notulen didangukeun di pos 1025.

Aya dua jalma aub dina prosés: admin и nu make. admin ngatur BuildBot. pamaké éta jalma committing ngalakukeun kajahatan-s.

file Exacutable dihasilkeun via pyinstaller. Dokuméntasi dihasilkeun via doksigén.

Pikeun arsitéktur ieu kuring nyerat ieu: 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"
}

Mimiti anjeun peryogi ngadamel BuildMaster-a jeung Pagawe-a. Teras tempelkeun file ieu master.cfg в /imah/habr/master.

Lengkah saterusna nyaéta pikeun ngamimitian jasa BuildMasteraa


sudo buildbot start /home/habr/master

Teras ngamimitian jasa Pagawe-a


buildbot-worker start /home/habr/worker

Siap! Ayeuna Buildbot bakal ngalacak parobahan sareng pemicu ngalakukeun kajahatan-y asup svn, ngalaksanakeun léngkah ngawangun sareng nguji proyék kalayan arsitéktur di luhur.

Di handap ieu kuring bakal ngajelaskeun sababaraha fitur di luhur master.cfg.

6.1 Dina jalan ka master Anjeun.cfg


Bari nulis kuring master.cfg Loba kasalahan bakal dilakukeun, jadi maca file log bakal diperlukeun. Ieu disimpen salaku BuildMaster-ec jalur mutlak /home/habr/master/twistd.log, jeung di sisi Pagawe-a kalawan jalur mutlak /home/habr/worker/twistd.log. Nalika anjeun maca kasalahan sareng ngalereskeunana, anjeun kedah ngabalikan deui jasa BuildMaster-a. Ieu kumaha éta dilakukeun:


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

6.2 Gawe sareng 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)

Mimiti, hayu urang tingali svn_poller. Ieu masih antarmuka anu sami, rutin polling gudang sakali menit. Dina hal ieu svn_poller ngan ngakses cabang tangkal. Parameter misterius split_file=util.svn.split_file_alwaystrunk susunan aturan: kumaha megatkeun up struktur folder svn dina dahan. Anjeunna oge nawiskeun aranjeunna jalur relatif. Dina gilirannana split_file_alwaystrunk simplifies prosés ku nyebutkeun yen Repository ngan ngandung tangkal.

В Penjadwal dituduhkeun ChangeFilteranu ningali teu sahiji bae sarta pakait cabang jeung eta tangkal nurutkeun asosiasi dibikeun ngaliwatan split_file_alwaystrunk. Ngabales parobahan dina tangkal, Ngaluncurkeun nu ngawangun kalawan ngaran Proyék anjeun.

sipat di dieu diperlukeun sangkan admin narima milis hasil ngawangun jeung nguji salaku nu boga prosés.

lengkah ngawangun-a parios sanggup ngahapus lengkep file anu aya dina versi lokal tina gudang Pagawe-A. Lajeng ngalakukeun pinuh apdet svn. Modeu dikonpigurasi ngaliwatan parameter mode = pinuh, cara = seger. Parameter haltOnTailure nyebutkeun yen lamun apdet svn bakal dieksekusi kalayan kasalahan, teras sadayana prosés ngawangun sareng uji kedah ditunda, sabab tindakan salajengna henteu masuk akal.

6.3 Surat ka anjeun: wartawan otorisasi pikeun nyatakeun


wartawan nyaéta layanan pikeun ngirim béwara ku 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]

Anjeunna tiasa ngirim pesen cara béda.

MailNotifier ngagunakeun email pikeun ngirim bewara.

template_html Nyetél template téks pikeun newsletter. HTML dipaké pikeun nyieun markup. Ieu dirobah ku mesin jinja2 (tiasa dibandingkeun sareng django). BuildBot gaduh sakumpulan variabel anu niléyna digantikeun kana citakan nalika prosés ngahasilkeun téks pesen. Variabel ieu diasupkeun dina {{ kurung kurawal ganda }}. Salaku conto, singgetan mintonkeun status operasi réngsé, nyaeta, sukses atawa gagal. A proyék bakal kaluaran Proyék anjeun. Janten, nganggo paréntah kontrol dina jinja2, variabel BuildBot-a jeung alat pormat string python, Anjeun bisa nyieun pesen rada informatif.

MailNotifier ngandung argumen di handap ieu.

tiaddr - alamat ti mana sadayana bakal nampi buletin.

sendToInterestedUsers= True ngirim pesen ka nu boga jeung pamaké nu nyieun ngalakukeun kajahatan.

ningali ka luhur - a sufiks nu kudu ditambahkeun kana ngaran pamaké narima newsletter. Janten admin kumaha pamaké bakal nampa newsletter dina alamat [email dijaga].

relayhost nangtukeun nami host dimana server dibuka SMTP, hiji smtPort nangtukeun jumlah port nu listens SMTP server.

mode = "peringatan" nyebutkeun yén milis ngan kudu dipigawé lamun aya sahanteuna hiji hambalan ngawangun-a, anu ditungtungan ku gagalna status atanapi peringatan. Dina kasus sukses, teu perlu ngirim buletin a.

extraRecipients ngandung daptar jalma anu ngirim surat salian ti nu boga jeung jalma anu ngalaksanakeun éta ngalakukeun kajahatan.

pesenFormatter mangrupa obyék nu nangtukeun format pesen, citakan na, sarta sakumpulan variabel sadia tina jinja2. Pilihan sapertos wantProperties=Leres и wantSteps=Leres nangtukeun set ieu variabel sadia.

kalawan ['jasa']=[sendMessageToAll] nyadiakeun daptar jasa, diantara nu urang bakal wartawan.

Urang ngalakukeun eta! ngawilujengkeun

Kami nyiptakeun konfigurasi sorangan sareng ningali fungsionalitas anu sanggup. BuildBot. Ieu, Jigana, cukup ngartos naha alat ieu diperlukeun pikeun nyieun proyek Anjeun. Anjeun museurkeun anjeunna? Naha éta bakal mangpaat pikeun anjeun? Naha anjeunna nyaman dianggo? Lajeng Kuring keur teu nulis artikel ieu sia.

Sareng salajengna. Abdi hoyong komunitas profésional ngagunakeun BuildBot, janten langkung lega, manual ditarjamahkeun, sareng langkung seueur conto.

Hatur nuhun kasadayana kana perhatosanana. Sing salamet.

sumber: www.habr.com

Tambahkeun komentar