Mwen te bezwen mete kanpe pwosesis la nan bati ak livrezon pakè lojisyèl soti nan yon depo Git sou sit la. Epi lè mwen te wè, pa gen lontan, isit la sou Habré yon atik sou buildbot (lyen nan fen), mwen deside eseye li epi aplike li.
Piske buildbot se yon sistèm distribiye, li ta lojik pou kreye yon lame bati separe pou chak achitekti ak sistèm opere. Nan ka nou an, sa yo pral resipyan LXC (nan ka Linux) ak qemu (nan ka Windows):
vm-srv-build1 - centos 7, pral gen yon mèt buildbot ak youn nan travayè yo
vm-srv-build2 - debian 10, pou konstwi pakè DEB
vm-srv-build3 - Windows 10, pou asanble, ou konnen pou sa
Nou pral kolekte Rac entèfas — yon koòdone grafik pou 1C rac pou jere yon gwoup sèvè. Pou Linux, yo pral itilize zouti estanda pou chak OS pou konstwi yon fichye ègzekutabl pou Windows ki soti nan yon script tcl; freewrap.
Enstalasyon
GNU / Linux
Gen ase dokiman sou entènèt la pou enstalasyon 1,2. Wi, epi li pa lakòz okenn pwoblèm espesyal:
Pou mèt la:
Natirèlman, li ta pi kòrèk pou kolekte pakè pou chak OS, men sa a pi lwen pase sijè ki abòde lan atik la. Nou pral tou omisyon deskripsyon an nan mete kanpe resipyan pou travay, mwen pral sèlman sonje ke mwen itilize ProxMox VE. Epi w ap bezwen tou enstale pakè pou chak aks ki nesesè pou asanble (centos: rpmdevtools, elatriye; debian: build-essential, dh-make, pbuilder, elatriye)
Bati pwojè ak sèvis buildbot yo pral lanse kòm yon itilizatè san privilèj, kidonk ou bezwen kreye youn sou tout lame k ap patisipe nan pwosesis la:
adduser buildbot
Apre sa, nou pral konfigirasyon otomatik lansman sèvis yo, respektivman, sou chak nan lame yo (resipyan):
Apre yo fin enstale tout sa ki anwo yo, ou ka enstale buildbot nan tèt li:
pip install buildbot-worker
Ann kreye yon anyè k ap travay
md c:worker
Epi ann lanse
buildbot-worker start c:worker
Si tout bagay ap travay (gade log c:workertwistd.log), Lè sa a, ou ka anrejistre "travayè" nou an kòm yon sèvis lè w ajoute yon atik ak anyè k ap travay nan rejis la (kòmand yo egzekite nan powershell kouri kòm administratè):
Sa a tout ak "travayè yo", ou pa bezwen manyen yo pi lwen, tout kontwòl soti nan mèt la.
Konfigirasyon sòsye
Pou kòmanse, ann kreye enfrastrikti pou mèt la (sou lame prensipal la), pou fè sa, enskri anba itilizatè a buildbot epi kouri kòmandman sa yo:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Pou pakè pare yo, kreye yon anyè bati
mkdir /home/buildbot/builds
Yon fichye master.cfg te kreye nan /home/buildbot/master/ anyè. Fichye sa a se yon kòd python epi li gen yon deskripsyon tout mekanis sistèm nan nou pral travay avèk li nan lavni.
Pou otomatize asanble pakè diferan vèsyon, pou pa oblije fouye nan kòd fichye master.cfg, nan script prensipal pwogram rac_gui.tcl, liy ak vèsyon aktyèl la ak lage yo te ajoute nan header la. :
Epi baze sou liy sa yo, buildbot pral nimewo pakè yo. Pou ekstrè done, sèvi ak konsole grep apèl la. Nan buildbot ou tou senpleman pa ka defini varyab pou "travayè" (omwen, mwen pa te jwenn ki jan). Se pou sa pwopriyete yo itilize. Moun sa yo. Nan pwosesis asanble a, nou ajoute etap pou detèmine vèsyon an ak lage epi, kòmsadwa, mete vèsyon an ak pwopriyete lage. Pwopriyete yo ka mete nan plizyè fason, nan ka sa a lè w rele lòd konsole a:
# Добавим определение версии из основного файла
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"
)
)
Ou ka ranplase valè ki kapab lakòz yo lè w rele util.Interpolate().
Pou mete nimewo kòrèk lage ak vèsyon, sèvi ak yon apèl sed estanda, i.e. kòmandman an ranplase valè ki andedan fichye a spesifikasyon ak sa ki nesesè yo
Nou kopye pakè a fini rasanble ak achiv la ak sous bay mèt la. Men, ou ka imedyatman kopye dosye ki soti nan fichye travay ou a nan depo oswa sit entènèt ou a.
# Скопируем файл на мастер
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")
)
)
Ann kòmanse pwosesis la nan kopye pakè yo kolekte nan hosting la atravè FTP sou mèt la. Pou rezon sa a yo itilize li script sou tcl.
Sa a se li ak RPM. Koulye a, ann kòmanse dekri algorithm pou bati yon pake DEB. Depi pwosesis yo pou bati pakè pou diferan sistèm yo endepandan youn ak lòt, anpil etap yo pral repete.
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"]))
Pou yon pake RPM, kèk nan pwosedi sa yo fèt pa rpm nan tèt li pandan asanble epi yo dekri andedan spesifikasyon pou Debian, ou dwe fè li isit la:
# Поменяем пути к библиотекам
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")]
)
)
Sove fichye a epi ou ka eseye kòmanse sèvis sòsye an:
systemctl restart buildbot-master
Nan boutèy demi lit la nou pral tcheke si tout bagay anfòm ak konfigirasyon an ak tout bagay ap travay kòm nòmal. Tout travayè nou yo ta dwe kounye a konekte, ki pral san pwoblèm mwen tap rapòte nan boutèy la »»'/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
Sa a konplete pwosesis konfigirasyon an. Ou ka wè sitiyasyon aktyèl la atravè koòdone entènèt la. Ki kote ou ka wè tou erè bati, choute yon pwosesis jele si yon bagay ale mal, elatriye.
Touswit apre lansman an, travayè di nou yo ka wè nan meni "Konstwi" -> "Travayè"
Apre premye pwosesis konstriksyon an fini (sa vle di chanjman nan depo Git la), estati pwosesis yo ap parèt sou premye paj la.
Si w klike sou liy ou vle a ak sourit la, yon paj ap louvri ak eta aktyèl la nan pwosesis sa a, kote ou ka wè sa k ap pase, ki erè, elatriye.