Kelli bżonn nwaqqaf il-proċess tal-bini u l-kunsinna ta' pakketti tas-softwer minn repożitorju Git għas-sit. U meta rajt, mhux daqshekk twil ilu, hawn fuq Habré artiklu dwar il-buildbot (link fl-aħħar), iddeċidejt li nipprovah u napplikah.
Peress li l-buildbot hija sistema distribwita, ikun loġiku li jinħoloq host tal-bini separat għal kull arkitettura u sistema operattiva. Fil-każ tagħna, dawn se jkunu kontenituri LXC (fil-każ tal-Linux) u qemu (fil-każ tal-Windows):
vm-srv-build1 - centos 7, se jkun hemm kaptan tal-buildbot u wieħed mill-ħaddiema
vm-srv-build2 - debian 10, għall-bini ta' pakketti DEB
Aħna se niġbru Rac GUI — interface grafiku għal 1C rac għall-ġestjoni ta' cluster ta' servers. Għal Linux, se jintużaw għodod standard għal kull OS biex jinbena fajl exe għall-Windows minn skript tcl, uża; freewrap.
Installazzjoni
GNU / Linux
Hemm biżżejjed dokumentazzjoni fuq l-Internet għall-installazzjoni 1,2. Iva, u ma tikkawża l-ebda problema speċjali:
Għall-kaptan:
Naturalment, ikun aktar korrett li jinġabru pakketti għal kull OS, iżda dan huwa lil hinn mill-ambitu tal-artikolu. Aħna se nħallu wkoll id-deskrizzjoni tat-twaqqif ta 'kontenituri għax-xogħol, se ninnota biss li nuża ProxMox VE. U ser ikollok bżonn ukoll tinstalla pakketti għal kull assi meħtieġ għall-assemblaġġ (centos: rpmdevtools, eċċ.; debian: build-essential, dh-make, pbuilder, eċċ.)
Il-proġetti tal-bini u s-servizzi tal-buildbot se jiġu mnedija bħala utent mhux privileġġjat, għalhekk trid toħloq waħda fuq l-hosts kollha li jipparteċipaw fil-proċess:
adduser buildbot
Sussegwentement, aħna ser tikkonfigura t-tnedija awtomatika tas-servizzi, rispettivament, fuq kull wieħed mill-ospiti (kontenituri):
Wara dan, tista 'toħloq infrastruttura tad-direttorju għal "ħaddiema" (fuq l-hosts kollha), biex tagħmel dan, irreġistra taħt l-utent tal-buildbot u mexxi l-kmandi li ġejjin:
Fuq l-ewwel host 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
Fuq it-tieni host 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
Fuq hosts tal-ħaddiema, is-servizz buildbot-ħaddiem jista 'jinbeda
systemctl start buildbot-worker
MS Windows
Bħala "ħaddiem" għall-assemblaġġ taħt Windows, se tintuża magna virtwali bl-aħħar rilaxx ta 'Win10.
Biex taħdem ser ikollok bżonn:
Wara li dan kollu ta 'hawn fuq jiġi installat, tista' tinstalla l-buildbot innifsu:
pip install buildbot-worker
Ejja noħolqu direttorju tax-xogħol
md c:worker
U ejja tniedi
buildbot-worker start c:worker
Jekk kollox jaħdem (ara log c:workertwistd.log), allura tista 'tirreġistra l-"ħaddiem" tagħna bħala servizz billi żżid oġġett mad-direttorju tax-xogħol fir-reġistru (il-kmandi huma esegwiti f'powershell li jaħdem bħala amministratur):
Dak kollu mal-"ħaddiema", m'għandekx għalfejn tmisshom aktar, il-kontroll kollu ġej mill-kaptan.
Setup tal-Wizard
Biex tibda, ejja noħolqu l-infrastruttura għall-kaptan (fuq l-host prinċipali), biex tagħmel dan, irreġistra taħt l-utent tal-buildbot u mexxi l-kmandi li ġejjin:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Għal pakketti lesti, oħloq direttorju tal-bini
mkdir /home/buildbot/builds
Inħoloq fajl master.cfg fid-direttorju /home/buildbot/master/. Dan il-fajl huwa kodiċi python u fih deskrizzjoni tal-mekkaniżmi kollha tas-sistema li se naħdmu miegħu fil-futur.
Biex tiġi awtomatizzata l-assemblaġġ ta 'pakketti ta' verżjonijiet differenti, sabiex ma jkollokx għalfejn tidħol fil-kodiċi tal-fajl master.cfg, fl-iskrittura prinċipali tal-programm rac_gui.tcl, ġew miżjuda linji bil-verżjoni u r-rilaxx attwali fl-intestatura :
U bbażat fuq dawn il-linji, buildbot se jinnumera l-pakketti. Biex tiġbed id-dejta, uża s-sejħa grep console. Fil-buildbot sempliċement ma tistax tiddefinixxi varjabbli għal "ħaddiema" (għall-inqas, ma sibtx kif). Dan huwa għalxiex jintużaw il-proprjetajiet. Dawk. Fil-proċess tal-assemblaġġ, inżidu passi biex niddeterminaw il-verżjoni u r-rilaxx u, għaldaqstant, nissettjaw il-proprjetajiet tal-verżjoni u r-rilaxx. Il-propjetajiet jistgħu jiġu stabbiliti b'diversi modi, f'dan il-każ billi ssejjaħ il-kmand tal-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"
)
)
Tista 'tissostitwixxi l-valuri li jirriżultaw billi ssejjaħ util.Interpolate().
Għandu jiġi nnutat hawnhekk li peress li l-ospitant jintuża wkoll għall-assemblaġġ manwali ta 'pakketti, l-assemblaġġ se jseħħ tul mogħdijiet standard.
Biex tissettja n-numri korretti tar-rilaxx u tal-verżjoni, uża sejħa sed standard, i.e. il-kmand jissostitwixxi l-valuri ġewwa l-fajl tal-ispeċifikazzjonijiet b'dawk meħtieġa
Aħna nikkopjaw il-pakkett immuntat lest u l-arkivju bis-sorsi lill-kaptan. Imma tista' immedjatament tikkopja fajls mill-fajl tax-xogħol tiegħek għar-repożitorju jew il-websajt tiegħek.
# Скопируем файл на мастер
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")
)
)
Ejja nibdew il-proċess tal-ikkupjar tal-pakketti miġbura għall-hosting permezz tal-FTP fuq il-kaptan. Għal dan il-għan huwa użat iskrittura fuq tcl.
Dak hu bl-RPM. Issa ejja nibdew niddeskrivu l-algoritmu għall-bini ta 'pakkett DEB. Peress li l-proċessi għall-bini ta 'pakketti għal sistemi differenti huma indipendenti minn xulxin, ħafna passi se jiġu ripetuti.
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"]))
Għal pakkett RPM, xi wħud mill-proċeduri li ġejjin isiru mill-rpm innifsu waqt l-assemblaġġ u huma deskritti ġewwa l-ispeċifikazzjoni għal Debian, trid tagħmel dan hawn:
# Поменяем пути к библиотекам
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")]
)
)
Issejvja l-fajl u tista' tipprova tibda s-servizz tal-wizard:
systemctl restart buildbot-master
Fil-log aħna niċċekkjaw li kollox huwa fl-ordni mal-konfigurazzjoni u kollox qed jaħdem b'mod normali. Il-ħaddiema kollha tagħna issa għandhom jgħaqqdu, li kuntenti se jiġu rrappurtati fil-ġurnal »»'/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
Dan itemm il-proċess tas-setup. Tista' tara l-istatus attwali permezz tal-interface tal-web. Fejn tista 'tara wkoll l-iżbalji tal-bini, tagħti bidu għal proċess iffriżat jekk xi ħaġa marret ħażin, eċċ.
Immedjatament wara t-tnedija, il-ħaddiema iebes tagħna jistgħu jarawhom permezz tal-menu "Bini" -> "Ħaddiema"
Wara li jitlesta l-ewwel proċess tal-bini (jiġifieri bidliet fir-repożitorju Git), l-istatus tal-proċessi se jidher fl-ewwel paġna.
Jekk tikklikkja fuq il-linja mixtieqa bil-maws, tinfetaħ paġna bl-istat attwali ta’ dan il-proċess, fejn tista’ tara x’qed jiġri, liema żbalji, eċċ.
Il-konfigurazzjoni tal-wizard kollu tista 'tinstab hawn