Mul oli vaja seadistada tarkvarapakettide kokkupanemise ja Giti hoidlast saidile tarnimise protsess. Ja kui ma mitte nii kaua aega tagasi nägin siin Habré artiklit buildboti kohta (link lõpus), otsustasin seda proovida ja rakendada.
Kuna buildbot on hajutatud süsteem, oleks loogiline luua iga arhitektuuri ja operatsioonisüsteemi jaoks eraldi ehitushost. Meie puhul on need LXC-konteinerid (Linux'i puhul) ja qemu (Windowsi puhul):
vm-srv-build1 - centos 7, seal on buildboti juht ja üks töötajatest
vm-srv-build3 - Windows 10, kokkupanemiseks, teate mille jaoks
Me kogume Rac GUI — 1C rac graafiline liides serveriklastri haldamiseks. Linuxi puhul kasutatakse iga OS-i jaoks standardtööriistu; Windowsi jaoks exe-faili loomiseks tcl-skriptist kasutage freewrap.
Paigaldamine
GNU / Linux
Internetis on installimiseks piisavalt dokumentatsiooni 1,2. Jah, ja see ei tekita erilisi probleeme:
Meistri jaoks:
Muidugi oleks õigem koguda pakette iga OS-i jaoks, kuid see ei kuulu artikli ulatusse. Jätame ära ka konteinerite tööks seadistamise kirjelduse, märgin vaid ära, et kasutan ProxMox VE-d. Samuti peate installima paketid iga monteerimiseks vajaliku telje jaoks (centos: rpmdevtools jne; debian: build-essential, dh-make, pbuilder jne)
Ehitusprojektid ja buildboti teenused käivitatakse privilegeeritud kasutajana, seega peate selle looma kõigis protsessis osalevates hostides:
adduser buildbot
Järgmisena konfigureerime teenuste automaatse käivitamise vastavalt igas hostis (konteineris):
Pärast seda saate luua "töötajate" jaoks kataloogi infrastruktuuri (kõikides hostides), selleks registreeruge buildboti kasutaja all ja käivitage järgmised käsud:
Esimeses hostis 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
Teises hostis 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
Töötajate hostidel saab käivitada buildbot-worker teenuse
systemctl start buildbot-worker
MS Windows
Windowsi monteerimise "töölisena" kasutatakse uusima Win10 versiooniga virtuaalset masinat.
Vajaliku töö jaoks:
Kui kõik ülaltoodud on installitud, saate installida buildboti enda:
pip install buildbot-worker
Loome töökataloogi
md c:worker
Ja käivitame
buildbot-worker start c:worker
Kui kõik töötab (vt logi c:workertwistd.log), saate registreerida meie "töötaja" teenusena, lisades registrisse töökataloogiga üksuse (käsud täidetakse administraatorina töötavas powershellis):
See on kõik "töölistega", te ei pea neid rohkem puudutama, kogu kontroll tuleb meistrilt.
Nõustaja seadistamine
Alustuseks loome ülemseadme infrastruktuuri (põhihostis), selleks registreeruge buildboti kasutaja alla ja käivitage järgmised käsud:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Valmispakettide jaoks looge ehituste kataloog
mkdir /home/buildbot/builds
Kataloogis /home/buildbot/master/ loodi fail master.cfg. See fail on pythoni kood ja sisaldab kõigi süsteemi mehhanismide kirjeldust; me töötame sellega edaspidi.
Erinevate versioonide pakettide kokkupanemise automatiseerimiseks, et ei peaks süvenema faili master.cfg koodi, lisati programmi rac_gui.tcl põhiskripti päisesse read praeguse versiooni ja väljalaskega :
Ja nende ridade põhjal nummerdab buildbot paketid. Andmete eraldamiseks kasutage konsooli grep-kutset. Buildbotis ei saa te lihtsalt "töötajate" muutujaid määratleda (vähemalt ma pole leidnud, kuidas). Selleks kasutatakse omadusi. Need. Koostamisprotsessis lisame sammud versiooni ja väljalase määramiseks ning vastavalt sellele versiooni ja väljalaske atribuutide määramiseks. Atribuudid saab määrata mitmel viisil, antud juhul kutsudes välja konsooli käsu:
# Добавим определение версии из основного файла
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"
)
)
Saadud väärtused saate asendada, kutsudes välja util.Interpolate().
See on RPM-iga kõik. Nüüd alustame DEB-paketi koostamise algoritmi kirjeldamist. Kuna erinevate süsteemide pakettide koostamise protsessid on üksteisest sõltumatud, korratakse paljusid samme.
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"]))
RPM-paketi puhul teeb osa järgmistest toimingutest rpm ise kokkupanemise ajal ja neid kirjeldatakse spetsifikatsioonis; Debiani puhul peate seda tegema siin:
# Поменяем пути к библиотекам
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")]
)
)
Salvestage fail ja võite proovida viisarditeenust käivitada:
systemctl restart buildbot-master
Logis kontrollime, kas konfiguratsiooniga on kõik korras ja kõik töötab nagu tavaliselt. Kõik meie töötajad peaksid nüüd ühenduse looma, millest teatatakse rõõmsalt logis »»'/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
See lõpetab häälestusprotsessi. Praegust olekut saate vaadata veebiliidese kaudu. Kus näete ka ehitamise vigu, külmutatud protsessi käivitamist, kui midagi läks valesti jne.
Kohe pärast turuletoomist saab meie töökaid vaadata menüüst “Ehitab” -> “Töölised”
Pärast esimese ehitusprotsessi lõppu (st Giti hoidlasse tehtud muudatusi) kuvatakse protsesside olek esimesel lehel.
Kui vajutate hiirega soovitud reale, avaneb leht selle protsessi hetkeseisuga, kus näete, mis toimub, millised vead jne.