मला Git रेपॉजिटरीमधून साइटवर सॉफ्टवेअर पॅकेजेस असेंबलिंग आणि वितरीत करण्याची प्रक्रिया सेट करणे आवश्यक आहे. आणि जेव्हा मी, फार पूर्वी, इथे Habré वर बिल्डबॉटवर एक लेख पाहिला (शेवटी दुवा), तेव्हा मी ते वापरून पाहण्याचे ठरवले.
बिल्डबॉट ही वितरित प्रणाली असल्याने, प्रत्येक आर्किटेक्चर आणि ऑपरेटिंग सिस्टमसाठी स्वतंत्र बिल्ड होस्ट तयार करणे तर्कसंगत असेल. आमच्या बाबतीत, हे LXC कंटेनर (लिनक्सच्या बाबतीत) आणि qemu (विंडोजच्या बाबतीत) असतील:
vm-srv-build1 - centos 7, तेथे एक बिल्डबॉट मास्टर आणि एक कामगार असेल
vm-srv-build2 - debian 10, DEB पॅकेजेस तयार करण्यासाठी
vm-srv-build3 - विंडोज 10, असेंब्लीसाठी, तुम्हाला काय माहित आहे
आम्ही गोळा करू Rac GUI — सर्व्हरचे क्लस्टर व्यवस्थापित करण्यासाठी 1C rac साठी ग्राफिकल इंटरफेस. लिनक्ससाठी, प्रत्येक OS साठी मानक साधने वापरली जातील; tcl स्क्रिप्टमधून Windows साठी exe फाइल तयार करण्यासाठी, वापरा फ्रीव्ह्रॅप.
सेटिंग
जीएनयू / लिनक्स
स्थापनेसाठी इंटरनेटवर पुरेशी कागदपत्रे आहेत 1,2. होय, आणि यामुळे कोणतीही विशेष समस्या उद्भवत नाही:
मास्टर साठी:
अर्थात, प्रत्येक ओएससाठी पॅकेजेस गोळा करणे अधिक योग्य असेल, परंतु हे लेखाच्या व्याप्तीच्या पलीकडे आहे. आम्ही कामासाठी कंटेनर सेट करण्याचे वर्णन देखील वगळू, मी फक्त हे लक्षात घेईन की मी ProxMox VE वापरतो. आणि तुम्हाला असेंब्लीसाठी आवश्यक असलेल्या प्रत्येक अक्षासाठी पॅकेजेस स्थापित करण्याची देखील आवश्यकता असेल (सेंटोस: rpmdevtools, इ.; debian: build-essential, dh-make, pbuilder, इ.)
बिल्ड प्रकल्प आणि बिल्डबॉट सेवा एक विशेषाधिकार नसलेला वापरकर्ता म्हणून लाँच केल्या जातील, म्हणून तुम्हाला प्रक्रियेत सहभागी होणाऱ्या सर्व होस्टवर एक तयार करणे आवश्यक आहे:
adduser 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
कामगार होस्टवर, बिल्डबॉट-वर्कर सेवा सुरू केली जाऊ शकते
systemctl start buildbot-worker
एमएस विंडोज
Windows अंतर्गत असेंब्लीसाठी "कार्यकर्ता" म्हणून, Win10 च्या नवीनतम रिलीझसह एक आभासी मशीन वापरली जाईल.
कार्य करण्यासाठी आपल्याला आवश्यक असेलः
वरील सर्व स्थापित केल्यानंतर, आपण स्वतः बिल्डबॉट स्थापित करू शकता:
pip install buildbot-worker
चला एक कार्यरत निर्देशिका तयार करू
md c:worker
आणि चला लॉन्च करूया
buildbot-worker start c:worker
जर सर्वकाही कार्य करत असेल (लॉग c:workertwistd.log पहा), तर तुम्ही नोंदणीमध्ये कार्यरत निर्देशिकेसह एक आयटम जोडून आमच्या “वर्कर” ची सेवा म्हणून नोंदणी करू शकता (प्रशासक म्हणून चालणाऱ्या पॉवरशेलमध्ये कमांड्स कार्यान्वित केल्या जातात):
हे सर्व "कामगार" सोबत आहे, तुम्हाला त्यांना आणखी स्पर्श करण्याची गरज नाही, सर्व नियंत्रण मास्टरकडून येते.
विझार्ड सेटअप
सुरुवातीला, मास्टरसाठी (मुख्य होस्टवर) पायाभूत सुविधा तयार करूया, हे करण्यासाठी, बिल्डबॉट वापरकर्त्याच्या अंतर्गत नोंदणी करा आणि खालील आदेश चालवा:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
तयार पॅकेजेससाठी, बिल्ड डिरेक्टरी तयार करा
mkdir /home/buildbot/builds
/home/buildbot/master/ निर्देशिकेत master.cfg फाइल तयार केली गेली. ही फाईल एक पायथन कोड आहे आणि त्यामध्ये सिस्टमच्या सर्व यंत्रणांचे वर्णन आहे; आम्ही भविष्यात त्याच्यासह कार्य करू.
वेगवेगळ्या आवृत्त्यांच्या पॅकेजेसचे असेंब्ली स्वयंचलित करण्यासाठी, rac_gui.tcl प्रोग्रामच्या मुख्य स्क्रिप्टमध्ये, master.cfg फाइलच्या कोडचा शोध घेण्याची गरज नाही, हेडरमध्ये वर्तमान आवृत्ती आणि प्रकाशनासह ओळी जोडल्या गेल्या. :
आणि या ओळींवर आधारित, बिल्डबॉट पॅकेजेसची संख्या करेल. डेटा काढण्यासाठी, कंसोल grep कॉल वापरा. बिल्डबॉटमध्ये तुम्ही फक्त "कामगार" साठी व्हेरिएबल्स परिभाषित करू शकत नाही (किमान, मला ते कसे सापडले नाही). यासाठी गुणधर्म वापरले जातात. त्या. असेंब्ली प्रक्रियेत, आम्ही आवृत्ती आणि रिलीझ निश्चित करण्यासाठी चरण जोडतो आणि त्यानुसार, आवृत्ती आणि रिलीझ गुणधर्म सेट करतो. कन्सोल कमांडला कॉल करून या प्रकरणात गुणधर्म विविध प्रकारे सेट केले जाऊ शकतात:
# Добавим определение версии из основного файла
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() वर कॉल करून परिणामी मूल्ये बदलू शकता.
आम्ही तयार केलेले एकत्रित पॅकेज आणि स्त्रोतांसह संग्रहण मास्टरकडे कॉपी करतो. परंतु तुम्ही तुमच्या कामाच्या फाइलमधील फाइल्स तुमच्या भांडार किंवा वेबसाइटवर त्वरित कॉपी करू शकता.
# Скопируем файл на мастер
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"]))
आरपीएम पॅकेजसाठी, खालीलपैकी काही प्रक्रिया असेंब्ली दरम्यान आरपीएमद्वारेच केल्या जातात आणि स्पेकमध्ये वर्णन केल्या जातात; डेबियनसाठी, तुम्हाला ते येथे करावे लागेल:
# Поменяем пути к библиотекам
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 रेपॉजिटरीमध्ये बदल), प्रक्रियेची स्थिती पहिल्या पृष्ठावर दिसून येईल.
आपण माउससह इच्छित ओळीवर क्लिक केल्यास, या प्रक्रियेच्या वर्तमान स्थितीसह एक पृष्ठ उघडेल, जिथे आपण काय घडत आहे, कोणत्या त्रुटी इत्यादी पाहू शकता.