Dh'fheumadh mi am pròiseas togail agus lìbhrigeadh pasganan bathar-bog a stèidheachadh bho stòr Git chun làrach. Agus nuair a chunnaic mi, chan eil cho fada air ais, an seo air Habré artaigil air buildbot (ceangal aig an deireadh), chuir mi romham feuchainn air agus a chuir an sàs.
Leis gur e siostam sgaoilte a th’ ann an buildbot, bhiodh e loidsigeach aoigh togail fa-leth a chruthachadh airson gach ailtireachd agus siostam obrachaidh. Anns a 'chùis againn, bidh iad sin nan soithichean LXC (a thaobh Linux) agus qemu (ann an cùis Windows):
vm-srv-build1 - centos 7, bidh maighstir buildbot agus aon den luchd-obrach
vm-srv-build2 - debian 10, airson pasganan DEB a thogail
vm-srv-build3 - windows 10, airson co-chruinneachadh, tha fios agad carson
Bidh sinn a 'cruinneachadh Rac GUI - eadar-aghaidh grafaigeach airson 1C rac airson a bhith a’ riaghladh cruinneachadh de luchd-frithealaidh. Airson Linux, thèid innealan àbhaisteach airson gach OS a chleachdadh; gus faidhle exe a thogail airson Windows bho sgriobt tcl, cleachd freewrap.
suidheachadh
GNU / Linux
Tha sgrìobhainnean gu leòr air an eadar-lìn airson an stàladh 1,2. Tha, agus chan eil e ag adhbhrachadh duilgheadasan sònraichte sam bith:
Airson a 'mhaighstir:
Gu dearbh, bhiodh e na bu cheart pacaidean a chruinneachadh airson gach OS, ach tha seo taobh a-muigh raon an artaigil. Fàgaidh sinn cuideachd an tuairisgeul mu bhith a’ stèidheachadh shoithichean airson obair, cha toir mi an aire ach gu bheil mi a’ cleachdadh ProxMox VE. Agus feumaidh tu cuideachd pacaidean a chuir a-steach airson gach axis a tha riatanach airson co-chruinneachadh (centos: rpmdevtools, msaa; debian: togail-riatanach, dh-make, pbuilder, msaa.)
Thèid pròiseactan togail agus seirbheisean buildbot a chuir air bhog mar neach-cleachdaidh gun bhuannachd, agus mar sin feumaidh tu fear a chruthachadh airson a h-uile neach-aoigheachd a tha a’ gabhail pàirt sa phròiseas:
adduser buildbot
An uairsin, cuiridh sinn air bhog seirbheisean fèin-ghluasadach, fa leth, air gach aon de na h-aoighean (soithichean):
Leis gu bheil a h-uile sgriobt (anns a’ chùis againn) suidhichte ann an / usr/local/, bu chòir dhut an t-slighe a shuidheachadh dhaibh anns na caochladairean àrainneachd:
Às deidh seo, faodaidh tu bun-structar eòlaire a chruthachadh airson “luchd-obrach” (air a h-uile neach-aoigheachd), gus seo a dhèanamh, clàraich fon neach-cleachdaidh buildbot agus ruith na h-òrdughan a leanas:
Air a’ chiad aoigh 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
Air an dàrna aoigh 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
Air luchd-aoigheachd luchd-obrach, faodar an t-seirbheis buildbot-worker a thòiseachadh
systemctl start buildbot-worker
MS Windows
Mar “neach-obrach” airson co-chruinneachadh fo Windows, thèid inneal brìgheil leis an fhoillseachadh as ùire de Win10 a chleachdadh.
Airson obair feumaidh tu:
Às deidh a h-uile rud gu h-àrd a chuir a-steach, faodaidh tu an buildbot fhèin a stàladh:
pip install buildbot-worker
Cruthaichidh sinn eòlaire obrach
md c:worker
Agus leig leinn a chuir air bhog
buildbot-worker start c:worker
Ma dh’ obraicheas a h-uile càil (faic log c:workertwistd.log), faodaidh tu an “neach-obrach” againn a chlàradh mar sheirbheis le bhith a’ cur rud leis an eòlaire obrach ris a’ chlàr (tha òrdughan air an cur an gnìomh ann an cumhachdan a’ ruith mar rianadair):
Tha sin uile leis na “luchd-obrach”, chan fheum thu suathadh riutha nas fhaide, tha a h-uile smachd a’ tighinn bhon mhaighstir.
Suidheachadh draoidh
An toiseach, cruthaichidh sinn am bun-structar airson a ’mhaighstir (air a’ phrìomh aoigh), gus seo a dhèanamh, clàraich fon neach-cleachdaidh buildbot agus ruith na h-òrdughan a leanas:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Airson pasganan deiseil, cruthaich eòlaire togail
mkdir /home/buildbot/builds
Chaidh faidhle master.cfg a chruthachadh anns an /home/buildbot/master/ directory. 'S e còd python a th' anns an fhaidhle seo agus tha cunntas ann air a h-uile inneal san t-siostam; obraichidh sinn leis san àm ri teachd.
Gus cruinneachadh phasganan de dhreachan eadar-dhealaichte a dhèanamh fèin-ghluasadach, gus nach fheumadh iad a dhol a-steach do chòd an fhaidhle master.cfg, ann am prìomh sgriobt a’ phrògram rac_gui.tcl, chaidh loidhnichean leis an dreach gnàthach agus an sgaoileadh a chuir ris anns a’ bhann-cinn :
Agus stèidhichte air na loidhnichean sin, cuiridh buildbot àireamh air na pacaidean. Gus dàta a tharraing a-mach, cleachd an consol grep call. Ann an buildbot chan urrainn dhut dìreach caochladairean a mhìneachadh airson “luchd-obrach” (co-dhiù, cha do lorg mi ciamar). Airson seo tha feartan air an cleachdadh. An fheadhainn sin. Anns a 'phròiseas co-chruinneachaidh, bidh sinn a' cur ceumannan ris gus an dreach agus an sgaoileadh a dhearbhadh agus, mar sin, an dreach a shuidheachadh agus na feartan fuasglaidh. Faodar togalaichean a shuidheachadh ann an diofar dhòighean, sa chùis seo le bhith a’ gairm an àithne tòcan:
# Добавим определение версии из основного файла
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"
)
)
Faodaidh tu na luachan a thig às a chuir an àite le bhith a’ gairm util.Interpolate().
Bu chòir a thoirt fa-near an seo leis gu bheil an aoigh cuideachd air a chleachdadh airson pacaidean a chruinneachadh le làimh, gun tèid an co-chruinneachadh a chumail air slighean àbhaisteach.
Gus na h-àireamhan fuasglaidh agus dreach ceart a shuidheachadh, cleachd gairm àbhaisteach sed, i.e. bidh an àithne a’ dol an àite nan luachan taobh a-staigh an fhaidhle sònrachaidh leis an fheadhainn a tha a dhìth
Bidh sinn a’ dèanamh lethbhreac den phasgan cruinn crìochnaichte agus an tasglann le stòran chun mhaighstir. Ach faodaidh tu faidhlichean a chopaigeadh sa bhad bhon fhaidhle obrach agad chun stòr no làrach-lìn agad.
# Скопируем файл на мастер
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")
)
)
Nach tòisich sinn air a’ phròiseas airson na pacaidean cruinnichte a chopaigeadh chun aoigheachd tro FTP air a’ mhaighstir. Airson an adhbhair seo tha e air a chleachdadh sgriobt air tcl.
Sin e le RPM. A-nis tòisichidh sinn a’ toirt cunntas air an algairim airson pasgan DEB a thogail. Leis gu bheil na pròiseasan airson pacaidean togail airson diofar shiostaman neo-eisimeileach bho chèile, thèid mòran cheumannan ath-aithris.
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"]))
Airson pasgan RPM, tha cuid de na modhan a leanas air an dèanamh leis an rpm fhèin aig àm co-chruinneachaidh agus tha iad air am mìneachadh taobh a-staigh an t-sònrachadh; airson Debian, feumaidh tu a dhèanamh an seo:
# Поменяем пути к библиотекам
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")]
)
)
Sàbhail am faidhle agus faodaidh tu feuchainn ris an t-seirbheis draoidh a thòiseachadh:
systemctl restart buildbot-master
Anns an log nì sinn cinnteach gu bheil a h-uile càil ann an òrdugh leis an config agus gu bheil a h-uile dad ag obair mar as àbhaist. Bu chòir don luchd-obrach againn uile ceangal a dhèanamh a-nis, a thèid aithris gu toilichte sa 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
Bidh seo a 'crìochnachadh a' phròiseas rèiteachaidh. Chì thu an inbhe làithreach tron eadar-aghaidh lìn. Far am faic thu cuideachd mearachdan togail, breab pròiseas reòta ma chaidh rudeigin ceàrr, msaa.
Dìreach às deidh an fhoillseachadh, faodar an luchd-obrach cruaidh againn fhaicinn tron chlàr “Builds” -> “Oibrichean”
Às deidh a’ chiad phròiseas togail a chrìochnachadh (ie atharrachaidhean air stòr Git), nochdaidh inbhe nam pròiseasan air a’ chiad duilleag.
Ma bhriogas tu air an loidhne a tha thu ag iarraidh leis an luchag, fosglaidh duilleag le staid làithreach a’ phròiseis seo, far am faic thu dè tha a’ tachairt, dè na mearachdan, msaa.