Man bija jāiestata programmatūras pakotņu komplektēšanas un piegādes process no Git krātuves uz vietni. Un, kad es ne tik sen ieraudzīju šeit Habré rakstu par buildbot (saite beigās), es nolēmu to izmēģināt un pielietot.
Tā kā buildbot ir izplatīta sistēma, būtu loģiski izveidot atsevišķu būvēšanas resursdatoru katrai arhitektūrai un operētājsistēmai. Mūsu gadījumā tie būs LXC konteineri (Linux gadījumā) un qemu (Windows gadījumā):
vm-srv-build1 - centos 7, būs buildbot meistars un viens no darbiniekiem
vm-srv-build2 - debian 10, lai izveidotu DEB pakotnes
vm-srv-build3 - Windows 10, montāžai, jūs zināt, kam
Mēs savāksim Rac GUI — grafiskais interfeiss 1C rac serveru kopas pārvaldībai. Operētājsistēmā Linux tiks izmantoti standarta rīki katrai OS; lai izveidotu exe failu operētājsistēmai Windows no tcl skripta, izmantojiet bezmaksas iesaiņojums.
Uzstādīšana
GNU / Linux
Internetā ir pietiekami daudz dokumentācijas instalēšanai 1,2. Jā, un tas nerada īpašas problēmas:
Meistaram:
Protams, pareizāk būtu apkopot pakotnes katrai OS, taču tas ir ārpus raksta darbības jomas. Tāpat izlaidīsim aprakstu par konteineru uzstādīšanu darbam, tikai atzīmēšu, ka lietoju ProxMox VE. Un jums būs arī jāinstalē pakotnes katrai ass, kas nepieciešama montāžai (centos: rpmdevtools utt.; debian: build-essential, dh-make, pbuilder utt.)
Build projekti un buildbot pakalpojumi tiks palaisti kā nepievilcīgs lietotājs, tāpēc jums tas ir jāizveido visos resursdatoros, kas piedalās procesā:
adduser buildbot
Tālāk mēs attiecīgi konfigurēsim automātisku pakalpojumu palaišanu katrā no resursdatoriem (konteineriem):
Pēc tam varat izveidot direktoriju infrastruktūru “darbiniekiem” (visos saimniekdatoros), lai to izdarītu, reģistrējieties zem buildbot lietotāja un palaidiet šādas komandas:
Pirmajā resursdatorā 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
Otrajā resursdatorā 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
Darbinieku saimniekdatoros var palaist pakalpojumu buildbot-worker
systemctl start buildbot-worker
MS Windows
Kā “darbinieks” montāžai operētājsistēmā Windows tiks izmantota virtuālā mašīna ar jaunāko Win10 versiju.
Lai strādātu, jums ir nepieciešams:
Kad viss iepriekš minētais ir instalēts, varat instalēt pašu buildbot:
pip install buildbot-worker
Izveidosim darba direktoriju
md c:worker
Un sāksim
buildbot-worker start c:worker
Ja viss darbojas (skatiet žurnālu c:workertwistd.log), varat reģistrēt mūsu “darbinieku” kā pakalpojumu, pievienojot reģistram vienumu ar darba direktoriju (komandas tiek izpildītas Powershell, kas darbojas kā administrators):
Tas ir viss ar "strādniekiem", jums nav viņiem vairāk jāpieskaras, visa kontrole nāk no meistara.
Vedņa iestatīšana
Sākumā izveidosim infrastruktūru galvenajam (galvenajā resursdatorā), lai to izdarītu, reģistrējieties zem buildbot lietotāja un palaidiet šādas komandas:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Gatavām pakotnēm izveidojiet būvējumu direktoriju
mkdir /home/buildbot/builds
Fails master.cfg tika izveidots direktorijā /home/buildbot/master/. Šis fails ir python kods, un tajā ir visu sistēmas mehānismu apraksts; mēs ar to strādāsim turpmāk.
Lai automatizētu dažādu versiju pakotņu komplektēšanu, lai nebūtu jāiedziļinās master.cfg faila kodā, programmas rac_gui.tcl galvenajā skriptā galvenē tika pievienotas rindas ar pašreizējo versiju un izlaidumu. :
Un, pamatojoties uz šīm rindām, buildbot numurēs paketes. Lai iegūtu datus, izmantojiet konsoles grep zvanu. Builbotā jūs vienkārši nevarat definēt mainīgos "darbiniekiem" (vismaz es neesmu atradis, kā). Šim nolūkam tiek izmantotas īpašības. Tie. Montāžas procesā mēs pievienojam darbības, lai noteiktu versiju un laidienu un attiecīgi iestatītu versijas un izlaiduma rekvizītus. Rekvizītus var iestatīt dažādos veidos, šajā gadījumā izsaucot konsoles komandu:
# Добавим определение версии из основного файла
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"
)
)
Iegūtās vērtības var aizstāt, izsaucot util.Interpolate().
Lai iestatītu pareizos laidienu un versiju numurus, izmantojiet standarta sed zvanu, t.i. komanda specifikācijas failā esošās vērtības aizstāj ar nepieciešamajām vērtībām
Tā tas ir ar RPM. Tagad sāksim aprakstīt DEB pakotnes izveides algoritmu. Tā kā dažādu sistēmu pakotņu veidošanas procesi ir neatkarīgi viens no otra, daudzas darbības tiks atkārtotas.
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 pakotnei dažas no šīm procedūrām montāžas laikā veic pats rpm, un tās ir aprakstītas specifikācijā; Debian gadījumā tas jādara šeit:
# Поменяем пути к библиотекам
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")]
)
)
Saglabājiet failu un varat mēģināt palaist vedņa pakalpojumu:
systemctl restart buildbot-master
Žurnālā pārbaudīsim, vai ar konfigurāciju viss ir kārtībā un viss darbojas kā parasti. Tagad visiem mūsu darbiniekiem ir jāpievienojas, par ko ar prieku tiks ziņots žurnālā »»'/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
Tas pabeidz iestatīšanas procesu. Pašreizējo statusu var apskatīt, izmantojot tīmekļa saskarni. Kur var redzēt arī izveides kļūdas, iesaldēt procesu, ja kaut kas nogāja greizi utt.
Uzreiz pēc palaišanas mūsu strādīgos var apskatīt izvēlni “Būvē” -> “Strādnieki”
Pēc pirmā izveides procesa pabeigšanas (t.i., izmaiņas Git repozitorijā), procesu statuss tiks parādīts pirmajā lapā.
Ja ar peli noklikšķināsiet uz vajadzīgās rindas, tiks atvērta lapa ar šī procesa pašreizējo stāvokli, kurā var redzēt, kas notiek, kādas kļūdas utt.