Dahil ang buildbot ay isang distributed system, magiging lohikal na gumawa ng hiwalay na build host para sa bawat arkitektura at operating system. Sa aming kaso, ito ay magiging mga LXC container (sa kaso ng Linux) at qemu (sa kaso ng Windows):
vm-srv-build1 - centos 7, magkakaroon ng buildbot master at isa sa mga manggagawa
vm-srv-build2 - debian 10, para sa pagbuo ng mga pakete ng DEB
vm-srv-build3 - windows 10, para sa pagpupulong, alam mo kung para saan
Magkokolekta kami Rac GUI β isang graphical na interface para sa 1C rac para sa pamamahala ng isang kumpol ng mga server. Para sa Linux, gagamitin ang mga karaniwang tool para sa bawat OS; para bumuo ng exe file para sa Windows mula sa isang tcl script, gamitin freewrap.
Instalasyon
GNU / Linux
Mayroong sapat na dokumentasyon sa Internet para sa pag-install 1,2. Oo, at hindi ito nagiging sanhi ng anumang mga espesyal na problema:
Para sa master:
Siyempre, mas tama kung mangolekta ng mga pakete para sa bawat OS, ngunit ito ay lampas sa saklaw ng artikulo. Aalisin din namin ang paglalarawan ng pag-set up ng mga lalagyan para sa trabaho, mapapansin ko lang na gumagamit ako ng ProxMox VE. At kakailanganin mo ring mag-install ng mga pakete para sa bawat axis na kinakailangan para sa pagpupulong (centos: rpmdevtools, atbp.; debian: build-essential, dh-make, pbuilder, atbp.)
Ilulunsad ang mga Build project at mga serbisyo ng buildbot bilang unprivileged user, kaya kailangan mong gumawa ng isa sa lahat ng host na kalahok sa proseso:
adduser buildbot
Susunod, iko-configure namin ang awtomatikong paglulunsad ng mga serbisyo, ayon sa pagkakabanggit, sa bawat isa sa mga host (mga lalagyan):
Pagkatapos nito, maaari kang lumikha ng isang imprastraktura ng direktoryo para sa "mga manggagawa" (sa lahat ng mga host), upang gawin ito, magrehistro sa ilalim ng user ng buildbot at patakbuhin ang mga sumusunod na command:
Sa unang host 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
Sa pangalawang host 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
Sa mga host ng manggagawa, maaaring simulan ang serbisyo ng buildbot-worker
systemctl start buildbot-worker
Windows MS
Bilang isang "manggagawa" para sa pagpupulong sa ilalim ng Windows, isang virtual machine na may pinakabagong release ng Win10 ang gagamitin.
Upang magtrabaho kakailanganin mo:
Matapos ma-install ang lahat ng nasa itaas, maaari mong i-install ang buildbot mismo:
pip install buildbot-worker
Gumawa tayo ng gumaganang direktoryo
md c:worker
At ilunsad natin
buildbot-worker start c:worker
Kung gumagana ang lahat (tingnan ang log c:workertwistd.log), maaari mong irehistro ang aming "manggagawa" bilang isang serbisyo sa pamamagitan ng pagdaragdag ng isang item na may gumaganang direktoryo sa registry (ang mga utos ay isinasagawa sa powershell na tumatakbo bilang administrator):
Iyon lang sa mga "manggagawa", hindi mo na kailangang hawakan pa, ang lahat ng kontrol ay nagmumula sa master.
Setup ng wizard
Upang magsimula, gumawa tayo ng imprastraktura para sa master (sa pangunahing host), upang gawin ito, magrehistro sa ilalim ng user ng buildbot at patakbuhin ang mga sumusunod na command:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Para sa mga handa na pakete, lumikha ng isang direktoryo ng build
mkdir /home/buildbot/builds
Isang master.cfg file ang ginawa sa /home/buildbot/master/ directory. Ang file na ito ay isang code ng python at naglalaman ng isang paglalarawan ng lahat ng mga mekanismo ng system; gagawin namin ito sa hinaharap.
Upang i-automate ang pagpupulong ng mga pakete ng iba't ibang mga bersyon, upang hindi mabusisi ang code ng master.cfg file, ang mga linya na may kasalukuyang bersyon at release ay idinagdag sa header ng pangunahing script ng rac_gui.tcl program:
At batay sa mga linyang ito, binibilang ng buildbot ang mga pakete. Para mag-extract ng data, gamitin ang console grep call. Sa buildbot hindi mo lang matukoy ang mga variable para sa "mga manggagawa" (hindi bababa sa, hindi ko nakita kung paano). Ito ang ginagamit ng mga katangian. Yung. Sa proseso ng pagpupulong, nagdaragdag kami ng mga hakbang upang matukoy ang bersyon at release at, nang naaayon, itakda ang bersyon at mga katangian ng release. Maaaring itakda ang mga katangian sa iba't ibang paraan, sa kasong ito sa pamamagitan ng pagtawag sa console command:
Dapat pansinin dito na dahil ang host ay ginagamit din para sa manu-manong pagpupulong ng mga pakete, ang pagpupulong ay magaganap sa mga karaniwang landas.
Para itakda ang tamang release at mga numero ng bersyon, gumamit ng karaniwang sed call, i.e. pinapalitan ng command ang mga halaga sa loob ng spec file ng mga kinakailangan
Kinokopya namin ang natapos na naka-assemble na pakete at ang archive na may mga mapagkukunan sa master. Ngunit maaari mong agad na kopyahin ang mga file mula sa iyong work file papunta sa iyong repositoryo o website.
Simulan natin ang proseso ng pagkopya ng mga nakolektang pakete sa pagho-host sa pamamagitan ng FTP sa master. Para sa layuning ito ito ay ginagamit iskrip sa tcl.
Ganun lang sa RPM. Ngayon simulan nating ilarawan ang algorithm para sa pagbuo ng DEB package. Dahil ang mga proseso para sa pagbuo ng mga pakete para sa iba't ibang sistema ay independiyente sa isa't isa, maraming hakbang ang uulitin.
Para sa isang RPM package, ang ilan sa mga sumusunod na pamamaraan ay ginagawa ng rpm mismo sa panahon ng pagpupulong at inilarawan sa loob ng spec; para sa Debian, kailangan mong gawin ito dito:
I-save ang file at maaari mong subukang simulan ang serbisyo ng wizard:
systemctl restart buildbot-master
Sa log ay susuriin namin na ang lahat ay maayos sa config at lahat ay gumagana bilang normal. Ang lahat ng aming mga manggagawa ay dapat na ngayong kumonekta, na masayang iuulat sa 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
Kinukumpleto nito ang proseso ng pag-setup. Maaari mong tingnan ang kasalukuyang katayuan sa pamamagitan ng web interface. Kung saan maaari mo ring makita ang mga error sa pagbuo, sipain ang isang nakapirming proseso kung may nangyaring mali, atbp.
Kaagad pagkatapos ng paglulunsad, ang aming mga masisipag na manggagawa ay makikita sa pamamagitan ng menu na βBuildsβ -> βWorkersβ
Matapos makumpleto ang unang proseso ng pagbuo (ibig sabihin, mga pagbabago sa repositoryo ng Git), lalabas ang status ng mga proseso sa unang pahina.
Kung nag-click ka sa nais na linya gamit ang mouse, magbubukas ang isang pahina na may kasalukuyang estado ng prosesong ito, kung saan makikita mo kung ano ang nangyayari, kung anong mga error, atbp.