Требало је да подесим процес састављања и испоруке софтверских пакета из Гит репозиторија на сајт. И када сам, не тако давно, овде на Хабреу видео чланак о буилдбот-у (линк на крају), одлучио сам да га испробам и применим.
Пошто је буилдбот дистрибуирани систем, било би логично направити посебан хост за сваку архитектуру и оперативни систем. У нашем случају, то ће бити ЛКСЦ контејнери (у случају Линук-а) и кему (у случају Виндовс-а):
вм-срв-буилд1 - центос 7, биће буилдбот мастер и један од радника
вм-срв-буилд2 - дебиан 10, за прављење ДЕБ пакета
вм-срв-буилд3 - виндовс 10, за монтажу, знате за шта
скупљаћемо Рац ГУИ — графички интерфејс за 1Ц рац за управљање кластером сервера. За Линук ће се користити стандардни алати за сваки ОС за прављење еке датотеке за Виндовс из тцл скрипте; фрееврап.
Инсталација
ГНУ / Линук
На интернету постоји довољно документације за инсталацију 1,2. Да, и не изазива никакве посебне проблеме:
За мајстора:
Наравно, било би исправније прикупљати пакете за сваки ОС, али то је ван оквира чланка. Такође ћемо изоставити опис постављања контејнера за рад, само ћу напоменути да користим ПрокМок ВЕ. Такође ћете морати да инсталирате пакете за сваку осу потребну за склапање (центос: рпмдевтоолс, итд.; дебиан: буилд-ессентиал, дх-маке, пбуилдер, итд.)
Пројекти изградње и услуге буилдбот ће бити покренути као непривилеговани корисник, тако да морате да креирате један на свим хостовима који учествују у процесу:
adduser buildbot
Затим ћемо конфигурисати аутоматско покретање услуга, респективно, на сваком од домаћина (контејнера):
Након овога, можете креирати инфраструктуру директоријума за „раднике“ (на свим хостовима), да бисте то урадили, региструјте се под буилдбот корисником и покрените следеће команде:
На првом хосту вм-срв-буилд1:
su - buildbot
mkdir /home/buildbot/worker
cd ~
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker vm-srv-build1:4000 CentOS 123456
На другом хосту вм-срв-буилд2:
su - buildbot
mkdir /home/buildbot/worker
cd ~
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker vm-srv-build1:4000 Debian-10 123456
На радничким хостовима може се покренути сервис буилдбот-воркер
systemctl start buildbot-worker
МС Виндовс
Као „радник“ за склапање под Виндовс-ом, користиће се виртуелна машина са најновијим издањем Вин10.
За рад ће вам требати:
Након што је све горе наведено, можете инсталирати сам буилдбот:
pip install buildbot-worker
Хајде да направимо радни директоријум
md c:worker
И хајде да покренемо
buildbot-worker start c:worker
Ако све функционише (погледајте дневник ц:воркертвистд.лог), онда можете да региструјете нашег „радника“ као услугу додавањем ставке са радним директоријумом у регистар (команде се извршавају у поверсхелл-у који ради као администратор):
То је све са „радницима“, не морате их даље дирати, сва контрола долази од господара.
Подешавање чаробњака
За почетак, хајде да креирамо инфраструктуру за мастер (на главном хосту), да бисте то урадили, региструјте се под буилдбот корисником и покрените следеће команде:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
За готове пакете, направите директоријум за изградњу
mkdir /home/buildbot/builds
Датотека мастер.цфг је креирана у /хоме/буилдбот/мастер/ директоријуму. Ова датотека је питхон код и садржи опис свих механизама система са којима ћемо радити у будућности.
Да бисте аутоматизовали склапање пакета различитих верзија, како не би морали да се удубљујете у код фајла мастер.цфг, у главној скрипти програма рац_гуи.тцл, у заглавље су додати редови са тренутном верзијом и издањем :
И на основу ових редова, буилдбот ће нумерисати пакете. Да бисте издвојили податке, користите позив греп конзоле. У буилдбот-у једноставно не можете да дефинишете варијабле за „раднике“ (барем нисам нашао како). За ово се користе својства. Оне. У процесу састављања додајемо кораке за одређивање верзије и издања и, сходно томе, постављамо својства верзије и издања. Својства се могу подесити на различите начине, у овом случају позивањем команде конзоле:
# Добавим определение версии из основного файла
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"
)
)
Добијене вредности можете заменити позивом утил.Интерполате().
Готов састављени пакет и архиву са изворима копирамо на мајстора. Али можете одмах копирати датотеке из своје радне датотеке у своје спремиште или веб локацију.
# Скопируем файл на мастер
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")
)
)
Почнимо процес копирања прикупљених пакета на хостинг преко ФТП-а на мастеру. У ту сврху се користи скрипта он тцл.
То је то са РПМ. Сада почнимо да описујемо алгоритам за прављење ДЕБ пакета. Пошто су процеси за прављење пакета за различите системе независни један од другог, многи кораци ће се поновити.
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"]))
За РПМ пакет, неке од следећих процедура обавља сам рпм током састављања и описане су унутар спецификације за Дебиан, морате то урадити овде:
# Поменяем пути к библиотекам
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")]
)
)
Сачувајте датотеку и можете покушати да покренете услугу чаробњака:
systemctl restart buildbot-master
У дневнику ћемо проверити да ли је све у реду са конфигурацијом и да ли све ради нормално. Сви наши радници би сада требало да се повежу, што ће се радо пријавити у дневник »»'/хоме/буилдбот/мастер/твистд.лог»»':
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
Ово завршава процес подешавања. Можете видети тренутни статус преко веб интерфејса. Где такође можете видети грешке у изградњи, покренути замрзнути процес ако нешто пође по злу итд.
Одмах након лансирања, наше вредне раднике можете погледати кроз мени „Изградња” -> „Радници”
Након што се заврши први процес изградње (тј. промене Гит спремишта), статус процеса ће се појавити на првој страници.
Ако мишем кликнете на жељену линију, отвориће се страница са тренутним стањем овог процеса, где можете видети шта се дешава, које грешке итд.
Целокупну конфигурацију чаробњака можете пронаћи овде