مجھے گٹ ریپوزٹری سے سائٹ پر سافٹ ویئر پیکجوں کو جمع کرنے اور پہنچانے کا عمل ترتیب دینے کی ضرورت تھی۔ اور جب میں نے دیکھا، بہت عرصہ پہلے، یہاں Habré پر buildbot پر ایک مضمون (آخر میں لنک)، میں نے اسے آزمانے اور لاگو کرنے کا فیصلہ کیا۔
چونکہ بلڈ بوٹ ایک تقسیم شدہ نظام ہے، اس لیے ہر ایک فن تعمیر اور آپریٹنگ سسٹم کے لیے علیحدہ بلڈ ہوسٹ بنانا منطقی ہوگا۔ ہمارے معاملے میں، یہ LXC کنٹینرز ہوں گے (لینکس کے معاملے میں) اور qemu (ونڈوز کے معاملے میں):
vm-srv-build1 - centos 7، وہاں ایک بلڈ بوٹ ماسٹر اور ایک کارکن ہوگا
vm-srv-build2 - debian 10، DEB پیکجز بنانے کے لیے
vm-srv-build3 - ونڈوز 10، اسمبلی کے لیے، آپ جانتے ہیں کہ کس کے لیے
ہم جمع کریں گے۔ ریک GUI - سرورز کے کلسٹر کے انتظام کے لیے 1C ریک کے لیے ایک گرافیکل انٹرفیس۔ لینکس کے لیے، ہر OS کے لیے معیاری ٹولز استعمال کیے جائیں گے؛ tcl اسکرپٹ سے ونڈوز کے لیے exe فائل بنانے کے لیے، استعمال کریں فری ریپ.
تنصیب
جی این یو / لینکس
تنصیب کے لیے انٹرنیٹ پر کافی دستاویزات موجود ہیں۔ 1,2. ہاں، اور اس سے کوئی خاص پریشانی نہیں ہوتی:
ماسٹر کے لیے:
بلاشبہ، ہر OS کے لیے پیکجز جمع کرنا زیادہ درست ہوگا، لیکن یہ مضمون کے دائرہ کار سے باہر ہے۔ ہم کام کے لیے کنٹینرز لگانے کی تفصیل کو بھی چھوڑ دیں گے، میں صرف یہ نوٹ کروں گا کہ میں ProxMox VE استعمال کرتا ہوں۔ اور آپ کو اسمبلی کے لیے درکار ہر ایک محور کے لیے پیکجز انسٹال کرنے کی بھی ضرورت ہوگی (centos: 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
اگر سب کچھ کام کرتا ہے (log c:workertwistd.log دیکھیں)، تو آپ رجسٹری میں ورکنگ ڈائرکٹری کے ساتھ ایک آئٹم شامل کر کے ہمارے "worker" کو بطور سروس رجسٹر کر سکتے ہیں (کمانڈز پاور شیل میں بطور ایڈمنسٹریٹر چلتے ہیں):
یہ سب "کارکنوں" کے ساتھ ہے، آپ کو انہیں مزید چھونے کی ضرورت نہیں ہے، تمام کنٹرول ماسٹر سے آتا ہے۔
وزرڈ سیٹ اپ
شروع کرنے کے لیے، آئیے ماسٹر کے لیے بنیادی ڈھانچہ بنائیں (مین ہوسٹ پر)، ایسا کرنے کے لیے، بلڈ بوٹ صارف کے تحت رجسٹر ہوں اور درج ذیل کمانڈز چلائیں:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
ریڈی میڈ پیکجز کے لیے، ایک بلڈ ڈائرکٹری بنائیں
mkdir /home/buildbot/builds
ایک master.cfg فائل /home/buildbot/master/ ڈائریکٹری میں بنائی گئی تھی۔ یہ فائل ایک پائیتھن کوڈ ہے اور اس میں سسٹم کے تمام میکانزم کی تفصیل ہے؛ ہم مستقبل میں اس کے ساتھ کام کریں گے۔
مختلف ورژن کے پیکجوں کی اسمبلی کو خودکار کرنے کے لیے، تاکہ master.cfg فائل کے کوڈ کو تلاش نہ کرنا پڑے، rac_gui.tcl پروگرام کے مرکزی اسکرپٹ میں، ہیڈر میں موجودہ ورژن اور ریلیز کے ساتھ لائنیں شامل کی گئیں۔ :
اور ان لائنوں کی بنیاد پر، buildbot پیکجوں کو نمبر دے گا۔ ڈیٹا نکالنے کے لیے، کنسول 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 کے ساتھ ہے۔ اب آئیے ڈی ای بی پیکج بنانے کے الگورتھم کو بیان کرنا شروع کرتے ہیں۔ چونکہ مختلف سسٹمز کے لیے پیکجز بنانے کے عمل ایک دوسرے سے آزاد ہیں، اس لیے بہت سے مراحل کو دہرایا جائے گا۔
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 کے ذریعے اسمبلی کے دوران کیے جاتے ہیں اور ان کی تفصیل کے اندر بیان کی جاتی ہے؛ 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
یہ سیٹ اپ کا عمل مکمل کرتا ہے۔ آپ ویب انٹرفیس کے ذریعے موجودہ صورتحال دیکھ سکتے ہیں۔ جہاں آپ تعمیراتی غلطیاں بھی دیکھ سکتے ہیں، اگر کچھ غلط ہو جائے تو منجمد عمل کو لات ماریں، وغیرہ۔
لانچ کے فوراً بعد، ہمارے محنتی کارکنوں کو مینو "Builds" -> "Workers" کے ذریعے دیکھا جا سکتا ہے۔
پہلی تعمیر کا عمل مکمل ہونے کے بعد (یعنی گٹ ریپوزٹری میں تبدیلیاں)، عمل کی حیثیت پہلے صفحہ پر ظاہر ہوگی۔
اگر آپ ماؤس کے ساتھ مطلوبہ لائن پر کلک کریں گے، تو اس عمل کی موجودہ حالت کے ساتھ ایک صفحہ کھل جائے گا، جہاں آپ دیکھ سکتے ہیں کہ کیا ہو رہا ہے، کیا غلطیاں وغیرہ۔