Min hewce kir ku pêvajoya avakirin û radestkirina pakêtên nermalavê ji depoyek Git-ê ji malperê re saz bikim. Û gava ku min, ne demek berê, li vir li ser Habré gotarek li ser buildbot (girêdana di dawiyê de) dît, min biryar da ku wê biceribînim û wê bicîh bikim.
Ji ber ku buildbot pergalek belavkirî ye, mentiqî ye ku meriv ji bo her mîmarî û pergala xebitandinê hosteyek avahîsaziyek cihê biafirîne. Di doza me de, ew ê konteynerên LXC (di doza Linux de) û qemu (di doza Windows-ê de) bin:
vm-srv-build1 - centos 7, dê masterek buildbot û yek ji karkeran hebe
vm-srv-build2 - debian 10, ji bo avakirina pakêtên DEB
vm-srv-build3 - windows 10, ji bo kombûnê, hûn dizanin ji bo çi
Em ê kom bikin Rac GUI - navgînek grafîkî ya ji bo 1C rac ji bo birêvebirina komek serveran. Ji bo Linux, amûrên standard ên ji bo her OS-ê dê werin bikar anîn da ku pelek exe ji bo Windows-ê ji tîpek tcl ava bikin freewrap.
mîhengê
GNU / Linux
Li ser Înternetê ji bo sazkirinê têra xwe belge hene 1,2. Erê, û ew dibe sedema pirsgirêkên taybetî:
Ji bo mamoste:
Bê guman, ew ê rasttir be ku ji bo her OS-ê pakêtan berhev bikin, lê ev li derveyî çarçoweya gotarê ye. Em ê di heman demê de danasîna sazkirina konteyneran ji bo xebatê jî derxînin, ez ê tenê bibînim ku ez ProxMox VE bikar tînim. Û hûn ê her weha hewce bikin ku ji bo her axek ku ji bo kombûnê hewce ye pakêtan saz bikin (centos: rpmdevtools, hwd.; debian: build-essential, dh-make, pbuilder, hwd.)
Projeyên çêkirinê û karûbarên buildbot dê wekî bikarhênerek bêdestûr werin destpêkirin, ji ber vê yekê hûn hewce ne ku yek li ser hemî mêvandarên ku beşdarî pêvajoyê dibin biafirînin:
adduser buildbot
Dûv re, em ê bi rêzdarî, destpêkirina otomatîkî ya karûbaran li ser her yek ji mêvandar (konteyner) mîheng bikin:
Piştî vê yekê, hûn dikarin ji bo "karker" (li ser hemî mêvandaran) binesaziyek pelrêça biafirînin, ji bo vê yekê, di bin bikarhênerê buildbot de qeyd bikin û fermanên jêrîn bimeşînin:
Li ser mêvandarê yekem 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
Li ser mêvandarê duyemîn 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
Li ser mêvandarên karker, karûbarê buildbot-karker dikare were destpêkirin
systemctl start buildbot-worker
MS Windows
Wekî "karkerek" ji bo kombûnê di bin Windows-ê de, dê makîneyek virtual bi serbestberdana herî dawî ya Win10 were bikar anîn.
Ji bo xebatê hûn ê hewce bibin:
Piştî ku hemî jorîn têne saz kirin, hûn dikarin buildbot bixwe saz bikin:
pip install buildbot-worker
Werin em pelrêçek xebatê biafirînin
md c:worker
Û em dest pê bikin
buildbot-worker start c:worker
Ger her tişt kar dike (binihêre têketin c:workertwistd.log), wê hingê hûn dikarin "karker"a me wekî karûbarek tomar bikin û bi pelrêça xebatê re hêmanek li qeydê zêde bikin (ferman di powershell-ê de wekî rêveberî têne darve kirin):
Ew hemî bi "karkeran" re ye, hûn ne hewce ne ku hûn bêtir dest bidin wan, hemî kontrol ji axayê tê.
Sazkirina Wizard
Ji bo destpêkê, em binesaziyê ji bo masterê (li ser mêvandarê sereke) biafirînin, ji bo vê yekê, di bin bikarhênerê buildbot de qeyd bikin û emrên jêrîn bimeşînin:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Ji bo pakêtên amade, pelrêçek avahîsaziyê biafirînin
mkdir /home/buildbot/builds
Di pelrêça /home/buildbot/master/ de pelek master.cfg hate afirandin. Ev pel kodek python e û ravekirina hemî mekanîzmayên pergalê heye ku em ê di pêşerojê de pê re bixebitin.
Ji bo ku kombûna pakêtên guhertoyên cihêreng bixweber bikin, da ku nekevin nav koda pelê master.cfg, di skrîpta sereke ya bernameya rac_gui.tcl de, rêzikên bi guhertoya heyî û berdanê di serî de hatin zêdekirin. :
Û li ser bingeha van rêzikan, buildbot dê pakêtan hejmar bike. Ji bo derxistina daneyan, banga konsolê grep bikar bînin. Di buildbot de hûn bi tenê nikarin guhêrbaran ji bo "karkeran" diyar bikin (qet nebe, min çawa nedît). Taybetmendiyên ji bo vê yekê têne bikar anîn. Ewan. Di pêvajoya kombûnê de, em gavan lê zêde dikin ku guherto û berdanê diyar bikin û, li gorî vê, guherto û taybetmendiyên berdanê saz bikin. Taybetmendî dikarin bi awayên cihêreng werin danîn, di vê rewşê de bi banga fermana konsolê:
# Добавим определение версии из основного файла
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"
)
)
Hûn dikarin bi banga util.Interpolate() nirxên encam biguhezînin.
Ji bo danîna hejmarên berdan û guhertoya rast, bangek sed standard bikar bînin, ango. ferman nirxên di hundurê pelê specê de bi yên pêwîst re diguhezîne
Em pakêta berhevkirî ya qedandî û arşîva bi çavkaniyan ji masterê re kopî dikin. Lê hûn dikarin tavilê pelan ji pelê xebata xwe li depo an malpera xwe kopî bikin.
# Скопируем файл на мастер
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")
)
)
Werin em dest bi pêvajoya kopîkirina pakêtên berhevkirî li mêvandariyê bi FTP-ê li ser masterê bikin. Ji bo vê armancê tê bikaranîn nivîs li ser tcl.
Bi RPM re ew e. Naha em dest bi danasîna algorîtmaya avakirina pakêtek DEB bikin. Ji ber ku pêvajoyên avakirina pakêtan ji bo pergalên cihêreng ji hev serbixwe ne, dê gelek gav bêne dubare kirin.
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"]))
Ji bo pakêtek RPM, hin prosedurên jêrîn di dema kombûnê de ji hêla rpm ve têne kirin û ji bo Debian di hundurê taybetmendiyê de têne diyar kirin, divê hûn li vir bikin:
# Поменяем пути к библиотекам
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")]
)
)
Pelê hilînin û hûn dikarin biceribînin ku karûbarê sêrbaz dest pê bikin:
systemctl restart buildbot-master
Di têketinê de em ê kontrol bikin ku her tişt bi mîhengê re di rê de ye û her tişt wekî normal dixebite. Divê êdî hemî xebatkarên me bi hev ve girêbidin, ku dê bi kêfxweşî di têketinê de were ragihandin »»'/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
Ev pêvajoya sazkirinê temam dike. Hûn dikarin bi navbeynkariya webê rewşa heyî bibînin. Li ku derê hûn dikarin xeletiyên çêkirinê jî bibînin, pêvajoyek cemidî bixin ger tiştek xelet derket, hwd.
Tavilê piştî destpêkirinê, xebatkarên me yên dijwar dikarin bi menuya "Avakirin" -> "Karker" werin dîtin.
Piştî ku pêvajoya avakirina yekem qediya (ango guheztinên depoya Git), dê rewşa pêvajoyan di rûpela yekem de xuya bibe.
Ger hûn bi mişkê ve li ser xeta xwestinê bikirtînin, dê rûpelek bi rewşa heyî ya vê pêvajoyê vebe, ku hûn dikarin bibînin ka çi diqewime, çi xeletî, hwd.
Tevahiya konfigurasyona sêrbaz dikare li vir were dîtin