मलाई 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 फाइल निर्माण गर्न, प्रयोग गर्नुहोस् freewrap.
सेटिङ
जीएनयू / लिनक्स
स्थापनाको लागि इन्टरनेटमा पर्याप्त कागजातहरू छन् 1,2। हो, र यसले कुनै विशेष समस्या उत्पन्न गर्दैन:
मास्टर को लागी:
निस्सन्देह, यो प्रत्येक OS को लागि प्याकेजहरू सङ्कलन गर्न थप सही हुनेछ, तर यो लेख को दायरा बाहिर छ। हामी कामको लागि कन्टेनरहरू सेटअप गर्ने विवरणलाई पनि छोड्नेछौं, म केवल नोट गर्नेछु कि म 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
एमएस विन्डोज
विन्डोज अन्तर्गत एसेम्बलीका लागि "कार्यकर्ता" को रूपमा, 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
एउटा master.cfg फाइल /home/buildbot/master/ डाइरेक्टरीमा सिर्जना गरिएको थियो। यो फाइल पाइथन कोड हो र यसमा प्रणालीका सबै मेकानिजमहरूको विवरण समावेश छ; हामी भविष्यमा यससँग काम गर्नेछौं।
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"]))
RPM प्याकेजको लागि, निम्न केही प्रक्रियाहरू rpm आफैंले एसेम्बलीको समयमा गरिन्छ र स्पेस भित्र वर्णन गरिन्छ; डेबियनको लागि, तपाईंले यसलाई यहाँ गर्नुपर्छ:
# Поменяем пути к библиотекам
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 भण्डारमा परिवर्तनहरू), प्रक्रियाहरूको स्थिति पहिलो पृष्ठमा देखा पर्नेछ।
यदि तपाईंले माउसको साथ इच्छित रेखामा क्लिक गर्नुभयो भने, यो प्रक्रियाको हालको अवस्थाको साथ एक पृष्ठ खुल्नेछ, जहाँ तपाइँ के भइरहेको छ, के त्रुटिहरू, आदि देख्न सक्नुहुन्छ।
सम्पूर्ण विजार्ड कन्फिगरेसन यहाँ फेला पार्न सकिन्छ