Ինձ անհրաժեշտ էր կարգավորել ծրագրային փաթեթները Git-ի պահոցից կայք հավաքելու և հասցնելու գործընթացը: Եվ երբ ես տեսա, ոչ վաղ անցյալում, այստեղ Habré-ում buildbot-ի մասին հոդվածը (հղումը վերջում), որոշեցի փորձել և կիրառել այն:
Քանի որ buildbot-ը բաշխված համակարգ է, տրամաբանական կլինի ստեղծել առանձին build host յուրաքանչյուր ճարտարապետության և օպերացիոն համակարգի համար: Մեր դեպքում դրանք կլինեն LXC կոնտեյներներ (Linux-ի դեպքում) և qemu (Windows-ի դեպքում).
vm-srv-build1 - centos 7, կլինեն buildbot master և աշխատողներից մեկը
vm-srv-build2 - debian 10, DEB փաթեթներ կառուցելու համար
vm-srv-build3 - windows 10, հավաքման համար, գիտեք ինչի համար
Մենք հավաքելու ենք Rac GUI — գրաֆիկական ինտերֆեյս 1C rac-ի համար՝ սերվերների կլաստերը կառավարելու համար: Linux-ի համար յուրաքանչյուր ՕՀ-ի համար կօգտագործվեն ստանդարտ գործիքներ, tcl սկրիպտից Windows-ի համար exe ֆայլ ստեղծելու համար օգտագործեք ազատ փաթաթում.
Տեղակայում
GNU / Linux
Տեղադրման համար ինտերնետում բավականաչափ փաստաթղթեր կան 1,2. Այո, և դա որևէ հատուկ խնդիր չի առաջացնում.
Վարպետի համար.
Իհարկե, ավելի ճիշտ կլինի փաթեթներ հավաքել յուրաքանչյուր ՕՀ-ի համար, բայց դա դուրս է հոդվածի շրջանակներից։ Մենք բաց կթողնենք նաև աշխատանքի համար բեռնարկղերի տեղադրման նկարագրությունը, միայն նշեմ, որ ես օգտագործում եմ ProxMox VE-ն։ Եվ դուք նաև պետք է փաթեթներ տեղադրեք հավաքման համար անհրաժեշտ յուրաքանչյուր առանցքի համար (centos՝ rpmdevtools և այլն; debian՝ build-essential, dh-make, pbuilder և այլն):
Կառուցման նախագծերը և buildbot ծառայությունները կգործարկվեն որպես արտոնյալ օգտվող, այնպես որ դուք պետք է ստեղծեք մեկը գործընթացին մասնակցող բոլոր հոսթերների վրա.
adduser buildbot
Հաջորդը, մենք կկազմաձևենք ծառայությունների ավտոմատ գործարկումը, համապատասխանաբար, հյուրընկալողներից յուրաքանչյուրի (բեռնարկղերի) վրա.
Դրանից հետո դուք կարող եք ստեղծել գրացուցակի ենթակառուցվածք «աշխատողների» համար (բոլոր հոստերի վրա), դա անելու համար գրանցվեք buildbot-ի օգտագործողի տակ և գործարկեք հետևյալ հրամանները.
Առաջին հոսթի 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
Երկրորդ հոսթի 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
Աշխատող հոսթների վրա buildbot-worker ծառայությունը կարող է գործարկվել
systemctl start buildbot-worker
MS Windows
Որպես Windows-ի տակ հավաքման «աշխատող», կօգտագործվի Win10-ի վերջին թողարկումով վիրտուալ մեքենա:
Աշխատելու համար ձեզ հարկավոր է.
Վերոհիշյալ բոլորը տեղադրելուց հետո կարող եք ինքնուրույն տեղադրել buildbot-ը.
pip install buildbot-worker
Եկեք ստեղծենք աշխատանքային գրացուցակ
md c:worker
Եվ եկեք գործարկենք
buildbot-worker start c:worker
Եթե ամեն ինչ աշխատում է (տե՛ս log c:workertwistd.log), ապա կարող եք գրանցել մեր «աշխատողին» որպես ծառայություն՝ ռեեստրում աշխատանքային գրացուցակով տարր ավելացնելով (հրամանները կատարվում են powershell-ում, որն աշխատում է որպես ադմինիստրատոր):
Այս ամենը «աշխատողների» հետ է, պետք չէ նրանց ավելի շոշափել, ամբողջ վերահսկողությունը գալիս է վարպետից:
Վիզարդի կարգավորում
Սկսենք, եկեք ստեղծենք ենթակառուցվածքը վարպետի համար (հիմնական հոսթի վրա), դա անելու համար գրանցվեք buildbot օգտագործողի տակ և գործարկեք հետևյալ հրամանները.
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Պատրաստ փաթեթների համար ստեղծեք builds գրացուցակ
mkdir /home/buildbot/builds
/home/buildbot/master/ գրացուցակում ստեղծվել է master.cfg ֆայլ: Այս ֆայլը python կոդ է և պարունակում է համակարգի բոլոր մեխանիզմների նկարագրությունը, մենք հետագայում կաշխատենք դրա հետ։
Տարբեր տարբերակների փաթեթների հավաքումն ավտոմատացնելու համար, որպեսզի հարկ չլինի խորանալ master.cfg ֆայլի կոդի մեջ, rac_gui.tcl ծրագրի հիմնական սցենարում ընթացիկ տարբերակով և թողարկումով տողեր են ավելացվել վերնագրում: :
Եվ այս տողերի հիման վրա buildbot-ը կհամարակալի փաթեթները։ Տվյալներ հանելու համար օգտագործեք կոնսոլի grep զանգը: Buildbot-ում դուք պարզապես չեք կարող փոփոխականներ սահմանել «աշխատողների» համար (համենայն դեպս, ես չեմ գտել, թե ինչպես): Ահա թե ինչի համար են օգտագործվում հատկությունները: Նրանք. Մոնտաժման գործընթացում մենք ավելացնում ենք քայլեր՝ տարբերակն ու թողարկումը որոշելու համար և, համապատասխանաբար, սահմանում ենք տարբերակի և թողարկման հատկությունները: Հատկությունները կարող են սահմանվել տարբեր ձևերով, այս դեպքում՝ զանգահարելով վահանակի հրամանը.
# Добавим определение версии из основного файла
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"
)
)
Դուք կարող եք փոխարինել ստացված արժեքները՝ զանգահարելով util.Interpolate():
Թողարկման և տարբերակի ճիշտ համարները սահմանելու համար օգտագործեք ստանդարտ sed զանգ, այսինքն. հրամանը փոխարինում է հատուկ ֆայլի ներսում գտնվող արժեքները պահանջվողներով
Պատրաստի հավաքված փաթեթը և աղբյուրներով արխիվը պատճենում ենք վարպետին: Բայց դուք կարող եք անմիջապես պատճենել ֆայլերը ձեր աշխատանքային ֆայլից ձեր պահոց կամ կայք:
# Скопируем файл на мастер
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")
)
)
Սկսենք հավաքագրված փաթեթները հոսթինգում պատճենելու գործընթացը վարպետի վրա FTP-ի միջոցով։ Այդ նպատակով այն օգտագործվում է սցենար tcl-ի վրա։
Վերջ RPM-ով: Հիմա եկեք սկսենք նկարագրել DEB փաթեթ կառուցելու ալգորիթմը։ Քանի որ տարբեր համակարգերի համար փաթեթներ կառուցելու գործընթացները միմյանցից անկախ են, շատ քայլեր կկրկնվեն:
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"]))
RPM փաթեթի համար հետևյալ պրոցեդուրաներից մի քանիսը կատարվում են պտույտի կողմից հավաքման ժամանակ և նկարագրված են սպեկտրի ներսում, Debian-ի համար դուք պետք է դա անեք այստեղ.
# Поменяем пути к библиотекам
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")]
)
)
Պահպանեք ֆայլը և կարող եք փորձել սկսել մոգերի ծառայությունը.
systemctl restart buildbot-master
Գրանցամատյանում մենք կստուգենք, որ ամեն ինչ կարգին է կոնֆիգուրացիայի հետ, և ամեն ինչ նորմալ է աշխատում: Մեր բոլոր աշխատողներն այժմ պետք է միանան, ինչը ուրախությամբ կհայտնվի մատյանում »»'/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
Սա ավարտում է տեղադրման գործընթացը: Դուք կարող եք դիտել ընթացիկ կարգավիճակը վեբ ինտերֆեյսի միջոցով: Այնտեղ, որտեղ դուք կարող եք նաև տեսնել կառուցման սխալները, սկսել սառեցված գործընթաց, եթե ինչ-որ բան սխալ է տեղի ունեցել և այլն:
Գործարկումից անմիջապես հետո մեր աշխատասերներին կարելի է տեսնել «Կառուցումներ» -> «Աշխատողներ» մենյուի միջոցով:
Առաջին կառուցման գործընթացն ավարտվելուց հետո (այսինքն՝ փոփոխություններ Git պահեստում), գործընթացների կարգավիճակը կհայտնվի առաջին էջում:
Եթե մկնիկով սեղմեք ցանկալի տողի վրա, կբացվի էջ այս գործընթացի ներկա վիճակով, որտեղ կարող եք տեսնել, թե ինչ է կատարվում, ինչ սխալներ և այլն։