Ina buƙatar saita tsarin haɗawa da isar da fakitin software daga wurin ajiyar Git zuwa rukunin yanar gizon. Kuma lokacin da na ga, ba da dadewa ba, a nan akan Habré labarin kan buildbot (haɗin kai a ƙarshe), na yanke shawarar gwada shi kuma in yi amfani da shi.
Tunda ginibot tsarin rarraba ne, zai zama ma'ana don ƙirƙirar rukunin ginin daban don kowane gine-gine da tsarin aiki. A cikin yanayinmu, waɗannan zasu zama kwantena LXC (a cikin yanayin Linux) da qemu (a cikin yanayin Windows):
vm-srv-build1 - centos 7, za a sami masterbot master da ɗaya daga cikin ma'aikata
vm-srv-build2 - debian 10, don gina fakitin DEB
vm-srv-build3 - windows 10, don taro, kun san menene
Za mu tattara Farashin GUI - ƙirar hoto don 1C rac don sarrafa gungun sabobin. Don Linux, za a yi amfani da daidaitattun kayan aikin kowane OS; don gina fayil ɗin exe don Windows daga rubutun tcl, yi amfani da kyauta.
saitin
GNU / Linux
Akwai isassun takardu akan Intanet don shigarwa 1,2. Ee, kuma baya haifar da wasu matsaloli na musamman:
Ga maigida:
Tabbas, zai zama mafi daidai don tattara fakiti ga kowane OS, amma wannan ya wuce iyakokin labarin. Za mu kuma watsar da bayanin kafa kwantena don aiki, zan lura kawai cewa ina amfani da ProxMox VE. Hakanan kuna buƙatar shigar da fakiti don kowane axis da ake buƙata don taro (centos: rpmdevtools, da sauransu; debian: gina-mahimmanci, dh-make, pbuilder, da sauransu.)
Gina ayyukan da ginin bot za a ƙaddamar da su azaman mai amfani mara gata, don haka kuna buƙatar ƙirƙirar ɗaya akan duk runduna masu shiga cikin tsari:
adduser buildbot
Na gaba, za mu saita ƙaddamar da ayyuka ta atomatik, bi da bi, akan kowane ɗayan runduna (kwantena):
Bayan wannan, zaku iya ƙirƙirar kayan aikin jagora don “ma’aikata” (a kan duk runduna), don yin wannan, yi rajista ƙarƙashin mai amfani da gininbot kuma gudanar da umarni masu zuwa:
A kan rukunin farko 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
A kan mai masaukin baki na biyu 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
A kan rundunan ma'aikata, ana iya fara sabis na ma'aikacin gini
systemctl start buildbot-worker
MS Windows
A matsayin "ma'aikaci" don haɗuwa a ƙarƙashin Windows, za a yi amfani da injin kama-da-wane tare da sabuwar sakin Win10.
Don aiki za ku buƙaci:
Bayan an shigar da duk abubuwan da ke sama, zaku iya shigar da buildbot kanta:
pip install buildbot-worker
Bari mu ƙirƙiri kundin adireshi
md c:worker
Kuma bari mu kaddamar
buildbot-worker start c:worker
Idan komai yana aiki (duba log c: workertwistd.log), to, zaku iya yin rajistar "ma'aikacin" azaman sabis ta ƙara wani abu tare da kundin aiki zuwa wurin yin rajista (an aiwatar da umarni a cikin powershell yana gudana azaman mai gudanarwa):
Wannan shi ne duka tare da "ma'aikata", ba dole ba ne ka taɓa su ba, duk iko ya fito ne daga maigidan.
Saitin mayen
Don fara da, bari mu ƙirƙiri abubuwan more rayuwa don maigidan (a kan babban runduna), don yin wannan, yi rajista ƙarƙashin mai amfani da ginin bot kuma gudanar da umarni masu zuwa:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Don fakitin da aka shirya, ƙirƙiri jagorar gini
mkdir /home/buildbot/builds
An ƙirƙiri fayil ɗin master.cfg a cikin /home/buildbot/master/ directory. Wannan fayil ɗin python code ne kuma ya ƙunshi bayanin duk hanyoyin tsarin; za mu yi aiki da shi nan gaba.
Kuma dangane da waɗannan layin, buildbot zai ƙididdige fakitin. Don cire bayanai, yi amfani da kiran grep na console. A cikin buildbot kawai ba za ku iya ayyana masu canji don “ma’aikata” (akalla, ban sami yadda ba). Wannan shine abin da ake amfani da kaddarorin. Wadancan. A cikin tsarin taro, muna ƙara matakai don ƙayyade sigar da fitarwa kuma, daidai da haka, saita sigar da kayan saki. Ana iya saita kaddarorin ta hanyoyi daban-daban, a wannan yanayin ta hanyar kiran umarnin console:
# Добавим определение версии из основного файла
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"
)
)
Kuna iya musanya sakamakon ƙimar ta hanyar kiran util.Interpolate().
Don saita daidaitattun lambobin saki da sigar, yi amfani da daidaitaccen kiran sed, i.e. umarnin ya maye gurbin dabi'u a cikin takamaiman fayil ɗin tare da waɗanda ake buƙata
Mun kwafi kunshin da aka gama da kuma ma'ajiyar bayanai tare da tushe ga maigidan. Amma zaku iya kwafin fayiloli nan da nan daga fayil ɗin aikinku zuwa ma'ajiyar ku ko gidan yanar gizonku.
# Скопируем файл на мастер
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")
)
)
Bari mu fara aiwatar da kwafin fakitin da aka tattara zuwa hosting ta hanyar FTP akan maigidan. Don wannan dalili ana amfani dashi rubutun ku tcl.
Shi ke nan tare da RPM. Yanzu bari mu fara kwatanta algorithm don gina kunshin DEB. Tun da matakai don gina fakitin don tsarin daban-daban sun kasance masu zaman kansu daga juna, matakai da yawa za a sake maimaita su.
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"]))
Don kunshin RPM, wasu daga cikin hanyoyin da za a bi ta rpm kanta yayin taro kuma an bayyana su a cikin ƙayyadaddun bayanai; don Debian, dole ne ku yi shi anan:
# Поменяем пути к библиотекам
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")]
)
)
Ajiye fayil ɗin kuma kuna iya ƙoƙarin fara sabis ɗin maye:
systemctl restart buildbot-master
A cikin log ɗin za mu bincika cewa komai yana cikin tsari tare da saitin kuma duk abin yana aiki kamar al'ada. Ya kamata duk ma'aikatanmu su haɗa yanzu, wanda za a ba da rahoto cikin farin ciki a cikin 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
Wannan yana kammala saitin tsari. Kuna iya duba halin yanzu ta hanyar haɗin yanar gizo. Inda kuma zaku iya ganin kurakuran ginawa, kunna tsarin daskararre idan wani abu ya yi kuskure, da sauransu.
Nan da nan bayan ƙaddamarwa, ana iya duba ma'aikatanmu ta hanyar menu "Gina" -> "Ma'aikata"
Bayan an kammala aikin ginin farko (watau canje-canje ga ma'ajiyar Git), matsayin tsarin zai bayyana a shafi na farko.
Idan ka danna layin da ake so tare da linzamin kwamfuta, wani shafi zai bude tare da halin yanzu na wannan tsari, inda za ka ga abin da ke faruwa, menene kurakurai, da dai sauransu.