Conto ngleksanakake Integrasi Terus-terusan nggunakake BuildBot

Conto ngleksanakake Integrasi Terus-terusan nggunakake BuildBot
(Gambar dening Komputerisasi saka Pixabay)

Hello!

Jenengku yaiku Evgeniy Cherkin, Aku dadi programmer ing tim pangembangan ing perusahaan pertambangan Polimetal.

Nalika miwiti proyek gedhe, sampeyan kudu mikir: "Perangkat lunak apa sing paling apik digunakake kanggo njaga?" Proyek IT ngliwati sawetara tahapan sadurunge ngeculake versi sabanjure. Iku apik nalika chain saka tataran iki otomatis. Proses otomatis ngeculake versi anyar saka proyek IT dhewe diarani Integrasi Integrasi. BuildBot pranyata dadi asisten apik kanggo kita ngleksanakake proses iki.

Ing artikel iki aku mutusaké kanggo nyedhiyani ringkesan saka kemungkinan BuildBot. Apa piranti lunak iki bisa? Kepiye cara nyedhaki dheweke lan carane mbangun HUBUNGAN KERJA EFEKTIF normal karo dheweke? Sampeyan bisa ngetrapake pengalaman dhewe kanthi nggawe layanan sing bisa digunakake kanggo mbangun lan nguji proyek sampeyan ing mesin sampeyan.

Isi

Isi

1. Kenapa BuildBot?
2. Konsep dipimpin dening BuildMaster
3. Instalasi
4. Langkah pisanan

5. Konfigurasi. Step by step resep

5.1 BuildmasterConfig
5.2 buruh
5.3 ngganti_sumber
5.4 panjadwal

5.5 BuildFactory
5.6 tukang

6. Conto konfigurasi dhewe

6.1 Ing dalan menyang master.cfg
6.2 Nggarap svn
6.3 Layang kanggo sampeyan: wartawan duwe wewenang kanggo ngumumake

Kita nindakaken! Sugeng

1. Kenapa BuildBot?

Sadurunge ing habr-e aku nemokake artikel babagan implementasine Integrasi Integrasi nggunakake BuildBot. contone, Iki Aku nemokake iku paling informatif. Ana conto liyane - luwih prasaja. Artikel-artikel iki bisa dipangan conto saka manuallan iku sawise iku, ing Inggris. Coupe ndadekake titik wiwitan sing apik. Sawise maca artikel-artikel iki, sampeyan mbokmenawa bakal langsung pengin soko ing BuildBot kanggo nindakake.

mandeg! Apa ana wong sing nggunakake ing proyek kasebut? Pranyata ya akeh diterapake ing tugase. Bisa ditemokake conto panggunaan saka BuildBot lan ing arsip kode Google.

Dadi apa logika wong nggunakake Buildbot? Sawise kabeh, ana alat liyane: CruiseControl и Jenkins. Aku bakal mangsuli kanthi cara iki. Kanggo paling tugas Jenkins lan bebener bakal cukup. Ing giliranipun, BuildBot - luwih adaptif, nalika masalah sing ditanggulangi ana minangka mung ing Jenkins. Pilihan iku sampeyan. Nanging amarga kita nggolek alat kanggo proyek target ngembangake, kenapa ora milih sing bakal ngidini, diwiwiti saka langkah-langkah sing gampang, entuk sistem mbangun sing nduweni interaktivitas lan antarmuka unik.

Kanggo sing target proyek ditulis nganggo python, pitakonan muncul: "Napa ora milih sistem integrasi sing duwe antarmuka sing jelas babagan basa sing digunakake ing proyek kasebut?" Lan saiki wektune kanggo menehi keuntungan BuildBot.

Dadi, "kuartet instrumental" kita. Kanggo aku, aku wis nemtokake papat fitur BuildBot:

  1. Iki minangka kerangka open source miturut lisensi GPL
  2. Iki minangka panggunaan python minangka alat konfigurasi lan katrangan babagan tumindak sing dibutuhake
  3. Iki minangka kesempatan kanggo nampa respon saka mesin sing dipasang
  4. Iki, pungkasane, syarat minimal kanggo Host. Penyebaran mbutuhake python lan bengkong, lan ora mbutuhake mesin virtual lan mesin java.

2. Konsep dipimpin dening BuildMaster

Conto ngleksanakake Integrasi Terus-terusan nggunakake BuildBot

Central kanggo arsitektur distribusi tugas punika BuildMaster. Iku layanan sing:

  • trek owah-owahan ing wit sumber project
  • ngirim printah sing kudu dileksanakake dening layanan Worker kanggo mbangun project lan nyoba
  • ngabari pangguna babagan asil tumindak sing ditindakake

BuildMaster dikonfigurasi liwat file master.cfg. Berkas iki ana ing root BuildMaster. Mengko aku bakal nuduhake carane ROOT iki digawe. File kasebut dhewe master.cfg ngandhut script python sing nggunakake telpon BuildBot.

Sabanjure obyek paling penting BuildBot duwe jeneng Worker. Layanan iki bisa diluncurake ing host liyane kanthi OS sing beda, utawa bisa uga ing ngendi wae BuildMaster. Bisa uga ana ing lingkungan virtual sing disiapake khusus kanthi paket lan variabel dhewe. Lingkungan virtual iki bisa disiapake nggunakake utilitas python kaya virtualenv, venv.

BuildMaster siaran printah kanggo kabeh wong Worker-y, lan dheweke, ing siji, nepaki. Tegese, proses mbangun lan nguji proyek bisa ditindakake Worker-e mlaku Windows lan ing Worker liyane nganggo Linux.

Deloken kode sumber project dumadi ing saben Worker-e.

3. Instalasi

Dadi, ayo padha lunga. Aku bakal nggunakake Ubuntu 18.04 minangka host. Aku bakal nyelehake siji ing BuildMaster-a lan siji Worker-a. Nanging pisanan sampeyan kudu nginstal python3.7:

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

Kanggo sing mbutuhake python3.7.2 tinimbang 3.7.1, sampeyan bisa nindakake ing ngisor iki:


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

Langkah sabanjure kanggo nginstal Tweeted и BuildBot, uga paket sing ngidini sampeyan nggunakake fungsi tambahan BuildBot- Ing.


/*Все что под 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. Langkah pisanan

Wektu kanggo nggawe BuildMaster. Bakal ana ing folder kita /home/habr/master.

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

Langkah sabanjure. Ayo nggawe Worker. Bakal ana ing folder kita /home/habr/worker.

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

Nalika sampeyan mlayu Worker, banjur kanthi gawan bakal nggawe ing /home/habr/worker folder kanthi jeneng proyek, sing ditemtokake ing master.cfg. Lan ing folder kanthi jeneng proyek kasebut bakal nggawe direktori mbangun, lan bakal terus nglakoni deloken. Direktori kerja kanggo Worker-lan bakal dadi direktori /home/habr/yourProject/build.

"kunci emas kab
Lan saiki apa aku wrote paragraf sadurungé kanggo: script sing Master bakal njaluk saka Worker-lan rampung mbatalake ing direktori iki ora bakal dieksekusi amarga script ora duwe ijin kanggo mbukak. Kanggo mbenerake kahanan, sampeyan butuh kunci --umask=0o22, sing nglarang nulis menyang direktori iki, nanging bakal nahan hak peluncuran. Lan kabeh sing kita butuhake.

BuildMaster и Worker nggawe sambungan karo saben liyane. Mengkono sing ngilangi mati lan Worker ngenteni sawetara wektu kanggo nanggepi saka BuildMaster-A. Yen ora ana respon, sambungan bakal diwiwiti maneh. kunci --keepalive=60 mung perlu kanggo nunjukaké wektu sawise kang nyambung urip maneh.

5. Konfigurasi. Step by step resep

Konfigurasi BuildMaster wis digawa metu ing sisih mesin ngendi kita kaleksanan printah nggawe-master. Ing kasus kita, iki minangka direktori /home/habr/master. File konfigurasi master.cfg durung ana, nanging printah dhewe wis nggawe file master.cmg.sample. Sampeyan kudu ngganti jeneng dadi master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

Ayo mbukak siji iki master.cfg. Lan ayo kang katon ing apa iku kasusun saka. Lan sawise iku, ayo nyoba nggawe file konfigurasi dhewe.

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 dhasar file konfigurasi. Sampeyan kudu kalebu ing file konfigurasi. Kanggo gampang digunakake, alias dienal ing kode konfigurasi "c". Irah-irahan tombol в c["keyFromDist"] iku unsur tetep kanggo interaksi karo BuildMaster. Kanggo saben tombol, obyek sing cocog diganti minangka nilai.

5.2 buruh

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

Wektu iki kita nuduhake BuildMaster- daftar y Worker-s. Aku dhewe Worker kita digawe luwih, nuduhake sampeyan-pegawe-jeneng и sandi. Saiki padha kudu ditemtokake tinimbang buruh conto и pass .

5.3 ngganti_sumber

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

Miturut kunci ngganti_sumber kamus c kita entuk akses menyang dhaptar sing arep dilebokake obyek sing polling gudang karo kode sumber proyek. Conto nggunakake repositori Git sing polling ing interval tartamtu.

Argumentasi pisanan yaiku path menyang repositori sampeyan.

kerja nggantosi path menyang folder ngendi ing sisih Worker- relatif kanggo path /home/habr/worker/yourProject/build git bakal nyimpen versi lokal saka repositori.

cabang ngemot cabang tartamtu ing repositori sing kudu ditindakake.

pollInterval ngemot nomer detik sawise kang BuildMaster bakal polling repositori kanggo owah-owahan.

Ana sawetara cara kanggo nglacak owah-owahan ing repositori proyek.

Cara sing paling gampang yaiku Poling, sing tegese BuildMaster polling server kanthi repositori kanthi periodik. Yen tumindak dibayangke owah-owahan ing gudang, banjur BuildMaster bakal nggawe obyek internal karo sawetara wektu tundha Ganti lan ngirim menyang pawang acara Scheduler, sing bakal miwiti langkah-langkah kanggo mbangun lan nguji proyek kasebut Worker-e. Ing antarane langkah-langkah kasebut bakal dituduhake nganyari gudang. Persis ing WorkerIki bakal nggawe salinan lokal repositori. Rincian proses iki bakal dibahas ing ngisor iki ing rong bagean sabanjure. (5.4 и 5.5).

Cara sing luwih elegan kanggo nglacak owah-owahan menyang repositori yaiku ngirim pesen langsung saka server sing dadi hosting BuildMaster- babagan ngganti kode sumber proyek. Ing kasus iki, sanalika pangembang nggawe tumindak, server karo repositori proyek bakal ngirim pesen BuildMaster-y. Lan dheweke bakal nyegat kanthi nggawe obyek PBCchangeSource. Sabanjure, obyek iki bakal ditransfer menyang Scheduler, sing ngaktifake langkah-langkah kanggo mbangun proyek lan nyoba. Bagéan penting saka cara iki digunakake karo pancing-skrip server ing gudang. Ing naskah pancing-a, tanggung jawab kanggo tumindak Processing nalika tumindak-e, sampeyan kudu nelpon sarana sendchange lan nemtokake alamat jaringan BuildMaster-A. Sampeyan uga kudu nemtokake port jaringan sing bakal ngrungokake PBCchangeSource. PBCchangeSource, dening cara, iku bagéan BuildMaster-A. Cara iki mbutuhake ijin admin-a ing server ngendi repositori project dumunung. Pisanan sampeyan kudu nggawe serep repositori.

5.4 panjadwal


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

panjadwal - iki minangka unsur sing tumindak minangka pemicu sing miwiti kabeh chain perakitan lan testing saka project.
Conto ngleksanakake Integrasi Terus-terusan nggunakake BuildBot

Owah-owahan sing direkam ngganti_sumber, diowahi ing proses karya BuildBot-a kanggo mbantah Ganti lan saiki saben Sheduler adhedhasar wong-wong mau, mbangun panjalukan kanggo miwiti proses mbangun proyek. Nanging, iku uga nemtokake nalika panjalukan iki ditransfer luwih kanggo antrian. Objek Gedung nyimpen antrian panjalukan lan trek negara saka Déwan saiki ing kapisah Worker-e. Gedung ana ing BuildMaster-e lan ing Worker-e. Dheweke ngirim karo BuildMaster-a ing Worker-lan wis spesifik mbangun - seri langkah sing kudu tindakake.
Kita waca ing conto saiki kuwi panjadwal 2 potongan digawe. Kajaba iku, saben duwe jinis dhewe.

Penjadwal Cabang Tunggal – salah siji saka kelas paling populer ing jadwal. Iku nonton siji cabang lan dipicu dening owah-owahan direkam ing. Nalika ndeleng owah-owahan, dheweke bisa nundha ngirim panjalukan mbangun (tundha wektu sing ditemtokake ing parameter khusus treeStableTimer). IN jeneng nyetel jeneng jadwal sing bakal ditampilake BuildBot-antarmuka web. ING GantiFilter saringan disetel, sawise maringaken kang owah-owahan ing cabang pituduh jadwal ngirim panjalukan kanggo construction. ING jeneng tukang jeneng dituduhake Site-a, kang kita bakal nyetel sethitik mengko. Jeneng ing kasus kita bakal padha karo jeneng proyek: Proyek sampeyan.

ForceScheduler bab sing prasaja banget. Jinis jadwal iki dipicu dening klik mouse liwat BuildBot-antarmuka web. Parameter kasebut duwe inti sing padha karo ing Penjadwal Cabang Tunggal.

PS No. 3. Mungkin bakal migunani
Berkala iku jadwal sing mlaku ing frekuensi wektu-tetep tartamtu. Telpon katon kaya iki


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

periodikBuildTimer nemtokake wektu periodicity iki ing detik.

BuildFactory nggawe tartamtu mbangun, kang banjur Site ngirim menyang Worker. ing BuildFactory nuduhake langkah-langkah sing kudu ditindakake Worker-y. Langkah-langkah ditambahake kanthi nelpon metode kasebut nambahStep

Langkah pisanan sing ditambahake ing conto iki yaiku git clean -d -f -f –xbanjur checkout git. Tumindak kasebut kalebu ing parameter cara, sing ora kasebut kanthi jelas nanging nuduhake nilai standar seger... Parameter mode = 'tambahan' nuduhake yen file kasebut saka direktori ing ngendi chechout, nalika ilang saka gudang, tetep ora kena.

Langkah kapindho sing ditambahake yaiku nelpon skrip nyoba karo parameter Halo ing sisih Worker-a saka direktori /home/habr/worker/yourProject/build karo variabel lingkungan PATHONPATH=... Mangkono, sampeyan bisa nulis skrip dhewe lan nglakokake ing sisih Worker- saben langkah util.ShellCommand. Skrip kasebut bisa diselehake langsung menyang repositori. Banjur ing chechout-e padha bakal tiba menyang /home/habr/worker/yourProject/build. Nanging, banjur ana loro "nanging":

  1. Worker kudu digawe nganggo kunci --umask supaya ora mblokir hak eksekusi sawise deloken- Ing.
  2. ing git push-e saka skrip iki sampeyan kudu nemtokake properti eksekusisupaya mengko chechout-e ora kelangan hak kanggo nglakokaké script Git.

5.6 tukang


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

Babagan apa iku Gedung didhawuhi kene. Saiki aku bakal ngandhani sampeyan kanthi luwih rinci babagan carane nggawe. BuilderConfig punika konstruktor Site. Desainer kuwi ing c['tukang bangunan'] sampeyan bisa nemtokake sawetara, amarga iki minangka lembar obyek Site jinis. Saiki ayo nulis ulang conto saka BuildBot, nyedhaki tugas kita.


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

Saiki aku bakal pitutur marang kowe bab paramèter BuilderConfig.

jeneng nemtokake jeneng Site-a. Ing kene dijenengi Proyek sampeyan. Iki tegese ing Worker- dalan iki bakal digawe /home/habr/worker/yourProject/build. Sheduler nggoleki Site mung kanthi jeneng iki.

jeneng buruh ngandhut sheet Worker-s. Saben-saben kudu ditambahake c['pekerja'].

pabrik - spesifik mbangun, karo sing digandhengake Site. Dheweke bakal ngirim obyek kasebut mbangun ing Worker kanggo ngrampungake kabeh langkah sing kalebu ing iki mbangun- Ing.

6. Conto konfigurasi dhewe

Punika conto arsitektur project sing aku propose kanggo ngleksanakake liwat BuildBot
.

Kita bakal nggunakake minangka sistem kontrol versi svn. Repositori kasebut dhewe bakal ana ing sawetara awan. Iki alamat awan iki svn.host/svn/yourProject/trunk. Ing mega ngisor svn ana jeneng panganggo akun: user, passwd: sandi. Skrip sing makili langkah mbangun-a uga bakal ing cabang svn, ing folder kapisah buildbot/worker_linux. Skrip iki dumunung ing repositori kanthi properti sing disimpen bisa diukum.

BuildMaster и Worker mbukak ing inang padha project.host .BuildMaster nyimpen file ing folder /home/habr/master. Worker iku disimpen ing path ing ngisor iki /home/habr/worker. Proses komunikasi BuildMaster-a lan Worker-a ditindakake liwat port 4000 miturut protokol BuildBot-a, iku 'pb' protokol.

Proyek target ditulis kabeh ing Python. Tugase kanggo nglacak owah-owahan, nggawe file sing bisa dieksekusi, ngasilake dokumentasi, lan nganakake tes. Yen gagal, kabeh pangembang kudu ngirim pesen kanthi email sing nyatakake yen ana tumindak sing ora sukses.

Tampilan web BuildBot kita bakal nyambung menyang port 80 kanggo project.host. Ora perlu nginstal Apache. Minangka bagéan saka perpustakaan bengkong wis ana web server, BuildBot nggunakake.

Kanggo nyimpen informasi internal kanggo BuildBot kita bakal nggunakake sqlite.

A host dibutuhake kanggo mailing smtp.your.domain - ngidini ngirim layang saka mail [email dilindhungi] tanpa bukti asli. Uga ing tuan rumah 'SMTP ' Menit lagi dirungokake ing pos 1025.

Ana rong wong sing melu proses kasebut: admin и user. admin ngatur BuildBot. pangguna yaiku wong sing nindakake tumindak-s.

File sing bisa dieksekusi digawe liwat pyinstaller. Dokumentasi digawe liwat doksigen.

Kanggo arsitektur iki aku nulis iki: 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"
}

Pisanan sampeyan kudu nggawe BuildMaster-a lan Worker-a. Banjur tempel file iki master.cfg в /home/habr/master.

Langkah sabanjure kanggo miwiti layanan BuildMasteraa


sudo buildbot start /home/habr/master

Banjur miwiti layanan Worker-a


buildbot-worker start /home/habr/worker

siyap! Saiki Buildbot bakal nglacak owah-owahan lan micu tumindak-y ing svn, nindakake langkah-langkah mbangun lan nguji proyek kanthi arsitektur ing ndhuwur.

Ing ngisor iki aku bakal njlèntrèhaké sawetara fitur saka ndhuwur master.cfg.

6.1 Ing dalan menyang master.cfg


Nalika nulis sandi master.cfg Akeh kesalahan sing bakal ditindakake, mula kudu maca file log. Iku disimpen minangka BuildMaster-ec path absolut /home/habr/master/twistd.log, lan ing sisih Worker-a kanthi path absolut /home/habr/worker/twistd.log. Nalika maca kesalahan lan ndandani, sampeyan kudu miwiti maneh layanan BuildMaster-a. Mangkene carane ditindakake:


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

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

Pisanan, ayo dideleng svn_poller. Iki isih antarmuka sing padha, polling repositori kanthi rutin saben menit. Ing kasus iki svn_poller mung ngakses cabang trunk. Parameter misterius split_file=util.svn.split_file_alwaystrunk mranata aturan: carane break munggah struktur folder svn ing cabang. Dheweke uga nawakake dalan sing relatif. Ing gilirane split_file_alwaystrunk simplifies proses ngandika yen gudang mung ngemot trunk.

В Penjadwal dituduhake GantiFiltersing weruh Ana lan digandhengake cabang karo trunk miturut asosiasi diwenehi liwat split_file_alwaystrunk. Nanggapi owah-owahan ing trunk, Lancar Site karo jeneng Proyek sampeyan.

situs ing kene perlu supaya admin nampa mailing list asil mbangun lan testing minangka pemilik saka proses.

Langkah mbangun-a deloken bisa mbusak kabeh file sing ana ing versi lokal gudang Worker-A. Lan banjur nindakake lengkap nganyari svn. Mode dikonfigurasi liwat parameter modus = kebak, cara = seger... Parameter haltOnTailure ngandika yen nganyari svn bakal dieksekusi kanthi kesalahan, banjur kabeh proses bangunan lan tes kudu dilereni, amarga tumindak luwih ora ana gunane.

6.3 Layang kanggo sampeyan: wartawan duwe wewenang kanggo ngumumake


Wartawan iku layanan kanggo ngirim kabar liwat 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]

Dheweke bisa ngirim pesen cara sing beda.

MailNotifier nggunakake email kanggo ngirim kabar.

template_html nyetel cithakan teks kanggo newsletter. HTML digunakake kanggo nggawe markup. Iku diowahi dening engine jinja2 (bisa dibandhingake karo django). BuildBot nduweni seperangkat variabel sing nilai diganti dadi cithakan sajrone proses ngasilake teks pesen. Variabel kasebut dilampirake ing {{ kurung kriting ganda }}. Tuladhane, ringkesan nampilake status operasi rampung, yaiku, sukses utawa gagal. A proyèk bakal output Proyek sampeyan. Dadi, nggunakake printah kontrol ing jinja2, variabel BuildBot-a lan alat format string python, sampeyan bisa nggawe pesen sing cukup informatif.

MailNotifier ngandhut argumen ing ngisor iki.

sakaaddr – alamat saka ngendi saben wong bakal nampa newsletter.

sendToInterestedUsers= True ngirim pesen menyang pemilik lan pangguna sing nggawe tumindak.

deloken — sufiks sing kudu ditambahake ing jeneng pangguna sing nampa buletin. Dadi admin carane pangguna bakal nampa newsletter ing alamat [email dilindhungi].

relayhost nemtokake jeneng host sing dibukak server SMTP, a smptPort nemtokake nomer port sing ngrungokake SMTP server.

mode="warning" ngandika yen mailing mung kudu rampung yen ana ing paling siji langkah mbangun-a, kang rampung karo Gagal status utawa bebaya. Ing kasus sukses, ora perlu ngirim buletin.

extraRecipients ngemot dhaptar wong sing ngirim ngirim surat saliyane pemilik lan wong sing nindakake tumindak.

pesenFormatter minangka obyek sing nemtokake format pesen, cithakan, lan sakumpulan variabel sing kasedhiya saka jinja2. Pilihan kayata wantProperties=Bener и wantSteps=Bener nemtokake set iki saka variabel kasedhiya.

karo ['layanan']=[sendMessageToAll] nyedhiyakake dhaptar layanan, ing antarane sing bakal ana reporter.

Kita nindakaken! Sugeng

Kita nggawe konfigurasi dhewe lan ndeleng fungsi sing bisa ditindakake. BuildBot. Iki, aku, cukup kanggo ngerti apa alat iki dibutuhake kanggo nggawe proyek sampeyan. Apa sampeyan kasengsem ing dheweke? Apa bakal migunani kanggo sampeyan? Apa dheweke kepenak digarap? Banjur aku ora nulis artikel iki muspra.

Lan luwih. Aku kaya masyarakat profesional nggunakake BuildBot, dadi luwih akeh, manual diterjemahake, lan ana conto liyane.

Matur nuwun kabeh kanggo perhatian sampeyan. Sugeng dalu.

Source: www.habr.com

Add a comment