Mi devis agordi la procezon de kunigo kaj liverado de programarpakaĵoj de Git-deponejo al la retejo. Kaj kiam mi vidis, antaŭ ne tiom longe, ĉi tie ĉe Habré artikolon pri buildbot (ligilo ĉe la fino), mi decidis provi ĝin kaj apliki ĝin.
Ĉar buildbot estas distribuita sistemo, estus logike krei apartan konstrugastiganton por ĉiu arkitekturo kaj operaciumo. En nia kazo, ĉi tiuj estos LXC-ujoj (kaze de Linukso) kaj qemu (kaze de Vindozo):
vm-srv-build1 - centos 7, estos buildbot-majstro kaj unu el la laboristoj
vm-srv-build2 - debian 10, por konstrui DEB-pakaĵojn
vm-srv-build3 - Windows 10, por kunigo, vi scias por kio
Ni kolektos Rac GUI — grafika interfaco por 1C rac por administri aron da serviloj. Por Linukso, normaj iloj por ĉiu OS estos uzataj; por konstrui exe-dosieron por Vindozo el tcl-skripto, uzu libera envolvi.
fikso
GNU/Linukso
Estas sufiĉe da dokumentaro en la Interreto por instali 1,2. Jes, kaj ĝi ne kaŭzas specialajn problemojn:
Por la majstro:
Kompreneble, estus pli ĝuste kolekti pakaĵojn por ĉiu OS, sed ĉi tio estas preter la amplekso de la artikolo. Ni ankaŭ preterlasos la priskribon pri starigo de ujoj por laboro, mi nur rimarkos, ke mi uzas ProxMox VE. Kaj vi ankaŭ devos instali pakaĵojn por ĉiu akso necesa por kunigo (centos: rpmdevtools, ktp.; debian: build-essential, dh-make, pbuilder, ktp.)
Konstruaj projektoj kaj buildbot-servoj estos lanĉitaj kiel senprivilegia uzanto, do vi devas krei unu en ĉiuj gastigantoj partoprenantaj en la procezo:
adduser buildbot
Poste, ni agordos la aŭtomatan lanĉon de servoj, respektive, sur ĉiu el la gastigantoj (ujoj):
Post ĉi tio, vi povas krei dosierujan infrastrukturon por "laboristoj" (sur ĉiuj gastigantoj), por fari tion, registriĝu sub la uzanto de buildbot kaj rulu la jenajn komandojn:
Sur la unua gastiganto vm-srv-build1:
su - buildbot
mkdir /home/buildbot/worker
cd ~
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker vm-srv-build1:4000 CentOS 123456
Sur la dua gastiganto vm-srv-build2:
su - buildbot
mkdir /home/buildbot/worker
cd ~
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker vm-srv-build1:4000 Debian-10 123456
Sur laboristaj gastigantoj, la servo de buildbot-laboristo povas esti komencita
systemctl start buildbot-worker
MS Windows
Kiel "laboristo" por kunigo sub Vindozo, virtuala maŝino kun la plej nova eldono de Win10 estos uzata.
Por labori vi bezonos:
Post kiam ĉio ĉi-supra estas instalita, vi povas instali la buildbot mem:
pip install buildbot-worker
Ni kreu labordosierujon
md c:worker
Kaj ni lanĉu
buildbot-worker start c:worker
Se ĉio funkcias (vidu protokolon c:workertwistd.log), tiam vi povas registri nian "laboriston" kiel servon aldonante eron kun la labordosierujo al la registro (komandoj estas ekzekutitaj en powershell funkcianta kiel administranto):
Tio estas ĉio kun la "laboristoj", vi ne devas tuŝi ilin plu, ĉiu kontrolo venas de la mastro.
Agordo de Sorĉisto
Komence, ni kreu la infrastrukturon por la majstro (sur la ĉefa gastiganto), por fari tion, registriĝu sub la uzanto de buildbot kaj rulu la jenajn komandojn:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Por pretaj pakaĵoj, kreu konstruaĵdosierujon
mkdir /home/buildbot/builds
Master.cfg dosiero estis kreita en la dosierujo /home/buildbot/master/. Ĉi tiu dosiero estas python-kodo kaj enhavas priskribon de ĉiuj mekanismoj de la sistemo; ni laboros kun ĝi estonte.
Por aŭtomatigi la muntadon de pakoj de malsamaj versioj, por ne devi enprofundiĝi en la kodon de la dosiero master.cfg, en la ĉefa skripto de la programo rac_gui.tcl, linioj kun la aktuala versio kaj eldono estis aldonitaj en la kaplinio. :
Kaj surbaze de ĉi tiuj linioj, buildbot numeros la pakaĵojn. Por ĉerpi datumojn, uzu la konzola grep-vokon. En buildbot vi simple ne povas difini variablojn por "laboristoj" (almenaŭ, mi ne trovis kiel). Jen por kio propraĵoj estas uzataj. Tiuj. En la kunigprocezo, ni aldonas paŝojn por determini la version kaj liberigon kaj, sekve, agordi la versiojn kaj eldonajn proprietojn. Propraĵoj povas esti agorditaj en diversaj manieroj, en ĉi tiu kazo vokante la konzolan komandon:
# Добавим определение версии из основного файла
rac_gui_build_RPM.addStep(
steps.SetPropertyFromCommand(
command="grep version ../rac-gui/rac_gui.tcl | grep -oE 'b[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}b'", property="version"
)
)
# Добавим определение релиза из основного файла
rac_gui_build_RPM.addStep(
steps.SetPropertyFromCommand(
command="grep release ../rac-gui/rac_gui.tcl | grep -oE 'b[0-9]{1,3}b'", property="release"
)
)
Vi povas anstataŭigi la rezultajn valorojn vokante util.Interpolate().
Por agordi la ĝustajn eldonajn kaj versionumrojn, uzu norman sed-vokon, t.e. la komando anstataŭigas la valorojn ene de la specifdosiero per la postulataj
Ni kopias la finitan kunmetitan pakaĵon kaj la arkivon kun fontoj al la majstro. Sed vi povas tuj kopii dosierojn de via labordosiero al via deponejo aŭ retejo.
# Скопируем файл на мастер
rac_gui_build_RPM.addStep(
steps.FileUpload(
workersrc=util.Interpolate("/home/buildbot/rpmbuild/RPMS/noarch/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm"),
masterdest=util.Interpolate("/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm")
)
)
rac_gui_build_RPM.addStep(
steps.FileUpload(
workersrc=util.Interpolate("/home/buildbot/rpmbuild/SOURCES/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"),
masterdest=util.Interpolate("/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz")
)
)
Ni komencu la procezon kopii la kolektitajn pakaĵojn al la gastigado per FTP sur la majstro. Tiucele ĝi estas uzata skripto sur tcl.
Jen ĝi kun RPM. Nun ni komencu priskribi la algoritmon por konstrui DEB-pakaĵon. Ĉar la procezoj por konstrui pakaĵojn por malsamaj sistemoj estas sendependaj unu de la alia, multaj paŝoj estos ripetitaj.
rac_gui_build_DEB = util.BuildFactory()
rac_gui_build_DEB.addStep(steps.Git(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
haltOnFailure = True,
submodules = True,
mode='full',
workdir='build',
progress = True)
)
# Добавим определение версии из основного файла
rac_gui_build_DEB.addStep(
steps.SetPropertyFromCommand(
command="grep version rac_gui.tcl | grep -oE 'b[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}b'", property="version"
)
)
# Добавим определение релиза из основного файла
rac_gui_build_DEB.addStep(
steps.SetPropertyFromCommand(
command="grep release rac_gui.tcl | grep -oE 'b[0-9]{1,3}b'", property="release"
)
)
# Переименуем запускаемый файл
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["mv", "rac_gui.tcl", "racgui"]))
Por RPM-pakaĵo, kelkaj el la sekvaj proceduroj estas faritaj de la rpm mem dum kunigo kaj estas priskribitaj ene de la specifo; por Debiano, vi devas fari ĝin ĉi tie:
# Поменяем пути к библиотекам
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["sed", "-i", "s+^set dir(lib)+set dir(lib) /usr/share/rac-gui/lib ;#+g", "racgui"]))
# Поменяем пути к файлам
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["sed", "-i", "s+[pwd]+/usr/share/rac-gui+g", "racgui"]))
# заархивируем исходники
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["tar", "czf", util.Interpolate("../rac-gui_%(prop:version)s.orig.tar.gz"), "."]))
# Соберём пакет
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["dpkg-buildpackage"]))
# Скопируем файл на мастер
rac_gui_build_DEB.addStep(
steps.FileUpload(
workersrc=util.Interpolate("../rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb"),
masterdest=util.Interpolate("/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb")
)
)
rac_gui_build_DEB.addStep(
steps.MasterShellCommand(
command=["/usr/local/bin/deploy-ftp.tcl",
util.Interpolate("--local-file=/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb"),
util.Interpolate("--remote-file=uploads/rac-gui/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb")]
)
)
Konservu la dosieron kaj vi povas provi komenci la sorĉistservon:
systemctl restart buildbot-master
En la protokolo ni kontrolos, ke ĉio estas en ordo kun la agordo kaj ĉio funkcias normale. Ĉiuj niaj laboristoj nun devus konektiĝi, kio feliĉe estos raportita en la protokolo »»'/home/buildbot/master/twistd.log»»':
2019-07-24 16:50:35+0300 [-] Loading buildbot.tac...
2019-07-24 16:50:35+0300 [-] Loaded.
2019-07-24 16:50:35+0300 [-] twistd 19.2.1 (/usr/bin/python3.6 3.6.8) starting up.
2019-07-24 16:50:35+0300 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
2019-07-24 16:50:35+0300 [-] Starting BuildMaster -- buildbot.version: 2.3.1
2019-07-24 16:50:35+0300 [-] Loading configuration from '/home/buildbot/master/master.cfg'
2019-07-24 16:50:36+0300 [-] /usr/local/lib/python3.6/site-packages/buildbot/config.py:90: buildbot.config.ConfigWarning: [0.9.0 and later] `buildbotNetUsageData` is not configured and defaults to basic.
This parameter helps the buildbot development team to understand the installation base.
No personal information is collected.
Only installation software version info and plugin usage is sent.
You can `opt-out` by setting this variable to None.
Or `opt-in` for more information by setting it to "full".
2019-07-24 16:50:36+0300 [-] Setting up database with URL 'sqlite:/state.sqlite'
2019-07-24 16:50:36+0300 [-] setting database journal mode to 'wal'
2019-07-24 16:50:36+0300 [-] adding 1 new services, removing 0
2019-07-24 16:50:36+0300 [-] adding 1 new change_sources, removing 0
2019-07-24 16:50:36+0300 [-] gitpoller: using workdir '/home/buildbot/master/gitpoller-work'
2019-07-24 16:50:36+0300 [-] adding 3 new builders, removing 0
2019-07-24 16:50:36+0300 [-] adding 1 new schedulers, removing 0
2019-07-24 16:50:36+0300 [-] initializing www plugin 'waterfall_view'
2019-07-24 16:50:36+0300 [-] initializing www plugin 'console_view'
2019-07-24 16:50:36+0300 [-] initializing www plugin 'grid_view'
2019-07-24 16:50:36+0300 [-] NOTE: www plugin 'sitenav' is installed but not configured
2019-07-24 16:50:36+0300 [-] initializing www plugin 'waterfall_view'
2019-07-24 16:50:36+0300 [-] initializing www plugin 'console_view'
2019-07-24 16:50:36+0300 [-] initializing www plugin 'grid_view'
2019-07-24 16:50:36+0300 [-] NOTE: www plugin 'sitenav' is installed but not configured
2019-07-24 16:50:36+0300 [-] BuildbotSite starting on 80
2019-07-24 16:50:36+0300 [-] Starting factory <buildbot.www.service.BuildbotSite object at 0x7fe31c2657b8>
2019-07-24 16:50:36+0300 [-] adding 3 new workers, removing 0
2019-07-24 16:50:36+0300 [-] PBServerFactory starting on 4000
2019-07-24 16:50:36+0300 [-] Starting factory <twisted.spread.pb.PBServerFactory object at 0x7fe31c147470>
2019-07-24 16:50:37+0300 [-] BuildMaster is running
2019-07-24 16:50:37+0300 [-] buildbotNetUsageData: sending {'installid': 'b6193b126b96689351d2fe95787c5a03fc0879f9', 'versions': {'Python': '3.6.8', 'Buildbot': '2.3.1', 'Twisted': '19.2.1'}, 'platform': {'platform': 'Linux-4.15.18-10- pve-x86_64-with-centos-7.6.1810-Core', 'system': 'Linux', 'machine': 'x86_64', 'processor': 'x86_64', 'python_implementation': 'CPython', 'version': '#1 SMP PVE 4.15.18-32', 'distro': 'centos:7'}, 'plugins': {'buildbot/worker/base/Worker': 3, 'buildbot/config/BuilderConfig': 3, 'buildbot/schedulers/basic/SingleBranchScheduler': 1, 'buildbot/reporters/mail/MailNotifier': 1, 'buildbot/changes/gitpoller/GitPoller': 1, 'buildbot/steps/worker/MakeDirectory': 1, 'buildbot/steps/source/git/Git': 3, 'buildbot/steps/shell/ShellCommand': 9, 'buildbot/steps/package/rpm/rpmbuild/RpmBuild': 1}, 'db': 'sqlite', 'mq': 'simple', 'www_plugins': ['waterfall_view', 'console_view', 'grid_view']}
2019-07-24 16:50:37+0300 [Broker,0,127.0.0.1] worker 'CentOS' attaching from IPv4Address(type='TCP', host='127.0.0.1', port=37332)
2019-07-24 16:50:37+0300 [Broker,0,127.0.0.1] Got workerinfo from 'CentOS'
2019-07-24 16:50:37+0300 [-] bot attached
2019-07-24 16:50:37+0300 [Broker,0,127.0.0.1] Worker CentOS attached to Rac-GUI-RPM-builder
2019-07-24 16:50:37+0300 [-] buildbotNetUsageData: buildbot.net said: ok
2019-07-24 16:50:39+0300 [Broker,1,192.168.55.15] worker 'Windows-10' attaching from IPv4Address(type='TCP', host='192.168.5.145', port=49831)
2019-07-24 16:50:39+0300 [Broker,1,192.168.55.15] Got workerinfo from 'Windows-10'
2019-07-24 16:50:40+0300 [-] bot attached
2019-07-24 16:50:40+0300 [Broker,1,192.168.55.15] Worker Windows-10 attached to Rac-GUI-WIN-builder
2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] worker 'Debian-10' attaching from IPv4Address(type='TCP', host='192.168.5.9', port=44430)
2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] Got workerinfo from 'Debian-10'
2019-07-24 16:50:41+0300 [-] bot attached
2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] Worker Debian-10 attached to Rac-GUI-DEB-builder
Ĉi tio kompletigas la agordan procezon. Vi povas vidi la nunan staton per la retinterfaco. Kie vi ankaŭ povas vidi konstruajn erarojn, piedbati frostan procezon se io misfunkciis, ktp.
Tuj post la lanĉo, niaj laborantoj povas esti viditaj per la menuo "Konstruaĵoj" -> "Laboristoj"
Post kiam la unua konstruprocezo estas finita (t.e. ŝanĝoj al la Git-deponejo), la stato de la procezoj aperos sur la unua paĝo.
Se vi klakas sur la dezirata linio per la muso, paĝo malfermiĝos kun la nuna stato de ĉi tiu procezo, kie vi povas vidi kio okazas, kiaj eraroj, ktp.