BuildBot کا استعمال کرتے ہوئے مسلسل انٹیگریشن کو نافذ کرنے کی ایک مثال

BuildBot کا استعمال کرتے ہوئے مسلسل انٹیگریشن کو نافذ کرنے کی ایک مثال
(تصویری بذریعہ کمپیوٹرائزر سے Pixabay)

ہیلو!

میرا نام ہے Evgeniy Cherkinمیں ایک کان کنی کمپنی میں ترقیاتی ٹیم میں پروگرامر ہوں۔ پولیمٹل.

کوئی بھی بڑا پروجیکٹ شروع کرتے وقت، آپ سوچنا شروع کرتے ہیں: "اسے برقرار رکھنے کے لیے کون سا سافٹ ویئر استعمال کرنا بہتر ہے؟" ایک آئی ٹی پروجیکٹ اگلے ورژن کو جاری کرنے سے پہلے کئی مراحل سے گزرتا ہے۔ یہ اچھا ہے جب ان مراحل کا سلسلہ خودکار ہو۔ آئی ٹی پروجیکٹ کا نیا ورژن جاری کرنے کا خودکار عمل خود کہلاتا ہے۔ مسلسل انضمام. بلڈ بوٹ اس عمل کو نافذ کرنے میں ہمارے لیے ایک اچھا معاون ثابت ہوا۔

اس مضمون میں میں نے امکانات کا ایک جائزہ فراہم کرنے کا فیصلہ کیا۔ بلڈ بوٹ. یہ سافٹ ویئر کیا قابل ہے؟ اس سے کیسے رابطہ کیا جائے اور اس کے ساتھ ایک عام موثر کام کا رشتہ کیسے بنایا جائے؟ آپ اپنی مشین پر اپنے پروجیکٹ کو بنانے اور جانچنے کے لیے ایک ورکنگ سروس بنا کر خود ہمارے تجربے کا اطلاق کر سکتے ہیں۔

مواد

مواد

1. BuildBot کیوں؟
2. BuildMaster کی قیادت میں تصور
3. تنصیب
4. پہلے اقدامات

5. ترتیب۔ مرحلہ وار نسخہ

5.1 BuildmasterConfig
5.2 کارکنوں
5.3 تبدیلی_ذریعہ
5.4 شیڈولرز

5.5 بلڈ فیکٹری
5.6 بلڈرز

6. آپ کی اپنی ترتیب کی مثال

6.1 اپنے master.cfg کے راستے پر
6.2 svn کے ساتھ کام کرنا
6.3 آپ کو خط: رپورٹرز اعلان کرنے کے مجاز ہیں۔

ہم نے کر لیا! مبارک ہو

1. BuildBot کیوں؟

اس سے پہلے حبر پر میں نے نفاذ کے بارے میں مضامین دیکھے تھے۔ مسلسل انضمام استعمال کرتے ہوئے بلڈ بوٹ. مثلاً یہ والا میں نے اسے سب سے زیادہ معلوماتی پایا۔ ایک اور مثال ہے- آسان. ان مضامین کو موسمی بنایا جا سکتا ہے۔ دستی سے مثالاور اس اس کے بعد، انگریزی میں. کوپ ایک اچھا نقطہ آغاز بناتا ہے۔ ان مضامین کو پڑھنے کے بعد، آپ شاید فوری طور پر کچھ چاہیں گے۔ بلڈ بوٹ کیا.

رکو! کیا واقعی کسی نے اسے اپنے منصوبوں میں استعمال کیا ہے؟ یہ ہاں نکلتا ہے۔ بہت اسے اپنے کاموں میں لاگو کیا۔ مل سکتا ہے۔ مثال کے طور پر استعمال کی بلڈ بوٹ اور گوگل کوڈ آرکائیوز میں۔

تو لوگوں کی منطق کیا ہے؟ بلڈ بوٹ? سب کے بعد، دوسرے اوزار ہیں: کروز کنٹرول и جینکنز. میں اس طرح جواب دوں گا۔ زیادہ تر کاموں کے لیے جینکنز اور سچ کافی ہو جائے گا. اپنی باری میں، بلڈ بوٹ - زیادہ موافقت پذیر، جب کہ مسائل اسی طرح حل ہوتے ہیں جیسے کہ اندر جینکنز. انتخاب آپ کا ہے. لیکن چونکہ ہم ترقی پذیر ٹارگٹ پروجیکٹ کے لیے ایک ٹول تلاش کر رہے ہیں، کیوں نہ ایک ایسا انتخاب کریں جو آسان اقدامات سے شروع کرتے ہوئے، ایک ایسا بلڈ سسٹم حاصل کرنے کی اجازت دے جس میں انٹرایکٹیویٹی اور ایک منفرد انٹرفیس ہو۔

ان لوگوں کے لیے جن کا ٹارگٹ پروجیکٹ python میں لکھا گیا ہے، سوال یہ پیدا ہوتا ہے: "کیوں نہ ایک انٹیگریشن سسٹم کا انتخاب کیا جائے جس میں پروجیکٹ میں استعمال ہونے والی زبان کے لحاظ سے واضح انٹرفیس ہو؟" اور اب یہ فوائد پیش کرنے کا وقت ہے بلڈ بوٹ.

تو، ہماری "آلہ ساز چوکڑی"۔ اپنے لیے میں نے چار خصوصیات کی نشاندہی کی ہے۔ بلڈ بوٹ:

  1. یہ GPL لائسنس کے تحت ایک اوپن سورس فریم ورک ہے۔
  2. یہ python کا استعمال کنفیگریشن ٹول اور مطلوبہ اعمال کی تفصیل کے طور پر ہے۔
  3. یہ اس مشین سے جواب حاصل کرنے کا موقع ہے جس پر اسمبلی ہوتی ہے۔
  4. یہ، آخر میں، ایک میزبان کے لیے کم از کم تقاضے ہیں۔ تعیناتی کے لیے ازگر اور مڑا ہوا درکار ہے، اور اس کے لیے ورچوئل مشین اور جاوا مشین کی ضرورت نہیں ہے۔

2. BuildMaster کی قیادت میں تصور

BuildBot کا استعمال کرتے ہوئے مسلسل انٹیگریشن کو نافذ کرنے کی ایک مثال

کام کی تقسیم کے فن تعمیر کا مرکزی مقام ہے۔ بلڈ ماسٹر. یہ ایک خدمت ہے جو:

  • ٹریک رکھتا ہے پروجیکٹ سورس ٹری میں تبدیلیاں
  • بھیجتا ہے وہ کمانڈز جو ورکر سروس کے ذریعے پروجیکٹ کو بنانے اور اس کی جانچ کرنے کے لیے عمل میں لائی جائیں۔
  • مطلع کرتا ہے صارفین کو کیے گئے اقدامات کے نتائج کے بارے میں

بلڈ ماسٹر فائل کے ذریعے ترتیب دیا گیا ہے۔ master.cfg. یہ فائل روٹ میں ہے۔ بلڈ ماسٹر. بعد میں میں دکھاؤں گا کہ یہ جڑ کیسے بنتی ہے۔ فائل خود master.cfg ایک python اسکرپٹ پر مشتمل ہے جو کالز کا استعمال کرتا ہے۔ بلڈ بوٹ.

اگلا سب سے اہم اعتراض بلڈ بوٹ ایک نام ہے کارکن. یہ سروس کسی دوسرے میزبان پر مختلف OS کے ساتھ شروع کی جا سکتی ہے، یا شاید ایک جہاں پر بلڈ ماسٹر. یہ ایک خاص طور پر تیار کردہ ورچوئل ماحول میں اپنے پیکجز اور متغیرات کے ساتھ بھی موجود ہوسکتا ہے۔ یہ ورچوئل ماحول ازگر کی افادیت جیسے استعمال کرکے تیار کیا جاسکتا ہے۔ virtualenv، venv.

بلڈ ماسٹر ہر ایک کو حکم نشر کرتا ہے۔ کارکن-y، اور وہ، بدلے میں، ان کو پورا کرتا ہے۔ یعنی، یہ پتہ چلتا ہے کہ کسی پروجیکٹ کی تعمیر اور جانچ کا عمل جاری رہ سکتا ہے۔ کارکن-ای ونڈوز چلا رہا ہے اور لینکس چلانے والے دوسرے ورکر پر۔

اس کو دیکھو پروجیکٹ سورس کوڈ ہر ایک پر ہوتا ہے۔ کارکن-ای

3. تنصیب

تو چلو چلتے ہیں. میں Ubuntu 18.04 کو بطور میزبان استعمال کروں گا۔ میں اس پر ایک رکھ دوں گا۔ بلڈ ماسٹر-ایک اور ایک کارکن-a لیکن پہلے آپ کو python3.7 انسٹال کرنے کی ضرورت ہے:

sudo apt-get update
sudo apt-get install python3.7

ان لوگوں کے لیے جنہیں 3.7.2 کے بجائے python3.7.1 کی ضرورت ہے، آپ درج ذیل کام کر سکتے ہیں:


sudo apt-get update
sudo apt-get software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get install python3.7
sudo ln -fs /usr/bin/python3.7 /usr/bin/python3
pip3 install --upgrade pip

اگلا مرحلہ انسٹال کرنا ہے۔ ٹویٹ کیا۔ и بلڈ بوٹ، نیز پیکیجز جو آپ کو اضافی فعالیت استعمال کرنے کی اجازت دیتے ہیں۔ بلڈ بوٹ-ا.


/*Все что под sudo будет установленно для всех пользователей в директорию /usr/local/lib/python3.7/dist-packages*/

#На хосте который производит мониторинг Worker-ов 
sudo pip install twisted #Библиотека twisted
sudo pip install buildbot #BuildMaster
#Дополнительный функционал
pip install pysqlite3 #Устанавливаем базу sqllite в учебных целях
pip install jinja2 #framework наподобие django, для web и для почтовых рассыллок
pip install autobahn #Web cокеты для связи BuildMaster->Worker
pip install sqlalchemy sqlalchemy-migrate #Для отображения схемы базы данных
#Для Web отображения BuildBot-a
pip install buildbot-www buildbot-grid-view buildbot-console-view buildbot-waterfall-view
pip install python-dateutil #Отображение дат в web
#На стороне хоста который непосредственно осуществляет сборку и тестирование 
pip install buildbot-worker #Worker
#Дополнительный функционал
sudo pip install virtualenv #Виртуальная среда 

4. پہلے اقدامات

تخلیق کرنے کا وقت بلڈ ماسٹر. یہ ہمارے فولڈر میں ہوگا۔ /home/habr/master.

mkdir master
buildbot create-master master # Собственно сдесь и создаем

اگلا قدم. آئیے تخلیق کرتے ہیں۔ کارکن. یہ ہمارے فولڈر میں ہوگا۔ /home/habr/worker.

mkdir worker
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker localhost:4000 yourWorkerName password

جب آپ بھاگتے ہیں۔ کارکن، پھر بطور ڈیفالٹ یہ تخلیق کرے گا۔ /home/habr/worker پروجیکٹ کے نام کے ساتھ فولڈر، جس میں وضاحت کی گئی ہے۔ master.cfg. اور پراجیکٹ کے نام کے فولڈر میں یہ ڈائرکٹری بنائے گا۔ تعمیر، اور یہ کرتے رہیں گے۔ چیک آؤٹ. کے لیے ورکنگ ڈائرکٹری کارکناور یہ ایک ڈائریکٹری بن جائے گی۔ /home/habr/yourProject/build.

"سنہری چابی
اور اب جس کے لیے میں نے پچھلا پیراگراف لکھا تھا: ایک اسکرپٹ جو ماسٹر سے مطالبہ کریں گے۔ کارکن-اور اس ڈائرکٹری میں دور سے کیا گیا اس پر عمل نہیں کیا جائے گا کیونکہ اسکرپٹ کو چلانے کی اجازت نہیں ہے۔ صورتحال کو درست کرنے کے لیے، آپ کو ایک چابی کی ضرورت ہوگی۔ --umask=0o22، جو اس ڈائریکٹری کو لکھنے سے منع کرتا ہے، لیکن لانچ کے حقوق کو برقرار رکھے گا۔ اور ہمیں بس یہی ضرورت ہے۔

بلڈ ماسٹر и کارکن ایک دوسرے کے ساتھ تعلق قائم کریں. ایسا ہوتا ہے کہ یہ ٹوٹ جاتا ہے اور کارکن کی طرف سے جواب کے لئے کچھ وقت انتظار کر رہے ہیں بلڈ ماسٹر-A اگر کوئی جواب نہیں ہے تو، کنکشن دوبارہ شروع ہو جائے گا. چابی --keepalive=60 صرف اس کے بعد کا وقت بتانے کی ضرورت ہے۔ متصل ریبوٹس

5. ترتیب۔ مرحلہ وار نسخہ

تشکیل بلڈ ماسٹر مشین کے اس طرف کیا جاتا ہے جہاں ہم نے کمانڈ کو عمل میں لایا تھا۔ تخلیق ماسٹر. ہمارے معاملے میں، یہ ایک ڈائریکٹری ہے۔ /home/habr/master. کنفیگریشن فائل master.cfg ابھی تک موجود نہیں ہے، لیکن کمانڈ نے پہلے ہی فائل بنائی ہے۔ master.cmg.sample. آپ کو اس کا نام تبدیل کرنے کی ضرورت ہے۔ master.cfg.sample в master.cfg

mv master.cfg.sample master.cfg

آئیے اسے کھولتے ہیں۔ master.cfg. اور آئیے دیکھتے ہیں کہ یہ کن چیزوں پر مشتمل ہے۔ اور اس کے بعد، ہم اپنی کنفیگریشن فائل بنانے کی کوشش کرتے ہیں۔

master.cfg

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
    'git://github.com/buildbot/hello-world.git',
         workdir='gitpoller-workdir', branch='master',
         pollInterval=300))
                        
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
        name="all",
        change_filter=util.ChangeFilter(branch='master'),
        treeStableTimer=None,
        builderNames=["runtests"]))
c['schedulers'].append(schedulers.ForceScheduler(
        name="force",
        builderNames=["runtests"]))
                        
factory = util.BuildFactory()
                        
factory.addStep(steps.Git(repourl='git://github.com/buildbot/hello-world.git', mode='incremental'))
factory.addStep(steps.ShellCommand(command=["trial", "hello"],
                                   env={"PYTHONPATH": "."}))
                        
c['builders'] = []
c['builders'].append(
    util.BuilderConfig(name="runtests",
    workernames=["example-worker"],
    factory=factory))
                         
c['services'] = []
                        
c['title'] = "Hello World CI"
c['titleURL'] = "https://buildbot.github.io/hello-world/"
                        
                        
c['buildbotURL'] = "http://localhost:8010/"
                        
c['www'] = dict(port=8010,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}))
                        
c['db'] = {
    'db_url' : "sqlite:///state.sqlite",
}

5.1 BuildmasterConfig

c = BuildmasterConfig = {} 

BuildmasterConfig - کنفیگریشن فائل کی بنیادی لغت۔ اسے کنفیگریشن فائل میں شامل کرنا ضروری ہے۔ استعمال میں آسانی کے لیے، کنفیگریشن کوڈ میں ایک عرف متعارف کرایا گیا ہے۔ "c". عنوانات چابیاں в c["keyFromDist"] کے ساتھ تعامل کے لیے مقررہ عناصر ہیں۔ بلڈ ماسٹر. ہر کلید کے لیے، متعلقہ آبجیکٹ کو قدر کے طور پر تبدیل کیا جاتا ہے۔

5.2 کارکنوں

c['workers'] = [worker.Worker("example-worker", "pass")]

اس بار ہم اشارہ کرتے ہیں۔ بلڈ ماسٹر-y کی فہرست کارکن-s. میں خود کارکن ہم نے پیدا کیا اوپر، اشارہ کرنا آپ کے کارکن کا نام и پاس ورڈ. اب ان کی بجائے وضاحت کرنے کی ضرورت ہے۔ مثال کے طور پر کارکن и منظور .

5.3 تبدیلی_ذریعہ

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
                            'git://github.com/buildbot/hello-world.git',
                             workdir='gitpoller-workdir', branch='master',
                             pollInterval=300))                

کلید کے ذریعے چینج_ذریعہ لغت c سے ہمیں اس فہرست تک رسائی حاصل ہوتی ہے جہاں ہم ایک ایسی چیز ڈالنا چاہتے ہیں جو پروجیکٹ کے سورس کوڈ کے ساتھ ریپوزٹری کو پول کرتا ہے۔ مثال میں ایک Git ذخیرہ استعمال کیا گیا ہے جو کچھ وقفوں پر پول کیا جاتا ہے۔

پہلی دلیل آپ کے ذخیرے کا راستہ ہے۔

workdir اس فولڈر کے راستے کی نمائندگی کرتا ہے جہاں طرف ہے۔ کارکن- راستے کا رشتہ دار /home/habr/worker/yourProject/build git ذخیرہ کے مقامی ورژن کو ذخیرہ کرے گا۔

برانچ مخزن میں ایک مخصوص شاخ پر مشتمل ہے جس کی پیروی کی جانی چاہئے۔

پول انٹرول جس کے بعد سیکنڈوں کی تعداد پر مشتمل ہے۔ بلڈ ماسٹر تبدیلیوں کے لیے ریپوزٹری کو پول کرے گا۔

پروجیکٹ کے ذخیرے میں ہونے والی تبدیلیوں کو ٹریک کرنے کے کئی طریقے ہیں۔

آسان ترین طریقہ ہے۔ ووٹنگ، جس کا مطلب ہے کہ بلڈ ماسٹر وقتاً فوقتاً سرور کو ذخیرہ کے ساتھ پول کرتا ہے۔ اگر وعدہ کرنا ریپوزٹری میں تبدیلیوں کی عکاسی کرتا ہے، پھر بلڈ ماسٹر کچھ تاخیر کے ساتھ ایک اندرونی آبجیکٹ بنائے گا۔ تبدیل کریں اور اسے ایونٹ ہینڈلر کو بھیجیں۔ شیڈولر، جو اس منصوبے کی تعمیر اور جانچ کے اقدامات شروع کرے گا۔ کارکن-ای ان اقدامات میں اشارہ کیا جائے گا۔ اپ ڈیٹ ذخیرہ بالکل پر کارکنیہ ذخیرہ کی ایک مقامی کاپی بنائے گا۔ اس عمل کی تفصیلات اگلے دو حصوں میں نیچے دی جائیں گی۔ (5.4 и 5.5).

مخزن میں ہونے والی تبدیلیوں سے باخبر رہنے کا ایک اور بھی خوبصورت طریقہ یہ ہے کہ سرور سے براہ راست پیغامات بھیجیں بلڈ ماسٹر- پروجیکٹ سورس کوڈز کو تبدیل کرنے کے بارے میں۔ اس صورت میں، جیسے ہی ڈویلپر کرتا ہے وعدہ کرناپراجیکٹ ریپوزٹری والا سرور ایک پیغام بھیجے گا۔ بلڈ ماسٹر-y اور وہ، بدلے میں، ایک چیز بنا کر اسے روک دے گا۔ PBCchangeSource. اگلا، اس اعتراض کو منتقل کیا جائے گا شیڈولر، جو پروجیکٹ کو بنانے اور اس کی جانچ کرنے کے اقدامات کو چالو کرتا ہے۔ اس طریقہ کار کا ایک اہم حصہ کام کر رہا ہے۔ ہک- مخزن میں سرور اسکرپٹس۔ اسکرپٹ میں ہک-a، کارروائیوں کی کارروائی کے لیے ذمہ دار جب وعدہ کرنا-e، آپ کو یوٹیلیٹی کو کال کرنے کی ضرورت ہے۔ بھیجیں تبدیلی اور نیٹ ورک ایڈریس کی وضاحت کریں۔ بلڈ ماسٹر-A آپ کو نیٹ ورک پورٹ کی بھی وضاحت کرنے کی ضرورت ہے جو سنے گا۔ PBCchangeSource. PBCchangeSourceویسے، حصہ ہے بلڈ ماسٹر-اے اس طریقہ کار کو اجازت درکار ہوگی۔ منتظم-a سرور پر جہاں پراجیکٹ ریپوزٹری واقع ہے۔ آپ کو پہلے ریپوزٹری کا بیک اپ بنانے کی ضرورت ہوگی۔

5.4 شیڈولرز


c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
        name="all",
        change_filter=util.ChangeFilter(branch='master'),
        treeStableTimer=None,
        builderNames=["runtests"]))
c['schedulers'].append(schedulers.ForceScheduler(
        name="force",
        builderNames=["runtests"]))

شیڈولرز - یہ ایک ایسا عنصر ہے جو ایک محرک کے طور پر کام کرتا ہے جو اس منصوبے کی اسمبلی اور جانچ کے پورے سلسلے کو شروع کرتا ہے۔
BuildBot کا استعمال کرتے ہوئے مسلسل انٹیگریشن کو نافذ کرنے کی ایک مثال

وہ تبدیلیاں جو ریکارڈ کی گئیں۔ چینج_ذریعہ, کام کے عمل میں تبدیل بلڈ بوٹ- اعتراض کرنا تبدیل کریں اور اب ہر شیڈولر ان کی بنیاد پر، یہ پراجیکٹ کی تعمیر کا عمل شروع کرنے کے لیے درخواستیں تیار کرتا ہے۔ تاہم، یہ اس بات کا بھی تعین کرتا ہے کہ ان درخواستوں کو مزید قطار میں کب منتقل کیا جاتا ہے۔ ایک چیز بلڈر درخواستوں کی ایک قطار کو ذخیرہ کرتا ہے اور موجودہ اسمبلی کی حالت کو الگ سے ٹریک کرتا ہے۔ کارکن-ای بلڈر پر موجود ہے بلڈ ماسٹر-e اور پر کارکن-ای وہ ساتھ بھیجتا ہے۔ بلڈ ماسٹر-ایک پر کارکن- اور پہلے سے ہی مخصوص تعمیر - اقدامات کا ایک سلسلہ جس پر عمل کرنا ضروری ہے۔
ہم اسے موجودہ مثال میں دیکھتے ہیں۔ شیڈولرز 2 ٹکڑے بنائے گئے ہیں۔ مزید یہ کہ ہر ایک کی اپنی قسم ہے۔

سنگل برانچ شیڈیولر - شیڈول پر سب سے زیادہ مقبول کلاسوں میں سے ایک۔ یہ ایک شاخ کو دیکھتا ہے اور اس میں ریکارڈ شدہ تبدیلی سے متحرک ہوتا ہے۔ جب وہ تبدیلیاں دیکھتا ہے، تو وہ تعمیر کی درخواست بھیجنے میں تاخیر کرسکتا ہے (خصوصی پیرامیٹر میں بیان کردہ مدت کے لیے موخر ٹری سٹیبل ٹائمر) میں نام شیڈول کا نام سیٹ کرتا ہے جس میں دکھایا جائے گا۔ بلڈ بوٹ- ویب انٹرفیس۔ میں فلٹر کو تبدیل کریں۔ ایک فلٹر سیٹ کیا جاتا ہے، گزرنے کے بعد برانچ میں کون سی تبدیلیاں شیڈول کو تعمیر کے لیے درخواست بھیجنے کا اشارہ دیتی ہیں۔ میں بلڈر کے نام نام کی نشاندہی کی گئی ہے۔ بلڈر-a، جسے ہم تھوڑی دیر بعد سیٹ کریں گے۔ ہمارے معاملے میں نام پروجیکٹ کے نام جیسا ہی ہوگا: آپ کا پروجیکٹ.

فورس شیڈیولر ایک بہت سادہ چیز. اس قسم کا شیڈول ماؤس کلک کے ذریعے شروع ہوتا ہے۔ بلڈ بوٹ- ویب انٹرفیس۔ پیرامیٹرز کا وہی جوہر ہے جیسا کہ میں ہے۔ سنگل برانچ شیڈیولر.

پی ایس نمبر 3۔ شاید یہ کام آئے گا۔
متواتر ایک شیڈول ہے جو ایک مقررہ وقت کی تعدد پر چلتا ہے۔ کال کچھ اس طرح نظر آتی ہے۔


from buildbot.plugins import schedulers
nightly = schedulers.Periodic(name="daily",
                              builderNames=["full-solaris"],
                              periodicBuildTimer=24*60*60)
c['schedulers'] = [nightly]                    

5.5 بلڈ فیکٹری


factory = util.BuildFactory()
                        
factory.addStep(steps.Git(repourl='git://github.com/buildbot/hello-world.git', mode='incremental'))
factory.addStep(steps.ShellCommand(command=["trial", "hello"],
                                   env={"PYTHONPATH": "."}))

پیریڈک بلڈ ٹائمر اس دورانیہ کا وقت سیکنڈوں میں بتاتا ہے۔

تعمیر فیکٹری ایک مخصوص بناتا ہے تعمیر، پھر جو بلڈر کو بھیجتا ہے۔ کارکن. میں تعمیر فیکٹری پیروی کیے جانے والے اقدامات کی نشاندہی کرتا ہے۔ کارکن-y طریقہ کو کال کرکے اقدامات شامل کیے جاتے ہیں۔ addStep

اس مثال میں پہلا اضافی قدم ہے۔ گٹ صاف -d -f -f -xپھر گٹ چیک آؤٹ. یہ اعمال پیرامیٹر میں شامل ہیں۔ طریقہ، جو واضح طور پر بیان نہیں کیا گیا ہے لیکن ایک ڈیفالٹ قدر کا مطلب ہے۔ تازہ... پیرامیٹر موڈ = 'بڑھتی' اشارہ کرتا ہے کہ فائلیں ڈائریکٹری سے ہیں جہاں چیک آؤٹمخزن سے غائب رہتے ہوئے، اچھوتے رہیں۔

دوسرا اضافی مرحلہ اسکرپٹ کو کال کر رہا ہے۔ مقدمے کی سماعت پیرامیٹر کے ساتھ ہیلو سائڈ پر کارکن-ایک ڈائریکٹری سے /home/habr/worker/yourProject/build ماحولیاتی متغیر کے ساتھ PATHONPATH=... اس طرح، آپ خود اپنی اسکرپٹ لکھ سکتے ہیں اور انہیں ایک طرف کر سکتے ہیں کارکن- ہر قدم util.ShellCommand. ان اسکرپٹ کو براہ راست ذخیرہ میں رکھا جا سکتا ہے۔ پھر پر چیک آؤٹ-e وہ گر جائیں گے۔ /home/habr/worker/yourProject/build. تاہم، پھر دو "مگر" ہیں:

  1. کارکن ایک کلید کے ساتھ تخلیق کیا جانا چاہئے --mask تاکہ اس کے بعد پھانسی کے حقوق کو روکا نہ جائے۔ چیک آؤٹ-ا.
  2. میں گٹ دھکا-e ان اسکرپٹس میں سے آپ کو پراپرٹی کی وضاحت کرنے کی ضرورت ہے۔ قابل عملتاکہ بعد میں چیک آؤٹ-e نے گٹ اسکرپٹ پر عمل درآمد کا حق نہیں کھویا۔

5.6 بلڈرز


c['builders'] = []
c['builders'].append(util.BuilderConfig(name="runtests",
                                        workernames=["example-worker"],
                                        factory=factory))

اس کے بارے میں بلڈر بتایا گیا تھا یہاں. اب میں آپ کو مزید تفصیل سے بتاؤں گا کہ اسے کیسے بنایا جائے۔ BuilderConfig ایک تعمیر کنندہ ہے بلڈر. میں ایسے ڈیزائنرز c['بلڈرز'] آپ کئی کی وضاحت کر سکتے ہیں، کیونکہ یہ اشیاء کی ایک شیٹ ہے۔ بلڈر قسم اب آئیے اس سے مثال دوبارہ لکھتے ہیں۔ بلڈ بوٹ، اسے ہمارے کام کے قریب لانا۔


c['builders'] = []
c['builders'].append(util.BuilderConfig(name="yourProject",
                                            workernames=["yourWorkerName"],
                                            factory=factory))

اب میں آپ کو پیرامیٹرز کے بارے میں بتاتا ہوں۔ BuilderConfig.

نام نام کی وضاحت کرتا ہے۔ بلڈر-a یہاں ہم نے اسے نام دیا۔ آپ کا پروجیکٹ. اس کا مطلب ہے کہ آن کارکن- یہی راستہ بنایا جائے گا۔ /home/habr/worker/yourProject/build. شیڈولر تلاش بلڈر صرف اس نام سے.

کارکنوں کے نام شیٹ پر مشتمل ہے کارکن-s. جن میں سے ہر ایک کو شامل کرنا ضروری ہے۔ c['مزدور'].

فیکٹری --.مخصوص تعمیر، جس کے ساتھ یہ وابستہ ہے۔ بلڈر. وہ اعتراض بھیجے گا۔ تعمیر پر کارکن اس میں شامل تمام مراحل کو مکمل کرنے کے لیے تعمیر-ا.

6. آپ کی اپنی ترتیب کی مثال

یہاں پراجیکٹ فن تعمیر کی مثال ہے جس کے ذریعے میں عمل درآمد کرنے کی تجویز کرتا ہوں۔ بلڈ بوٹ
.

ہم ورژن کنٹرول سسٹم کے طور پر استعمال کریں گے۔ svn. ذخیرہ خود کسی قسم کے بادل میں واقع ہوگا۔ اس بادل کا پتہ یہ ہے۔ svn.host/svn/yourProject/trunk. بادل کے نیچے svn ایک اکاؤنٹ کا صارف نام ہے: صارف, passwd: پاس ورڈ. اسکرپٹ جو مراحل کی نمائندگی کرتی ہیں۔ تعمیر-a برانچ میں بھی ہوگا۔ svn، ایک علیحدہ فولڈر میں buildbot/worker_linux. یہ اسکرپٹ محفوظ شدہ پراپرٹی کے ساتھ مخزن میں واقع ہیں۔ قابل عمل.

بلڈ ماسٹر и کارکن اسی میزبان پر چلائیں پروجیکٹ۔ہوسٹ .بلڈ ماسٹر اپنی فائلوں کو فولڈر میں محفوظ کرتا ہے۔ /home/habr/master. کارکن یہ مندرجہ ذیل راستے میں محفوظ ہے /home/habr/worker. عمل مواصلات بلڈ ماسٹر-a اور کارکن-a پروٹوکول کے مطابق پورٹ 4000 کے ذریعے کیا جاتا ہے۔ بلڈ بوٹ-a، یہ ہے 'پی بی' پروٹوکول.

ہدف پروجیکٹ مکمل طور پر ازگر میں لکھا گیا ہے۔ کام اس کی تبدیلیوں کو ٹریک کرنا، ایک قابل عمل فائل بنانا، دستاویزات تیار کرنا، اور جانچ کرنا ہے۔ ناکامی کی صورت میں، تمام ڈویلپرز کو ای میل کے ذریعے ایک پیغام بھیجنا ہوگا جس میں کہا گیا ہے کہ کوئی ناکام کارروائی ہوئی ہے۔

ویب ڈسپلے بلڈ بوٹ کے لیے ہم پورٹ 80 سے رابطہ کریں گے۔ پروجیکٹ۔ہوسٹ. Apatch انسٹال کرنا ضروری نہیں ہے۔ لائبریری کے حصے کے طور پر بٹی پہلے سے ہی ایک ویب سرور موجود ہے، بلڈ بوٹ اسے استعمال کرتا ہے.

داخلی معلومات کو ذخیرہ کرنے کے لیے بلڈ بوٹ использовать использовать sqlite.

میلنگ کے لیے ایک میزبان کی ضرورت ہے۔ smtp.your.domain - یہ میل سے خطوط بھیجنے کی اجازت دیتا ہے۔ [ای میل محفوظ] تصدیق کے بغیر. میزبان پر بھی'SMTP پوسٹ 1025 پر منٹس کی سماعت کی جا رہی ہے۔

اس عمل میں دو لوگ شامل ہیں: منتظم и صارف. منتظم منتظم کرتا ہے۔ بلڈ بوٹ. صارف ارتکاب کرنے والا شخص ہے۔ وعدہ کرنا-s.

قابل عمل فائل کے ذریعے تیار کیا جاتا ہے۔ pyinstaller. دستاویزات کے ذریعے تیار کیا جاتا ہے۔ doxygen.

اس فن تعمیر کے لیے میں نے یہ لکھا: master.cfg:

master.cfg


import os, re
from buildbot.plugins import steps, util, schedulers, worker, changes, reporters

c= BuildmasterConfig ={}

c['workers'] = [ worker.Worker('yourWorkerName', 'password') ]
c['protocols'] = {'pb': {'port': 4000}} 


svn_poller = changes.SVNPoller(repourl="https://svn.host/svn/yourProject/trunk",
                                svnuser="user",
                                svnpasswd="password",
                                pollinterval=60,
				split_file=util.svn.split_file_alwaystrunk
                                )

c['change_source'] =  svn_poller

hourlyscheduler = schedulers.SingleBranchScheduler(
                                name="your-project-schedulers",
				change_filter=util.ChangeFilter(branch=None),
                                builderNames=["yourProject"],
				properties = {'owner': 'admin'}
                                )

c['schedulers'] = [hourlyscheduler]

checkout = steps.SVN(repourl='https://svn.host/svn/yourProject/trunk',
                        mode='full',
                        method='fresh',
                        username="user",
                        password="password",
                        haltOnFailure=True)

	
projectHost_build = util.BuildFactory()  


cleanProject = steps.ShellCommand(name="Clean",
                 command=["buildbot/worker_linux/pyinstaller_project", "clean"]
                                )
buildProject = steps.ShellCommand(name="Build",
                 command=["buildbot/worker_linux/pyinstaller_project", "build"]
                                )
doxyProject = steps.ShellCommand(name="Update Docs",
                                command=["buildbot/worker_linux/gendoc", []]
                                )
testProject = steps.ShellCommand(name="Tests",
                                command=["python","tests/utest.py"],
                                env={'PYTHONPATH': '.'}
                                )

projectHost_build.addStep(checkout)
projectHost_build.addStep(cleanProject)
projectHost_build.addStep(buildProject)
projectHost_build.addStep(doxyProject)
projectHost_build.addStep(testProject)


c['builders'] = [
        util.BuilderConfig(name="yourProject", workername='yourWorkerName', factory=projectHost_build)
]


template_html=u'''
<h4>Статус построенного релиза: {{ summary }}</h4>
<p>Используемый сервис для постраения: {{ workername }}</p>
<p>Проект: {{ projects }}</p>
<p>Для того что бы посмотреть интерфейс управления пройдите по ссылке: {{ buildbot_url }}</p>
<p>Для того что бы посмотреть результат сборки пройдите по ссылке: {{ build_url }}</p>
<p>Используя WinSCP можно подключиться к серверу c ip:xxx.xx.xxx.xx. Войдя под habr/password, забрать собранный executable файл с директории ~/worker/yourProject/build/dist.</p>
<p><b>Построение было произведено через Buildbot</b></p>
'''

sendMessageToAll = reporters.MailNotifier(fromaddr="[email protected]",
					sendToInterestedUsers=True,
					lookup="your.domain",
					relayhost="smtp.your.domain",
					smtpPort=1025,
					mode="warnings",
					extraRecipients=['[email protected]'],
              messageFormatter=reporters.MessageFormatter(
						template=template_html,
						template_type='html',
						wantProperties=True, 
                                                wantSteps=True)
					)
c['services'] = [sendMessageToAll]

c['title'] = "The process of bulding"
c['titleURL'] = "http://project.host:80/"

c['buildbotURL'] = "http://project.host"

c['www'] = dict(port=80,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}))


c['db'] = {
    'db_url' : "sqlite:///state.sqlite"
}

پہلے آپ کی ضرورت ہے۔ بنائیں بلڈ ماسٹر-a اور کارکن-a پھر اس فائل کو پیسٹ کریں۔ master.cfg в /home/habr/master.

اگلا مرحلہ سروس شروع کرنا ہے۔ بلڈ ماسٹراے


sudo buildbot start /home/habr/master

پھر سروس شروع کریں۔ کارکن-a


buildbot-worker start /home/habr/worker

تیار! ابھی بلڈ بوٹ تبدیلیوں کو ٹریک کرے گا اور ٹرگر کرے گا۔ وعدہ کرنا-y میں svnمندرجہ بالا فن تعمیر کے ساتھ کسی پروجیکٹ کی تعمیر اور جانچ کے مراحل کو انجام دینا۔

ذیل میں میں مندرجہ بالا کی کچھ خصوصیات بیان کروں گا۔ master.cfg

6.1 اپنے master.cfg کے راستے پر


میرے لکھتے وقت master.cfg بہت سی غلطیاں ہو جائیں گی، اس لیے لاگ فائل کو پڑھنا پڑے گا۔ کے طور پر محفوظ کیا جاتا ہے۔ بلڈ ماسٹر-ec مطلق راستہ /home/habr/master/twistd.log، اور طرف کارکن-ایک مطلق راستہ کے ساتھ /home/habr/worker/twistd.log. جیسا کہ آپ غلطی کو پڑھتے ہیں اور اسے ٹھیک کرتے ہیں، آپ کو سروس دوبارہ شروع کرنے کی ضرورت ہوگی۔ بلڈ ماسٹر-a یہاں یہ ہے کہ یہ کیسے ہوتا ہے:


sudo buildbot stop /home/habr/master
sudo buildbot upgrade-master /home/habr/master
sudo buildbot start /home/habr/master

6.2 svn کے ساتھ کام کرنا


svn_poller = changes.SVNPoller(repourl="https://svn.host/svn/yourProject/trunk",
                               svnuser="user",
                               svnpasswd="password",
                               pollinterval=60,
                               split_file=util.svn.split_file_alwaystrunk
                        )

c['change_source'] =  svn_poller

hourlyscheduler = schedulers.SingleBranchScheduler(
                            name="your-project-schedulers",
                            change_filter=util.ChangeFilter(branch=None),
                            builderNames=["yourProject"],
                            properties = {'owner': 'admin'}
                        )

c['schedulers'] = [hourlyscheduler]

checkout = steps.SVN(repourl='https://svn.host/svn/yourProject/trunk',
                     mode='full',
                     method='fresh',
                     username="user",
                     password="password",
                     haltOnFailure=True)

سب سے پہلے، آئیے پر ایک نظر ڈالتے ہیں۔ svn_poller. یہ اب بھی وہی انٹرفیس ہے، جو ایک منٹ میں ایک بار ریپوزٹری کو باقاعدگی سے پولنگ کرتا ہے۔ اس معاملے میں svn_poller صرف برانچ تک رسائی حاصل کرتا ہے۔ ٹرنک. پراسرار پیرامیٹر split_file=util.svn.split_file_alwaystrunk اصول طے کرتا ہے: فولڈر کے ڈھانچے کو کیسے توڑا جائے۔ svn شاخوں پر. وہ انہیں رشتہ دار راستے بھی پیش کرتا ہے۔ اپنی باری میں split_file_alwaystruunk یہ کہہ کر عمل کو آسان بناتا ہے کہ صرف ذخیرے پر مشتمل ہے۔ ٹرنک.

В شیڈولرز اشارہ کیا فلٹر کو تبدیل کریں۔جو دیکھتا ہے کوئی بھی نہیں اور اس کے ساتھ ایک شاخ کو جوڑتا ہے۔ ٹرنک کے ذریعے دی گئی ایسوسی ایشن کے مطابق split_file_alwaystruunk. میں تبدیلیوں کا جواب دینا ٹرنک، لانچ کرتا ہے۔ بلڈر نام کے ساتھ آپ کا پروجیکٹ.

خصوصیات یہاں اس کی ضرورت ہے تاکہ منتظم کو عمل کے مالک کے طور پر تعمیر اور جانچ کے نتائج کی میلنگ فہرستیں موصول ہوں۔

مرحلہ تعمیر-a چیک آؤٹ ریپوزٹری کے مقامی ورژن میں موجود کسی بھی فائل کو مکمل طور پر حذف کرنے کے قابل کارکن-اے اور پھر مکمل کریں۔ svn اپ ڈیٹ. موڈ کو پیرامیٹر کے ذریعے ترتیب دیا گیا ہے۔ موڈ = مکمل, طریقہ = تازہ... پیرامیٹر haltOnTailure کہتا ہے کہ اگر svn اپ ڈیٹ غلطی کے ساتھ عمل میں لایا جائے گا، پھر عمارت اور جانچ کے پورے عمل کو معطل کر دیا جائے، کیونکہ مزید کارروائیوں کا کوئی مطلب نہیں ہے۔

6.3 آپ کو خط: رپورٹرز اعلان کرنے کے مجاز ہیں۔


نامہ نگاروں ای میل کے ذریعے اطلاعات بھیجنے کی خدمت ہے۔


template_html=u'''
<h4>Статус построенного релиза: {{ summary }}</h4>
<p>Используемый сервис для постраения: {{ workername }}</p>
<p>Проект: {{ projects }}</p>
<p>Для того что бы посмотреть интерфейс управления пройдите по ссылке: {{ buildbot_url }}</p>
<p>Для того что бы посмотреть результат сборки пройдите по ссылке: {{ build_url }}</p>
<p>Используя WinSCP можно подключиться к серверу c ip:xxx.xx.xxx.xx. Войдя под habr/password, забрать собранный executable файл с директории ~/worker/yourProject/build/dist.</p>
<p><b>Построение было произведено через Buildbot</b></p>
'''
                        
sendMessageToAll = reporters.MailNotifier(fromaddr="[email protected]",
                                          sendToInterestedUsers=True,
                                          lookup="your.domain",
                                          relayhost="smtp.your.domain",
                                          smtpPort=1025,
                                          mode="warnings",
                                          extraRecipients=['[email protected]'],
                                    messageFormatter=reporters.MessageFormatter(
                                                    template=template_html,
                                                    template_type='html',
                                                    wantProperties=True, 
                                                    wantSteps=True)
                                        )
c['services'] = [sendMessageToAll]

وہ پیغامات بھیج سکتا ہے۔ مختلف طریقے.

میل نوٹیفائر اطلاعات بھیجنے کے لیے ای میل کا استعمال کرتا ہے۔

template_html نیوز لیٹر کے لیے ٹیکسٹ ٹیمپلیٹ سیٹ کرتا ہے۔ HTML مارک اپ بنانے کے لیے استعمال ہوتا ہے۔ یہ انجن کی طرف سے نظر ثانی کی جاتی ہے jinja2 (کے ساتھ موازنہ کیا جا سکتا ہے ججنگو). بلڈ بوٹ متغیرات کا ایک سیٹ ہے جس کی قدریں پیغام کے متن کو تیار کرنے کے عمل کے دوران ٹیمپلیٹ میں بدل دی جاتی ہیں۔ یہ متغیرات {{ ڈبل گھوبگھرالی منحنی خطوط وحدانی }} میں بند ہیں۔ مثال کے طور پر، سمری مکمل ہونے والی کارروائیوں کی حیثیت ظاہر کرتا ہے، یعنی کامیابی یا ناکامی۔ اے منصوبوں آؤٹ پٹ کرے گا آپ کا پروجیکٹ. لہذا، کنٹرول کمانڈز کا استعمال کرتے ہوئے jinja2متغیرات بلڈ بوٹ-a اور python سٹرنگ فارمیٹنگ ٹولز، آپ کافی معلوماتی پیغام بنا سکتے ہیں۔

میل نوٹیفائر مندرجہ ذیل دلائل پر مشتمل ہے۔

سے اضافی - وہ پتہ جہاں سے ہر کوئی نیوز لیٹر وصول کرے گا۔

دلچسپی رکھنے والے صارفین کو بھیجیں۔=True بنانے والے مالک اور صارف کو پیغام بھیجتا ہے۔ وعدہ کرنا.

تلاش - ایک لاحقہ جسے نیوز لیٹر وصول کرنے والے صارفین کے ناموں میں شامل کیا جانا چاہیے۔ تو منتظم صارف کو پتہ پر نیوز لیٹر کیسے ملے گا۔ [ای میل محفوظ].

relayhost میزبان کا نام بتاتا ہے جس پر سرور کھولا جاتا ہے۔ SMTP، ایک smptPort پورٹ نمبر بتاتا ہے جو سنتا ہے۔ SMTP سرور

موڈ="انتباہ" کہتے ہیں کہ میلنگ صرف اس صورت میں کی جانی چاہیے جب کم از کم ایک قدم ہو۔ تعمیر-a، جو اسٹیٹس کی ناکامی یا وارننگ کے ساتھ ختم ہوا۔ کامیابی کی صورت میں نیوز لیٹر بھیجنے کی ضرورت نہیں ہے۔

اضافی وصول کنندگان مالک اور اس شخص کے علاوہ جن کو میل بھیجی جانی چاہیے ان کی فہرست پر مشتمل ہے وعدہ کرنا.

پیغام فارمیٹر ایک ایسی چیز ہے جو پیغام کی شکل، اس کی ٹیمپلیٹ، اور متغیرات کے سیٹ کی وضاحت کرتی ہے jinja2. اختیارات جیسے wantProperties=True и wantSteps=True دستیاب متغیرات کے اس سیٹ کی وضاحت کریں۔

کے ساتھ['services']=[sendMessageToAll] خدمات کی ایک فہرست فراہم کرتا ہے، جن میں ہماری ہوں گی۔ رپورٹر.

ہم نے کر لیا! مبارک ہو

ہم نے اپنی ترتیب بنائی اور اس کی فعالیت کو دیکھا جس کے قابل ہے۔ بلڈ بوٹ. میرے خیال میں یہ سمجھنے کے لیے کافی ہے کہ آیا آپ کے پروجیکٹ کو بنانے کے لیے اس ٹول کی ضرورت ہے۔ کیا آپ اس میں دلچسپی رکھتے ہیں؟ کیا یہ آپ کے لیے مفید ہو گا؟ کیا وہ کام کرنے میں آرام دہ ہے؟ پھر میں یہ مضمون بیکار نہیں لکھ رہا ہوں۔

اورمزید. میں پیشہ ورانہ کمیونٹی کو استعمال کرنا چاہوں گا۔ بلڈ بوٹ, وسیع تر ہو گیا، کتابچے کا ترجمہ کیا گیا، اور اس سے بھی زیادہ مثالیں تھیں۔

آپ سب کی توجہ کا شکریہ۔ اچھی قسمت.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں