Abdi peryogi nyetél prosés ngumpul sareng nganteurkeun bungkusan parangkat lunak tina gudang Git ka situs éta. Sareng nalika kuring ningali, teu lami pisan, di dieu di Habré tulisan ngeunaan buildbot (link dina tungtungna), kuring mutuskeun pikeun nyobaan sareng nerapkeunana.
Kusabab buildbot mangrupikeun sistem anu disebarkeun, éta logis pikeun nyiptakeun host ngawangun anu misah pikeun unggal arsitéktur sareng sistem operasi. Dina kasus urang, ieu bakal janten wadah LXC (dina kasus Linux) sareng qemu (dina kasus Windows):
vm-srv-build1 - centos 7, bakal aya master buildbot sareng salah sahiji pagawe
vm-srv-build2 - debian 10, pikeun ngawangun bungkusan DEB
vm-srv-build3 - windows 10, pikeun assembly, anjeun terang naon keur
Urang bakal ngumpulkeun Rac GUI - panganteur grafis pikeun 1C rac pikeun ngatur gugusan server. Pikeun Linux, alat standar pikeun unggal OS bakal dianggo; pikeun ngawangun file exe pikeun Windows tina skrip tcl, paké freewrap.
setting
Lisénsi / Linux Ubuntu
Aya cukup dokuméntasi dina Internét pikeun instalasi 1,2. Leres, sareng éta henteu ngabalukarkeun masalah khusus:
Pikeun master:
Tangtosna, éta bakal langkung leres pikeun ngumpulkeun bungkusan pikeun unggal OS, tapi ieu di luar ruang lingkup tulisan. Urang ogé bakal ngaleungitkeun katerangan ngeunaan nyetel wadah pikeun digawé, Kuring ngan bakal dicatet yén kuring make ProxMox VE. Sareng anjeun ogé kedah masang pakét pikeun unggal sumbu anu diperyogikeun pikeun assembly (centos: rpmdevtools, jsb.; debian: build-essential, dh-make, pbuilder, jsb.)
Proyék ngawangun sareng jasa buildbot bakal diluncurkeun salaku pangguna anu henteu ngagaduhan hak istimewa, janten anjeun kedah nyiptakeun hiji pikeun sadaya host anu milu dina prosés:
adduser buildbot
Salajengna, urang bakal ngonpigurasikeun peluncuran otomatis jasa masing-masing dina unggal host (wadah):
Saatos ieu, anjeun tiasa nyiptakeun infrastruktur diréktori pikeun "pagawe" (dina sadaya host), pikeun ngalakukeun ieu, ngadaptar dina pangguna buildbot sareng ngajalankeun paréntah di handap ieu:
Dina host kahiji 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
Dina host kadua 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
Dina host worker, jasa buildbot-worker tiasa dimimitian
systemctl start buildbot-worker
MS Windows
Salaku "pagawe" pikeun assembly handapeun Windows, mesin virtual jeung release panganyarna tina Win10 bakal dipaké.
Pikeun digawé anjeun peryogi:
Saatos sadayana di luhur dipasang, anjeun tiasa masang buildbot sorangan:
pip install buildbot-worker
Hayu urang nyieun diréktori gawé
md c:worker
Sarta hayu urang ngajalankeun
buildbot-worker start c:worker
Upami sadayana tiasa dianggo (tingali log c: workertwistd.log), maka anjeun tiasa ngadaptarkeun "pagawe" kami salaku jasa ku cara nambihan item sareng diréktori kerja kana pendaptaran (paréntah dieksekusi dina powershell ngajalankeun salaku administrator):
Éta sadayana kalayan "pagawe", anjeun teu kudu noél aranjeunna salajengna, sadaya kontrol asalna ti master.
Setélan wizard
Pikeun mimitian, hayu urang nyiptakeun infrastruktur pikeun master (dina host utama), pikeun ngalakukeun ieu, ngadaptar dina pangguna buildbot sareng ngajalankeun paréntah di handap ieu:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Pikeun bungkusan siap-dijieun, jieun diréktori ngawangun
mkdir /home/buildbot/builds
A file master.cfg dijieun dina /home/buildbot/master/ diréktori. Berkas ieu mangrupikeun kode python sareng ngandung pedaran sadaya mékanisme sistem; kami bakal damel sareng éta di hareup.
Pikeun ngajadikeun otomatis rakitan bungkusan tina vérsi anu béda-béda, ku kituna henteu kedah ngaleuleuskeun kodeu file master.cfg, dina skrip utama program rac_gui.tcl, garis sareng versi ayeuna sareng sékrési ditambah dina header. :
Sareng dumasar kana garis ieu, buildbot bakal nomer bungkusan. Pikeun nimba data, paké panggero konsol grep. Dina buildbot anjeun ngan saukur teu tiasa nangtukeun variabel pikeun "pagawe" (sahenteuna, kuring henteu acan mendakan kumaha). Ieu naon sipat dipaké pikeun. Jelema. Dina prosés assembly, urang nambahkeun léngkah pikeun nangtukeun versi na release na, sasuai, nyetel versi na release sipat. Properties tiasa diatur ku sababaraha cara, dina hal ieu ku nelepon paréntah 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"
)
)
Anjeun tiasa ngagantikeun nilai hasilna ku nelepon util.Interpolate ().
Pikeun nyetel release bener jeung nomer versi, make panggero sed baku, i.e. paréntah ngagantikeun nilai-nilai dina file spésifikasi sareng anu diperyogikeun
Urang nyalin bungkusan dirakit rengse tur arsip jeung sumber ka master. Tapi anjeun tiasa langsung nyalin file tina file padamelan anjeun ka gudang atanapi halaman wéb anjeun.
# Скопируем файл на мастер
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")
)
)
Hayu urang ngamimitian prosés nyalin bungkusan anu dikumpulkeun ka hosting via FTP dina master. Pikeun tujuan ieu dipaké naskah dina tcl.
Kitu jeung RPM. Ayeuna hayu urang mimitian ngajelaskeun algoritma pikeun ngawangun pakét DEB. Kusabab prosés pikeun ngawangun bungkusan pikeun sistem anu béda-béda henteu gumantung, seueur léngkah anu bakal diulang.
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"]))
Pikeun pakét RPM, sababaraha prosedur di handap ieu dilakukeun ku rpm sorangan nalika dirakit sareng dijelaskeun dina spésifikasi; pikeun Debian, anjeun kedah ngalakukeunana di dieu:
# Поменяем пути к библиотекам
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")]
)
)
Simpen file sareng anjeun tiasa nyobian ngamimitian jasa wizard:
systemctl restart buildbot-master
Dina log urang bakal pariksa yen sagalana aya dina urutan kalawan config jeung sagalana jalan sakumaha biasa. Sadaya pagawé urang ayeuna kedah nyambung, anu bakal dilaporkeun dina 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
Ieu ngalengkepan prosés setelan. Anjeun tiasa ningali status ayeuna ngalangkungan antarmuka wéb. Dimana anjeun ogé tiasa ningali kasalahan ngawangun, nyepak prosés beku upami aya anu salah, jsb.
Langsung saatos peluncuran, pagawé keras urang tiasa ditingali tina ménu "Bangunan" -> "Pagawé"
Saatos prosés ngawangun munggaran réngsé (nyaéta parobahan kana gudang Git), status prosés bakal muncul dina kaca munggaran.
Upami anjeun ngaklik garis anu dipikahoyong sareng beurit, halaman bakal dibuka kalayan kaayaan prosés ieu ayeuna, dimana anjeun tiasa ningali naon anu kajantenan, kasalahan naon, jsb.
Sakabéh konfigurasi wizard tiasa dipendakan di dieu