Ég þurfti að setja upp ferlið við að setja saman og afhenda hugbúnaðarpakka frá Git geymslu á síðuna. Og þegar ég sá, fyrir ekki svo löngu, hér á Habré grein um buildbot (tengill í lokin), ákvað ég að prófa það og nota það.
Þar sem buildbot er dreift kerfi væri rökrétt að búa til sérstakan byggingarhýsil fyrir hvern arkitektúr og stýrikerfi. Í okkar tilviki munu þetta vera LXC gámar (ef um er að ræða Linux) og qemu (ef um er að ræða Windows):
vm-srv-build1 - centos 7, það verður buildbot meistari og einn af vinnumönnunum
vm-srv-build2 - debian 10, til að byggja DEB pakka
vm-srv-build3 - Windows 10, fyrir samsetningu, þú veist til hvers
Við munum safna Rac GUI — grafískt viðmót fyrir 1C rac til að stjórna þyrping netþjóna. Fyrir Linux verða venjuleg verkfæri fyrir hvert stýrikerfi notuð; til að búa til exe skrá fyrir Windows úr tcl skriftu, notaðu ókeypis umbúðir.
Uppsetning
GNU / Linux
Það er nóg af skjölum á netinu fyrir uppsetningu 1,2. Já, og það veldur ekki sérstökum vandamálum:
Fyrir meistarann:
Auðvitað væri réttara að safna pökkum fyrir hvert stýrikerfi, en það er utan greinarinnar. Við munum einnig sleppa lýsingunni á því að setja upp gáma fyrir vinnu, ég tek aðeins fram að ég nota ProxMox VE. Og þú þarft líka að setja upp pakka fyrir hvern ás sem þarf til samsetningar (centos: rpmdevtools, osfrv.; debian: build-essential, dh-make, pbuilder, osfrv.)
Byggingarverkefni og buildbot þjónusta verður sett af stað sem óforréttinda notandi, svo þú þarft að búa til einn á öllum gestgjöfum sem taka þátt í ferlinu:
adduser buildbot
Næst munum við stilla sjálfvirka ræsingu þjónustu, hver um sig, á hverjum gestgjafa (gámum):
Eftir þetta geturðu búið til möppuinnviði fyrir „starfsmenn“ (á öllum vélum), til að gera þetta skaltu skrá þig undir buildbot notandanum og keyra eftirfarandi skipanir:
Á fyrsta gestgjafanum 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
Á seinni gestgjafanum 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
Á starfsmannahýslum er hægt að ræsa buildbot-worker þjónustuna
systemctl start buildbot-worker
MS Windows
Sem „starfsmaður“ fyrir samsetningu undir Windows verður sýndarvél með nýjustu útgáfunni af Win10 notuð.
Til að vinna þarftu:
Eftir að allt ofantalið hefur verið sett upp geturðu sett upp buildbot sjálft:
pip install buildbot-worker
Við skulum búa til vinnuskrá
md c:worker
Og við skulum ræsa
buildbot-worker start c:worker
Ef allt virkar (sjá log c:workertwistd.log), þá geturðu skráð "starfsmann" okkar sem þjónustu með því að bæta hlut með vinnuskránni við skrána (skipanir eru keyrðar í powershell sem keyrir sem stjórnandi):
Það er allt með "verkamennina", þú þarft ekki að snerta þá frekar, öll stjórn kemur frá húsbóndanum.
Wizard uppsetning
Til að byrja með skulum við búa til innviði fyrir húsbóndann (á aðalhýslinum), til að gera þetta, skráðu þig undir buildbot notandanum og keyrðu eftirfarandi skipanir:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Fyrir tilbúna pakka, búðu til byggingarskrá
mkdir /home/buildbot/builds
Master.cfg skrá var búin til í /home/buildbot/master/ möppunni. Þessi skrá er python kóða og inniheldur lýsingu á öllum aðferðum kerfisins; við munum vinna með það í framtíðinni.
Til að gera sjálfvirkan samsetningu pakka af mismunandi útgáfum, svo að ekki þurfi að kafa ofan í kóðann á master.cfg skránni, í aðalskriftu rac_gui.tcl forritsins, var línum með núverandi útgáfu og útgáfu bætt við í hausnum :
Og byggt á þessum línum mun buildbot númera pakkana. Til að vinna úr gögnum, notaðu console grep kallið. Í buildbot geturðu einfaldlega ekki skilgreint breytur fyrir „starfsmenn“ (að minnsta kosti hef ég ekki fundið hvernig). Til þess eru eignir notaðar. Þeir. Í samsetningarferlinu bætum við skrefum til að ákvarða útgáfu og útgáfu og, í samræmi við það, stillum útgáfu og útgáfueiginleika. Hægt er að stilla eiginleika á ýmsa vegu, í þessu tilfelli með því að kalla stjórnborðsskipunina:
# Добавим определение версии из основного файла
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"
)
)
Þú getur skipt út gildunum sem myndast með því að kalla util.Interpolate().
Til að stilla rétt útgáfu- og útgáfunúmer, notaðu venjulegt sed-símtal, þ.e. skipunin kemur í stað gildanna inni í sérstakri skránni fyrir þau sem krafist er
Við afritum fullbúna samsetta pakkann og skjalasafnið með heimildum til meistarans. En þú getur strax afritað skrár úr vinnuskránni þinni yfir á geymsluna þína eða vefsíðuna þína.
# Скопируем файл на мастер
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")
)
)
Við skulum hefja ferlið við að afrita safnaða pakka yfir á hýsingu í gegnum FTP á masternum. Í þessu skyni er það notað handrit á tcl.
Það er það með RPM. Nú skulum við byrja að lýsa reikniritinu til að byggja upp DEB pakka. Þar sem ferlar til að búa til pakka fyrir mismunandi kerfi eru óháðir hvert öðru verða mörg skref endurtekin.
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"]))
Fyrir RPM pakka eru nokkrar af eftirfarandi aðferðum gerðar af rpm sjálfum meðan á samsetningu stendur og er lýst inni í forskriftinni; fyrir Debian þarftu að gera það hér:
# Поменяем пути к библиотекам
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")]
)
)
Vistaðu skrána og þú getur reynt að ræsa töfraþjónustuna:
systemctl restart buildbot-master
Í loganum munum við athuga hvort allt sé í lagi með stillingarnar og allt virki eins og venjulega. Allir starfsmenn okkar ættu nú að tengjast, sem verður glaðlega tilkynnt í skránni »»'/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
Þetta lýkur uppsetningarferlinu. Þú getur skoðað núverandi stöðu í gegnum vefviðmótið. Þar sem þú getur líka séð byggingarvillur, sparkað í frosið ferli ef eitthvað fór úrskeiðis o.s.frv.
Strax eftir kynningu er hægt að skoða vinnumenn okkar í gegnum valmyndina „Byggingar“ -> „Starfsmenn“
Eftir að fyrsta byggingarferlinu er lokið (þ.e. breytingar á Git geymslunni), mun staða ferlanna birtast á fyrstu síðu.
Ef þú smellir á þá línu sem þú vilt með músinni opnast síða með núverandi stöðu þessa ferlis, þar sem þú getur séð hvað er að gerast, hvaða villur o.s.frv.