Мен Git репозиторийинен сайтка программалык пакеттерди чогултуу жана жеткирүү процессин орнотуу керек болчу. Жакында мен Хабреде buildbot жөнүндө макаланы көргөндө (аягында шилтеме), мен аны сынап көрүп, колдонууну чечтим.
buildbot бөлүштүрүлгөн система болгондуктан, ар бир архитектура жана операциялык система үчүн өзүнчө куруу хостун түзүү логикага ылайыктуу болмок. Биздин учурда, бул LXC контейнерлери (Linux учурда) жана qemu (Windows учурда):
vm-srv-build1 - centos 7, анда buildbot мастери жана жумушчулардын бири болот
vm-srv-build2 - debian 10, DEB пакеттерин куруу үчүн
vm-srv-build3 - Windows 10, чогултуу үчүн, сиз эмне үчүн билесиз
Биз чогултабыз Rac GUI — серверлердин кластерин башкаруу үчүн 1C rac үчүн графикалык интерфейс. Linux үчүн, ар бир ОС үчүн стандарттык куралдар колдонулат; tcl скриптинен Windows үчүн exe файлын түзүү үчүн, колдонуңуз эркин ороп.
жөндөө
GNU / Linux
Орнотуу үчүн Интернетте жетиштүү документтер бар 1,2. Ооба, ал эч кандай өзгөчө көйгөйлөрдү жаратпайт:
Мастер үчүн:
Албетте, ар бир ОС үчүн топтомдорду чогултуу туурараак болмок, бирок бул макаланын алкагына кирбейт. Биз ошондой эле жумушка контейнерлерди орнотуунун сүрөттөлүшүн өткөрүп жиберебиз, мен ProxMox VE колдонгонумду гана белгилейм. Ошондой эле ар бир огу үчүн топтомдорду орнотуу керек болот (centos: rpmdevtools ж.б.; debian: build-essential, dh-make, pbuilder ж.б.)
Долбоорлорду куруу жана buildbot кызматтары артыкчылыксыз колдонуучу катары ишке киргизилет, андыктан процесске катышкан бардык хосттордо бирөөнү түзүшүңүз керек:
adduser buildbot
Андан кийин, биз хосттордун (контейнерлердин) ар биринде кызматтарды автоматтык түрдө ишке киргизүүнү конфигурациялайбыз:
Андан кийин, сиз "жумушчулар" үчүн (бардык хосттордо) каталог инфраструктурасын түзө аласыз, бул үчүн buildbot колдонуучусуна катталып, төмөнкү буйруктарды аткарыңыз:
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
Экинчи хостто 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
Жумушчу хостторунда buildbot-жумушчу кызматын баштаса болот
systemctl start buildbot-worker
MS Windows
Windows астында монтаждоо үчүн "жумушчу" катары Win10 акыркы версиясы бар виртуалдык машина колдонулат.
иш үчүн зарыл:
Жогоруда айтылгандардын бардыгы орнотулгандан кийин, сиз buildbotтун өзүн орното аласыз:
pip install buildbot-worker
Жумушчу каталогду түзөлү
md c:worker
Жана баштайлы
buildbot-worker start c:worker
Эгер баары иштесе (c:workertwistd.log журналын караңыз), анда реестрге жумушчу каталогу бар элементти кошуу менен биздин “жумушчубузду” кызмат катары каттай аласыз (буйруктар администратор катары иштеген powershellде аткарылат):
Мунун баары "жумушчулар" менен, аларга мындан ары тийүүнүн кереги жок, бардык башкаруу мастерден келет.
Устатты орнотуу
Баштоо үчүн, мастердин инфраструктурасын түзөлү (негизги хостто), бул үчүн buildbot колдонуучусуна катталып, төмөнкү буйруктарды аткарыңыз:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Даяр пакеттер үчүн куруу каталогун түзүңүз
mkdir /home/buildbot/builds
/home/buildbot/master/ каталогунда master.cfg файлы түзүлдү. Бул файл питон коду жана системанын бардык механизмдеринин сыпаттамасын камтыйт, биз аны менен келечекте иштейбиз.
Master.cfg файлынын кодун изилдеп калбоо үчүн, ар кандай версиялардын пакеттерин чогултууну автоматташтыруу үчүн, rac_gui.tcl программасынын негизги скриптинде, аталышка учурдагы версиясы жана релизинин саптары кошулган. :
Жана ушул саптардын негизинде buildbot пакеттерди номерлейт. Дайындарды алуу үчүн консолдун grep чалуусун колдонуңуз. Buildbotдо сиз жөн гана "жумушчулар" үчүн өзгөрмөлөрдү аныктай албайсыз (жок дегенде, мен кантип таба алган жокмун). Бул касиеттери үчүн колдонулат. Ошол. Монтаждоо процессинде биз версияны жана релизди аныктоо үчүн кадамдарды кошобуз жана ошого жараша версияны жана чыгаруу касиеттерин орнотобуз. Properties ар кандай жолдор менен орнотулушу мүмкүн, бул учурда консол буйругун чакыруу менен:
# Добавим определение версии из основного файла
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"
)
)
Алынган маанилерди util.Interpolate() чакырып алмаштыра аласыз.
Туура релиз жана версия номерлерин коюу үчүн стандарттуу sed чалууну колдонуңуз, б.а. буйрук spec файлынын ичиндеги баалуулуктарды керектүү нерселер менен алмаштырат
Даяр чогултулган пакетти жана булактары бар архивди мастерге көчүрөбүз. Бирок сиз файлдарды жумуш файлыңыздан репозиторийиңизге же веб-сайтыңызга дароо көчүрүп алсаңыз болот.
# Скопируем файл на мастер
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")
)
)
Чогулган пакеттерди мастердеги FTP аркылуу хостингге көчүрүү процессин баштайлы. Бул максатта колдонулат скрипт tcl боюнча.
Бул RPM менен. Эми DEB пакетин түзүү алгоритмин сүрөттөп баштайлы. Ар кандай системалар үчүн пакеттерди куруу процесстери бири-биринен көз карандысыз болгондуктан, көптөгөн кадамдар кайталанат.
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 пакети үчүн, төмөнкү процедуралардын айрымдары rpm өзү тарабынан монтаждалат жана спецификациянын ичинде сүрөттөлөт; Debian үчүн, сиз муну бул жерде жасашыңыз керек:
# Поменяем пути к библиотекам
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
Журналда биз бардыгы конфигурацияга ылайык экенин жана бардыгы кадимкидей иштеп жатканын текшеребиз. Биздин бардык жумушчулар азыр туташуу керек, бул тууралуу »»'/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
Бул орнотуу процессин аяктайт. Учурдагы абалды веб-интерфейс аркылуу көрө аласыз. Бул жерде сиз куруу каталарын көрө аласыз, бир нерсе туура эмес болуп калса, тоңдурулган процессти баштаңыз ж.б.
Ишке киргизгенден кийин дароо биздин эмгекчил кызматкерлерди "Курулуштар" -> "Жумушчулар" менюсу аркылуу көрүүгө болот.
Биринчи куруу процесси аяктагандан кийин (б.а. Git репозиторийине өзгөртүүлөр), процесстердин абалы биринчи бетте пайда болот.
Эгер сиз чычкан менен каалаган сызыкты бассаңыз, бул процесстин учурдагы абалы менен барак ачылат, анда эмне болуп жатканын, кандай каталарды ж.б.у.с. көрө аласыз.
Мастер конфигурациясын толугу менен бул жерден тапса болот