Ik moast it proses ynstelle foar it gearstallen en leverjen fan softwarepakketten fan in Git-repository nei de side. En doe't ik, net sa lang lyn, hjir op Habré in artikel oer buildbot seach (keppeling oan 'e ein), besleat ik it te besykjen en it oan te passen.
Sûnt buildbot in ferspraat systeem is, soe it logysk wêze om in aparte buildhost te meitsjen foar elke arsjitektuer en bestjoeringssysteem. Yn ús gefal sille dit LXC-konteners wêze (yn it gefal fan Linux) en qemu (yn it gefal fan Windows):
vm-srv-build1 - centos 7, d'r sil in buildbotmaster wêze en ien fan 'e arbeiders
vm-srv-build2 - debian 10, foar it bouwen fan DEB-pakketten
vm-srv-build3 - windows 10, foar montage, jo witte wêrfoar
Wy sille sammelje Rac GUI - in grafyske ynterface foar 1C rac foar it behearen fan in kluster fan servers. Foar Linux sille standert ark foar elk OS wurde brûkt; om in exe-bestân foar Windows te bouwen fan in tcl-skript, brûk freewrap.
ynstelling
GNU / Linux
D'r is genôch dokumintaasje op it ynternet foar ynstallaasje 1,2. Ja, en it feroarsaket gjin spesjale problemen:
Foar de master:
Fansels soe it korrekter wêze om pakketten foar elk OS te sammeljen, mar dit is bûten it berik fan it artikel. Wy sille ek de beskriuwing fan it ynstellen fan konteners foar wurk weilitte, ik sil allinich konstatearje dat ik ProxMox VE brûke. En jo sille ek pakketten moatte ynstallearje foar elke as nedich foar montage (centos: rpmdevtools, ensfh.; debian: build-essential, dh-make, pbuilder, ensfh.)
Build-projekten en buildbot-tsjinsten sille wurde lansearre as in unprivileged brûker, dus jo moatte ien meitsje op alle hosts dy't meidogge oan it proses:
adduser buildbot
Folgjende sille wy respektivelik de automatyske lansearring fan tsjinsten konfigurearje op elk fan 'e hosts (kontainers):
Hjirnei kinne jo in mapynfrastruktuer meitsje foar "wurkers" (op alle hosts), om dit te dwaan, registrearje ûnder de buildbot-brûker en fier de folgjende kommando's út:
Op de earste host 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
Op de twadde host 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
Op arbeidershosts kin de buildbot-worker-tsjinst wurde begon
systemctl start buildbot-worker
MS Windows
As "arbeider" foar montage ûnder Windows sil in firtuele masine mei de lêste útjefte fan Win10 brûkt wurde.
Om te wurkjen sille jo nedich wêze:
Nei't al it boppesteande is ynstalleare, kinne jo de buildbot sels ynstallearje:
pip install buildbot-worker
Litte wy in wurkmap oanmeitsje
md c:worker
En lit ús begjinne
buildbot-worker start c:worker
As alles wurket (sjoch log c:workertwistd.log), dan kinne jo ús "wurker" as tsjinst registrearje troch in item mei de wurkmap ta te foegjen oan it register (kommando's wurde útfierd yn powershell dy't as behearder rinne):
Dat is alles mei de "wurkers", jo hoege se net fierder te reitsjen, alle kontrôle komt fan 'e master.
Wizard opset
Om te begjinnen, litte wy de ynfrastruktuer foar de master oanmeitsje (op 'e haadhost), om dit te dwaan, registrearje ûnder de buildbot-brûker en útfiere de folgjende kommando's:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Foar klearmakke pakketten, meitsje in buildmap
mkdir /home/buildbot/builds
In master.cfg-bestân is makke yn de map /home/buildbot/master/. Dit bestân is in pythonkoade en befettet in beskriuwing fan alle meganismen fan it systeem; wy sille der yn 'e takomst mei wurkje.
Om de gearstalling fan pakketten fan ferskate ferzjes te automatisearjen, om net te ferdjipjen yn 'e koade fan' e master.cfg-bestân, waarden rigels mei de aktuele ferzje en frijlitting tafoege yn 'e koptekst fan it haadskript fan it programma rac_gui.tcl:
En basearre op dizze rigels sil buildbot de pakketten nûmere. Om gegevens te ekstrahearjen, brûk de konsole grep-oprop. Yn buildbot kinne jo gewoan gjin fariabelen definiearje foar "wurkers" (teminsten, ik haw net fûn hoe). Dit is wêrfoar eigenskippen wurde brûkt. Dy. Yn it assemblageproses foegje wy stappen ta om de ferzje en frijlitting te bepalen en, sadwaande, de ferzje en release-eigenskippen yn te stellen. Eigenskippen kinne op ferskate manieren ynsteld wurde, yn dit gefal troch it konsole-kommando op te roppen:
# Добавим определение версии из основного файла
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"
)
)
Jo kinne de resultearjende wearden ferfange troch util.Interpolate () te roppen.
Om de juste release- en ferzjenûmers yn te stellen, brûk in standert sed-oprop, d.w.s. it kommando ferfangt de wearden yn it spec-bestân mei de fereaske
Wy kopiearje it klear gearstalde pakket en it argyf mei boarnen nei de master. Mar jo kinne bestannen fuortendaliks kopiearje fan jo wurkbestân nei jo repository of webside.
# Скопируем файл на мастер
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")
)
)
Litte wy it proses begjinne fan it kopiearjen fan de sammele pakketten nei de hosting fia FTP op 'e master. Foar dit doel wurdt it brûkt skrift op tcl.
Dat is it mei RPM. Litte wy no begjinne mei it beskriuwen fan it algoritme foar it bouwen fan in DEB-pakket. Sûnt de prosessen foar it bouwen fan pakketten foar ferskate systemen binne ûnôfhinklik fan elkoar, sille in protte stappen wurde werhelle.
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"]))
Foar in RPM-pakket wurde guon fan 'e folgjende prosedueres dien troch de rpm sels tidens de gearstalling en wurde beskreaun binnen de spec; foar Debian moatte jo it hjir dwaan:
# Поменяем пути к библиотекам
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")]
)
)
Bewarje it bestân en jo kinne besykje de wizardtsjinst te begjinnen:
systemctl restart buildbot-master
Yn it log sille wy kontrolearje dat alles yn oarder is mei de konfiguraasje en alles wurket as normaal. Al ús arbeiders moatte no ferbine, wat lokkich wurdt rapportearre yn it log »»'/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
Dit foltôget it opsetproses. Jo kinne de aktuele status besjen fia de webynterface. Wêr't jo ek bouwflaters kinne sjen, in beferzen proses traapje as der wat mis gie, ensfh.
Fuort nei de lansearring kinne ús hurde wurkers besjoen wurde fia it menu "Builds" -> "Wurkers"
Nei't it earste bouproses foltôge is (dus feroaringen oan it Git-repository), sil de status fan 'e prosessen op 'e earste side ferskine.
As jo mei de mûs op de winske rigel klikke, sil in side iepenje mei de aktuele tastân fan dit proses, wêr't jo kinne sjen wat der bart, hokker flaters, ensfh.
De folsleine wizard-konfiguraasje is hjir te finen