Aviu bisognu di stallà u prucessu di assemblea è furnisce i pacchetti di software da un repository Git à u situ. È quandu aghju vistu, pocu tempu fà, quì nantu à Habré un articulu nantu à buildbot (ligame à a fine), aghju decisu di pruvà è applicà.
Siccomu buildbot hè un sistema distribuitu, saria logicu di creà un host di custruzzione separatu per ogni architettura è sistema operatore. In u nostru casu, questi seranu cuntenituri LXC (in u casu di Linux) è qemu (in u casu di Windows):
vm-srv-build1 - centos 7, ci sarà un maestru di buildbot è unu di i travagliadori
vm-srv-build2 - debian 10, per custruisce pacchetti DEB
vm-srv-build3 - Windows 10, per l'assemblea, sapete per chì
Racolteremu Rac GUI - una interfaccia grafica per 1C rac per a gestione di un cluster di servitori. Per Linux, i strumenti standard per ogni OS seranu utilizati; per custruisce un schedariu exe per Windows da un script tcl, utilizate freewrap.
rimarchevuli
GNU / Linux
Ci hè abbastanza documentazione in Internet per a stallazione 1,2. Iè, è ùn causa micca prublemi speciali:
Per u maestru:
Di sicuru, seria più currettu per cullà i pacchetti per ogni OS, ma questu hè fora di u scopu di l'articulu. Ometteremu ancu a descrizzione di a stallazione di cuntenituri per u travagliu, aghju nutatu solu chì aghju utilizatu ProxMox VE. È averete ancu bisognu di installà pacchetti per ogni asse necessariu per l'assemblea (centos: rpmdevtools, etc.; debian: build-essential, dh-make, pbuilder, etc.)
Custruite prughjetti è servizii di buildbot seranu lanciati cum'è un utilizatore senza privilegiu, cusì avete bisognu di creà unu in tutti l'ospiti chì participanu à u prucessu:
adduser buildbot
Dopu, cunfiguremu u lanciamentu automaticu di servizii, rispettivamente, nantu à ognunu di l'ospiti (contenitori):
Dopu questu, pudete creà una infrastruttura di repertoriu per i "travagliatori" (in tutti l'ospiti), per fà questu, registrate sottu à l'utilizatori di buildbot è eseguite i seguenti cumandamenti:
Nantu à u primu 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
Nantu à u sicondu 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
In l'ospiti di u travagliu, u serviziu di buildbot-worker pò esse iniziatu
systemctl start buildbot-worker
MS Windows
Cum'è un "travagliatore" per l'assemblea sottu Windows, serà aduprata una macchina virtuale cù l'ultima versione di Win10.
Per travaglià, avete bisognu di:
Dopu chì tuttu ciò chì sopra hè stallatu, pudete installà u buildbot stessu:
pip install buildbot-worker
Creemu un cartulare di travagliu
md c:worker
È lanciamu
buildbot-worker start c:worker
Se tuttu funziona (vede u log c:workertwistd.log), pudete registrà u nostru "travagliatore" cum'è serviziu aghjustendu un articulu cù u cartulare di travagliu à u registru (i cumandamenti sò eseguiti in powershell chì funziona cum'è amministratore):
Hè tuttu cù i "travagliatori", ùn avete micca toccu più, tuttu u cuntrollu vene da u maestru.
Configurazione di l'assistente
Per principià, creemu l'infrastruttura per u maestru (nantu à l'ospite principale), per fà questu, registrate sottu à l'utilizatori di buildbot è eseguite i seguenti cumandamenti:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Per i pacchetti pronti, crea un cartulare di custruzzione
mkdir /home/buildbot/builds
Un schedariu master.cfg hè statu creatu in u cartulare /home/buildbot/master/. Stu schedariu hè un codice python è cuntene una descrizzione di tutti i miccanismi di u sistema; avemu da travaglià cun ellu in u futuru.
Per automatizà l'assemblea di pacchetti di diverse versioni, per ùn avè micca sfondate in u codice di u schedariu master.cfg, in u script principale di u prugramma rac_gui.tcl, e linee cù a versione attuale è a liberazione sò state aghjunte in l'intestazione. :
È basatu annantu à queste linee, buildbot numerarà i pacchetti. Per estrarre dati, utilizate a chjama grep di cunsola. In buildbot ùn pudete micca definisce variàbili per i "travagliatori" (almenu, ùn aghju micca truvatu cumu). Hè per quessa chì e proprietà sò aduprate. Quelli. In u prucessu di assemblea, aghjustemu passi per determinà a versione è liberazione è, per quessa, stabilisce a versione è e proprietà di liberazione. E pruprietà ponu esse stabilite in diverse manere, in questu casu chjamendu u cumandamentu di a consola:
# Добавим определение версии из основного файла
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"
)
)
Pudete rimpiazzà i valori resultanti chjamendu util.Interpolate().
Per stabilisce a versione curretta è i numeri di versione, utilizate una chjama sed standard, i.e. u cumandimu rimpiazza i valori in u schedariu spec cù quelli richiesti
Copiemu u pacchettu assemblatu finitu è l'archiviu cù fonti à u maestru. Ma pudete cupià immediatamente i fugliali da u vostru schedariu di travagliu à u vostru repository o situ web.
# Скопируем файл на мастер
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")
)
)
Cuminciamu u prucessu di cupià i pacchetti raccolti à l'ospitu via FTP nantu à u maestru. Per questu scopu hè utilizatu script nantu à tcl.
Hè cusì cù RPM. Avà cuminciamu à descriverà l'algoritmu per custruisce un pacchettu DEB. Siccomu i prucessi per custruisce pacchetti per i diversi sistemi sò indipendenti l'una di l'altru, parechji passi seranu ripetuti.
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"]))
Per un pacchettu RPM, alcune di e seguenti prucedure sò fatte da u rpm stessu durante l'assemblea è sò descritte in a specificazione; per Debian, avete da fà quì:
# Поменяем пути к библиотекам
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")]
)
)
Salvà u schedariu è pudete pruvà à inizià u serviziu di l'assistente:
systemctl restart buildbot-master
In u logu avemu da verificà chì tuttu hè in ordine cù a cunfigurazione è tuttu hè travagliatu cum'è normale. Tutti i nostri travagliadori duveranu avà cunnette, chì sarà felice di esse infurmatu in u 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
Stu compie u prucessu di stallazione. Pudete vede u statu attuale via l'interfaccia web. Induve pudete ancu vede errori di custruzzione, scaccià un prucessu congelatu se qualcosa andò male, etc.
Immediatamente dopu à u lanciu, i nostri travagliadori duru ponu esse vistu attraversu u menu "Custruisce" -> "Lavoratori"
Dopu chì u primu prucessu di custruzzione hè cumpletu (vale à dì i cambiamenti à u repository Git), u statutu di i prucessi apparirà in a prima pagina.
Se cliccate nantu à a linea desiderata cù u mouse, una pagina si apre cù u statu attuale di stu prucessu, induve pudete vede ciò chì succede, chì errori, etc.
L'intera cunfigurazione di l'assistente pò esse truvata quì