د BuildBot په کارولو سره د دوامداره ادغام پلي کولو یوه بیلګه

د BuildBot په کارولو سره د دوامداره ادغام پلي کولو یوه بیلګه
(د انځور لخوا کمپيوټريزر له Pixabay)

سلام!

زما نوم دي Evgeniy Cherkin، زه د کان کیندنې په شرکت کې د پراختیایی ټیم یو پروګرامر یم پولیتال.

کله چې کومه لویه پروژه پیل کړئ، تاسو فکر کوئ: "د دې ساتلو لپاره کوم سافټویر کارول غوره دي؟" د آی ټي پروژه د راتلونکي نسخې خپرولو دمخه د یو شمیر مرحلو څخه تیریږي. دا ښه ده کله چې د دې مرحلو سلسله اتومات وي. د آی ټي پروژې نوې نسخه خوشې کولو اتومات پروسه پخپله ویل کیږي دوامداره یوځای کول. BuildBot د دې پروسې په پلي کولو کې زموږ لپاره یو ښه معاون ثابت شو.

پدې مقاله کې ما پریکړه وکړه چې د امکاناتو یوه عمومي کتنه وړاندې کړم BuildBot. دا سافټویر څه شی دی؟ څنګه د هغه سره اړیکه ونیسئ او څنګه د هغه سره عادي اغیزمنه اړیکه جوړه کړئ؟ تاسو کولی شئ زموږ تجربه پخپله په خپل ماشین کې د خپلې پروژې جوړولو او ازموینې لپاره د کاري خدمت رامینځته کولو سره پلي کړئ.

منځپانګې

منځپانګې

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؟

مخکې په حبر کې ما د تطبیق په اړه مقالې ولیدلې دوامداره یوځای کول کارول BuildBot. د بیلګې په توګه دا یو ما دا خورا معلوماتي وموندل. یو بل مثال هم شته - ساده. دا مقالې موسمي کیدی شي د لارښود څخه بیلګهاو دا له هغې وروسته، په انګلیسي کې. کوپ یو ښه پیل ټکی جوړوي. د دې مقالو لوستلو وروسته ، تاسو شاید سمدلاسه یو څه وغواړئ BuildBot کول

درېدل! ایا چا واقعیا دا په خپلو پروژو کې کارولې؟ دا معلومه شوه چې هو ډیری په خپلو دندو کې یې پلي کړي. موندل کیدی شي مثالونه کارول BuildBot او د ګوګل کوډ آرشیفونو کې.

نو د خلکو منطق څه دی Buildbot؟ په هرصورت، نورې وسیلې شتون لري: CruiseControl и جینکنز. زه به په دې ډول ځواب ورکړم. د ډیری کارونو لپاره جینکنز او حقیقت به کافي وي. په خپل وار، BuildBot - ډیر تطابق، پداسې حال کې چې ستونزې په ساده ډول حل کیږي جینکنز. انتخاب ستاسو دی. مګر له هغه ځایه چې موږ د پرمختیایي هدف پروژې لپاره د یوې وسیلې په لټه کې یو، ولې داسې یو غوره نه کړئ چې اجازه ورکړي، د ساده ګامونو څخه پیل، د جوړونې سیسټم ترلاسه کولو لپاره چې متقابل عمل او یو ځانګړی انٹرفیس ولري.

د هغو کسانو لپاره چې هدف یې پروژه په python کې لیکل شوې ، پوښتنه راپورته کیږي: "ولې د ادغام سیسټم نه غوره کوئ چې په پروژه کې کارول شوي ژبې شرایطو کې روښانه انٹرفیس ولري؟" او اوس دا وخت دی چې ګټې وړاندې کړئ BuildBot.

نو، زموږ "د وسیلې کوارټیټ". د ځان لپاره، ما څلور ځانګړتیاوې په ګوته کړې BuildBot:

  1. دا د GPL جواز لاندې د خلاصې سرچینې چوکاټ دی
  2. دا د python کارول د ترتیب کولو وسیلې په توګه او د اړینو کړنو توضیح کول دي
  3. دا یو فرصت دی چې د ماشین څخه ځواب ترلاسه کړي په کوم کې چې مجلس ترسره کیږي
  4. دا په نهایت کې د کوربه لپاره لږترلږه اړتیاوې دي. ځای په ځای کول پیتون او ټیسټ ته اړتیا لري، او د مجازی ماشین او جاوا ماشین ته اړتیا نلري.

2. مفهوم د BuildMaster لخوا رهبري کیږي

د BuildBot په کارولو سره د دوامداره ادغام پلي کولو یوه بیلګه

د دندې د توزیع جوړښت مرکزي دی BuildMaster. دا یو خدمت دی چې:

  • تعقیبوي د پروژې د سرچینې ونې کې بدلونونه
  • لیږي امرونه چې د پروژې د جوړولو او ازموینې لپاره باید د کارګر خدمت لخوا اجرا شي
  • خبر ورکوي کاروونکي د ترسره شوي اقداماتو پایلو په اړه

BuildMaster د فایل له لارې تنظیم شوی master.cfg. دا فایل په روټ کې دی BuildMaster. وروسته به زه وښیم چې دا ریښه څنګه رامینځته شوې. فایل پخپله master.cfg د python سکریپټ لري چې زنګونه کاروي BuildBot.

بل تر ټولو مهم شی BuildBot نوم لري کارګر. دا خدمت په بل کوربه کې د مختلف OS سره پیل کیدی شي ، یا شاید په یو ځای کې BuildMaster. دا کولی شي په ځانګړي ډول چمتو شوي مجازی چاپیریال کې د خپلو کڅوړو او متغیرونو سره شتون ولري. دا مجازی چاپیریال د python اسانتیاوو په کارولو سره چمتو کیدی شي لکه virtualenv, venv.

BuildMaster ټولو ته حکمونه خپروي کارګر-y، او هغه، په بدل کې، دوی پوره کوي. دا دی، دا معلومه شوه چې د پروژې د جوړولو او ازموینې پروسه روانه ده کارګر- د وینډوز چلول او په بل کارګر کې چې لینکس چلوي.

بشپړ ی وګوره د پروژې سرچینې کوډونه په هر یو کې واقع کیږي کارګر-ای.

3. نصب کول

نو، راځئ چې لاړ شو. زه به د کوربه په توګه اوبنټو 18.04 وکاروم. زه به یې یو ځای کړم BuildMaster- یو او یو کارګر-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

بل ګام د نصبولو لپاره دی ټویټ کړی и BuildBot، او همدارنګه بسته بندي چې تاسو ته اجازه درکوي اضافي فعالیت وکاروئ BuildBot-د.


/*Все что под 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. لومړی ګامونه

د جوړولو وخت BuildMaster. دا به زموږ په فولډر کې وي /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، کوم چې دې لارښود ته لیکل منع کوي ، مګر د لانچ حقونه به ساتي. او دا ټول هغه څه دي چې موږ ورته اړتیا لرو.

BuildMaster и کارګر یو له بل سره اړیکه ټینګه کړئ. دا پیښیږي چې دا ماتیږي او کارګر د ځواب لپاره یو څه وخت انتظار وکړئ BuildMaster-ا. که ځواب نه وي، پیوستون بیا پیل کیږي. کلید -- ساتل = 60 یوازې اړتیا ده چې وروسته وخت په ګوته کړي سره نښلوي ریبوټ

5. ترتیب کول. ګام په ګام ترکیب

شکل بندي BuildMaster د ماشین په اړخ کې ترسره کیږي چیرې چې موږ قومانده اجرا کړې جوړونکی. زموږ په قضیه کې، دا یو لارښود دی /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["keyFromDist"] سره د تعامل لپاره ثابت عناصر دي BuildMaster. د هر کلی لپاره، اړونده اعتراض د ارزښت په توګه بدل شوی.

د 5.2 کارمندان

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

دا ځل موږ اشاره کوو BuildMaster-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 به د ذخیره کولو ځایی نسخه ذخیره کړي.

څانګه په ذخیره کې یوه ځانګړې څانګه لري چې باید تعقیب شي.

pollInterval وروسته د ثانیو شمیر لري BuildMaster د بدلونونو لپاره ذخیره به رایه ورکړي.

د پروژې ذخیره کې د بدلونونو تعقیب لپاره ډیری میتودونه شتون لري.

ترټولو ساده طریقه ده رایه ورکول، چې دا معنی لري BuildMaster په دوره توګه سرور د ذخیره کولو سره رایه ورکوي. که ژمن کول بیا په ذخیره کې بدلونونه منعکس کړل BuildMaster د یو څه ځنډ سره به یو داخلي څیز رامینځته کړي د بدلون او د پیښې سمبالونکي ته یې واستوئ مهالویشونکی، کوم چې به د پروژې جوړولو او ازموینې لپاره مرحلې پیل کړي کارګر-ای. د دې ګامونو په منځ کې به اشاره وشي تازه ذخیره په دقیق ډول کارګردا به د ذخیره کولو ځایی کاپي رامینځته کړي. د دې پروسې جزئیات به په راتلونکو دوو برخو کې لاندې پوښل شي. (5.4 и 5.5).

په ذخیره کې د بدلونونو تعقیب کولو حتی خورا په زړه پوری میتود دا دی چې مستقیم له سرور څخه پیغامونه واستول شي چې دا کوربه کوي. BuildMaster- د پروژې سرچینې کوډونو بدلولو په اړه. په دې حالت کې، هرڅومره ژر چې پراختیا کونکي جوړ کړي ژمن کول، د پروژې ذخیره کولو سرور به یو پیغام واستوي BuildMaster-y. او هغه به په بدل کې د یو څیز په جوړولو سره مداخله وکړي PBCchangeSource. بیا، دا اعتراض ته لیږدول کیږي مهالویشونکی، کوم چې د پروژې جوړولو او ازموینې لپاره مرحلې فعالوي. د دې میتود یوه مهمه برخه کار کول دي چنګک- په ذخیره کې د سرور سکریپټونه. په سکریپټ کې چنګک-a، کله چې د عملونو پروسس کولو مسولیت لري ژمن کول-e، تاسو اړتیا لرئ یوټیلیټ ته زنګ ووهئ لیږل او د شبکې پته مشخص کړئ BuildMaster-ا. تاسو اړتیا لرئ د شبکې پورټ مشخص کړئ چې اوریدل به یې وکړي PBCchangeSource. PBCchangeSourceپه لاره کې، برخه ده BuildMaster-ا. دا طریقه اجازه ته اړتیا لري اداری- 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 په کارولو سره د دوامداره ادغام پلي کولو یوه بیلګه

هغه بدلونونه چې ثبت شوي دي بدلون_سرچینه، د کار په بهیر کې بدل شوی BuildBot- اعتراض کول د بدلون او اوس هر شیډولر د دوی پر بنسټ، دا د پروژې جوړولو پروسې پیل کولو لپاره غوښتنې جوړوي. په هرصورت، دا هم ټاکي کله چې دا غوښتنې نور کتار ته لیږدول کیږي. یو څیز جوړونکی د غوښتنو کتار ذخیره کوي او د اوسني مجلس حالت په جلا توګه تعقیبوي کارګر-ای. جوړونکی شتون لري BuildMaster-e او آن کارګر-ای. هغه سره لیږي BuildMaster- یو پر کارګر- او دمخه مشخص د جوړولو - د ګامونو لړۍ چې باید تعقیب شي.
موږ دا په اوسني مثال کې ګورو مهالویشونه 2 ټوټې جوړیږي. سربیره پردې، هر یو خپل ډول لري.

د واحد برانچ مهال ویش - په مهالویش کې یو له خورا مشهور ټولګیو څخه. دا یوه څانګه ګوري او په هغې کې د ثبت شوي بدلون لخوا رامینځته کیږي. کله چې هغه بدلونونه وګوري، هغه کولی شي د جوړونې غوښتنې لیږلو کې ځنډ وکړي (په ځانګړي پیرامیټر کې ټاکل شوې مودې لپاره وځنډول شي treeStableTimer) AT نوم د مهالویش نوم ټاکي چې په کې به ښودل شي BuildBot- ویب انٹرفیس. IN فلټر بدل کړئ یو فلټر ترتیب شوی، وروسته له هغه چې په څانګه کې کوم بدلونونه د جوړولو لپاره د غوښتنې لیږلو مهال ویش هڅوي. IN د جوړونکي نومونه نوم ښودل شوی جوړونکی-a، کوم چې موږ به لږ وروسته تنظیم کړو. زموږ په قضیه کې نوم به د پروژې نوم سره ورته وي: ستاسو پروژه.

د ځواک مهال ویش یو ډیر ساده شی. دا ډول مهالویش د موږک کلیک له لارې رامینځته کیږي BuildBot- ویب انٹرفیس. پیرامیټرونه ورته جوهر لري لکه څنګه چې په کې دي د واحد برانچ مهال ویش.

PS نمبر 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": "."}))

periodicBuildTimer د دې دورې وخت په ثانیو کې مشخص کوي.

د جوړولو فابریکه یو ځانګړی رامینځته کوي د جوړولو، کوم چې بیا جوړونکی ته استوي کارګر. د د جوړولو فابریکه هغه ګامونه په ګوته کوي چې باید تعقیب شي کارګر-y. مرحلې د میتود په زنګ وهلو سره اضافه کیږي اضافه ګام

په دې مثال کې لومړی اضافه ګام دی git پاک -d -f -f -xبیا د. دا کړنې په پیرامیټر کې شاملې دي ميتود، کوم چې په واضح ډول ندي ویل شوي مګر د ډیفالټ ارزښت معنی لري تازه. پیرامیټر حالت = 'زیاتوالی' دا په ګوته کوي چې فایلونه د لارښود څخه دي چیرې چې چیچاؤټ, پداسې حال کې چې د ذخیره کولو څخه ورک وي، ناڅاپه پاتې شي.

دوهم اضافه مرحله د سکریپټ غږول دي د محاکمې د پیرامیټر سره سلام په خوا کارګر- د لارښود څخه /home/habr/worker/yourProject/build د چاپیریال متغیر سره PATHONPATH=... په دې توګه، تاسو کولی شئ خپل سکریپټونه ولیکئ او په اړخ کې یې اجرا کړئ کارګر- هر ګام util.ShellCommand. دا سکریپټونه مستقیم ذخیره کې ځای په ځای کیدی شي. بیا په چیچاؤټ- دوی به په کې راشي /home/habr/worker/yourProject/build. په هرصورت، بیا دوه "خو" شتون لري:

  1. کارګر باید د کیلي سره جوړ شي --ماسک تر څو وروسته د اعدام حقونه بند نه کړي بشپړ ی وګوره-د.
  2. په ګيټ فشارد دې سکریپټونو څخه تاسو اړتیا لرئ ملکیت مشخص کړئ د اجرا وړنو چې وروسته چیچاؤټ-e د Git سکریپټ اجرا کولو حق له لاسه نه دی ورکړی.

5.6 جوړونکي


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

د څه په اړه جوړونکی ویل شوي وو دلته. اوس زه به تاسو ته په تفصیل سره ووایم چې څنګه یې جوړ کړئ. BuilderConfig جوړونکی دی جوړونکی. داسې ډیزاینران په کې ج['جوړونکي'] تاسو کولی شئ څو مشخص کړئ، ځکه چې دا د شیانو یوه پاڼه ده جوړونکی ډول اوس راځئ چې د مثال څخه بیا ولیکئ BuildBot، دا زموږ دندې ته نږدې کول.


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

اوس زه به تاسو ته د پیرامیټونو په اړه ووایم BuilderConfig.

نوم نوم مشخص کوي جوړونکی-a. دلته موږ نومولی شو ستاسو پروژه... دا پدې مانا ده چې پر کارګر- دا لاره به پیدا شي /home/habr/worker/yourProject/build. شیډولر لټون کول لپاره د جوړونکی یوازې په دې نوم.

د کارګر نومونه پاڼه لري کارګر-s. هر یو باید اضافه شي ج['کارګران'].

فابريکه - مشخص د جوړولو، چې ورسره تړاو لري جوړونکی. هغه به اعتراض ولېږدوي د جوړولو په کارګر په دې کې شامل ټول مرحلې بشپړولو لپاره د جوړولو-د.

6. ستاسو د خپل ترتیب بیلګه

دلته د پروژې جوړښت مثال دی چې زه یې د پلي کولو وړاندیز کوم BuildBot
.

موږ به د نسخې کنټرول سیسټم په توګه وکاروو svn. ذخیره پخپله به په یو ډول بادل کې موقعیت ولري. دلته د دې بادل پته ده svn.host/svn/yourProject/trunk. په ورېځ کې لاندې svn د حساب کارن نوم شتون لري: د کارونکي عکسپاسورډ: رمز. هغه سکریپټونه چې د ګامونو استازیتوب کوي د جوړولو-a به په څانګه کې وي svnپه جلا فولډر کې buildbot/worker_linux. دا سکریپټونه د خوندي شوي ملکیت سره په ذخیره کې موقعیت لري اجرا کیدونکی.

BuildMaster и کارګر په ورته کوربه چلول project.host .BuildMaster خپل فایلونه په فولډر کې ذخیره کوي /home/habr/master. کارګر دا په لاندې لار کې ساتل کیږي /home/habr/worker. د اړیکو پروسه BuildMaster-a او کارګر-a د پروتوکول سره سم د 4000 بندر له لارې ترسره کیږي BuildBot- یو، دا دی 'pb' پروتوکول

د هدف پروژه په بشپړ ډول په Python کې لیکل شوې ده. دنده دا ده چې د دې بدلونونه تعقیب کړي، د اجرا وړ فایل رامینځته کړي، اسناد تولید کړي، او ازموینې ترسره کړي. د ناکامۍ په صورت کې، ټول پراختیا کونکي باید د بریښنالیک له لارې یو پیغام واستوي چې دا یو ناکام عمل دی.

د ویب نندارې BuildBot موږ به د پورټ 80 سره وصل شو project.host. دا اړینه نده چې اپچ نصب کړئ. د کتابتون د یوې برخې په توګه (Twisted) دلته دمخه یو ویب سرور شتون لري، BuildBot کاروي.

د داخلي معلوماتو ذخیره کولو لپاره BuildBot использовать использовать sqlite.

د بریښنالیک لپاره کوربه ته اړتیا ده smtp.your.domain - دا د بریښنالیک څخه لیکونو لیږلو ته اجازه ورکوي [ایمیل خوندي شوی] پرته له تصدیق. په کوربه کې هم 'smtp دقیقې په 1025 پوسټ کې اوریدل کیږي.

په دې پروسه کې دوه کسان شامل دي: اداری и د کارونکي عکس. admin اداره کوي BuildBot. کارن هغه کس دی چې ژمن وي ژمن کول-s.

د اجرا وړ فایل له لارې رامینځته کیږي pyinstaller. اسناد له لارې تولیدیږي اکسیجن.

د دې معمارۍ لپاره ما دا لیکلي: 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"
}

لومړی تاسو اړتیا لرئ جوړول BuildMaster-a او کارګر-a. بیا دا فایل پیسټ کړئ master.cfg в /home/habr/master.

بل ګام د خدمت پیل کول دي BuildMasteraa


sudo buildbot start /home/habr/master

بیا خدمت پیل کړئ کارګر-a


buildbot-worker start /home/habr/worker

چمتو! اوس Buildbot بدلونونه به تعقیب او محرک کړي ژمن کول-y in svnد پورته جوړښت سره د پروژې د جوړولو او ازموینې مرحلې ترسره کول.

لاندې به زه د پورتني ځینې ځانګړتیاوې بیان کړم master.cfg.

6.1 ستاسو master.cfg ته په لاره کې


زما د لیکلو پرمهال master.cfg ډیری غلطۍ به رامینځته شي، نو د لاګ فایل لوستل به اړین وي. په توګه ساتل کیږي BuildMaster- ec مطلق لاره /home/habr/master/twistd.log، او په څنګ کې کارګر- د مطلقې لارې سره /home/habr/worker/twistd.log. لکه څنګه چې تاسو تېروتنه ولولئ او حل یې کړئ، تاسو به اړتیا ولرئ خدمت بیا پیل کړئ BuildMaster-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_alwaystrunk پروسه د دې په ویلو سره ساده کوي چې ذخیره یوازې لري ټکی.

В مهالویش اشاره وکړه فلټر بدل کړئڅوک ګوري هیڅ یو او یوه څانګه یې ورسره شریکه کړه ټکی د یوې ورکړل شوې اتحادیې له لارې split_file_alwaystrunk. بدلونونو ته ځواب ویل ټکی، پیلوي جوړونکی د نوم سره ستاسو پروژه.

ملکیتونو دلته دا اړینه ده چې مدیر د پروسې د مالک په توګه د جوړونې او ازموینې پایلو لیست ترلاسه کړي.

مرحله د جوړولو-a بشپړ ی وګوره د ذخیره کولو ځایی نسخه کې موقعیت لرونکي هر ډول فایلونو په بشپړ ډول حذف کولو وړ کارګر-ا. او بیا بشپړ کار وکړئ تازه معلومات. حالت د پیرامیټر له لارې تنظیم شوی حالت = بشپړ, میتود = تازه. پیرامیټر haltOnTailure وايي که تازه معلومات د یوې تېروتنې سره به اجرا شي، بیا د جوړولو او ازموینې ټوله پروسه باید وځنډول شي، ځکه چې نور عملونه معنی نلري.

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]

هغه کولی شي پیغامونه واستوي مختلفې لارې.

میل نوټیفایر د خبرتیاو لیږلو لپاره بریښنالیک کاروي.

کينډۍ_html د خبر پاڼي لپاره د متن نمونه ټاکي. HTML د مارک اپ جوړولو لپاره کارول کیږي. دا د انجن لخوا تعدیل شوی jinja2 (سره پرتله کیدی شي جانجو). BuildBot د متغیرونو مجموعه لري چې ارزښتونه یې د پیغام متن رامینځته کولو پروسې په جریان کې په ټیمپلیټ کې ځای په ځای شوي. دا متغیرات په {{ ډبل کرلي بریکس }} کې تړل شوي دي. د مثال په ډول، لنډیز د بشپړ شوي عملیاتو حالت څرګندوي، دا دی، بریالیتوب یا ناکامي. الف د پروژو تولید به وکړي ستاسو پروژه. نو، د کنټرول کمانډونو په کارولو سره jinja2, متغیرات BuildBot-a او python string formatting tools، تاسو کولی شئ یو خورا معلوماتي پیغام جوړ کړئ.

میل نوټیفایر لاندې دلیلونه لري.

له اضافه څخه - هغه پته چې هرڅوک به خبر پاڼه ترلاسه کړي.

لیږونکي ته لیږونکي= ریښتیا مالک او کارونکي ته پیغام لیږي چې جوړ کړی ژمن کول.

لټون - یو ضمیمه چې باید د خبر لیک ترلاسه کونکو کاروونکو نومونو کې اضافه شي. نو اداری څنګه به کاروونکي په پته کې خبرپاڼه ترلاسه کړي [ایمیل خوندي شوی].

relayhost د کوربه نوم مشخص کوي په کوم کې چې سرور خلاص شوی smtp، یو smptPort د پورټ شمیره مشخص کوي چې اوریدل کیږي smtp سرور

حالت = خبرداری" وايي چې بریښنالیک باید یوازې هغه وخت ترسره شي چې لږترلږه یو ګام وي د جوړولو-a، کوم چې د وضعیت ناکامۍ یا خبرتیا سره پای ته ورسید. د بریالیتوب په صورت کې، د خبر پاڼې لیږلو ته اړتیا نشته.

اضافي ترلاسه کوونکي د هغه اشخاصو لیست لري چې د مالک او هغه کس سربیره چې دا یې ترسره کړي چې بریښنالیک باید واستول شي. ژمن کول.

د پیغام بڼه یو څیز دی چې د پیغام بڼه، د هغې ټیمپلیټ، او د متغیرونو سیټ مشخص کوي jinja2. اختیارونه لکه مطلوب ملکیت = ریښتیا и wantSteps=ریښتیا د شته متغیرونو دا سیټ تعریف کړئ.

د ['خدماتو'] = [SendMessageToAll] سره د خدماتو لیست وړاندې کوي، چې زموږ په منځ کې به وي خبريال.

موږ دا وکړل! مبارک شه

موږ خپل تشکیلات جوړ کړل او هغه فعالیت مو ولیدل چې دا وړتیا لري. BuildBot. دا، زما په اند، د دې پوهیدو لپاره کافي دی چې آیا دا وسیله ستاسو د پروژې جوړولو لپاره اړینه ده. ایا تاسو د هغه سره علاقه لرئ؟ ایا دا به تاسو ته ګټور وي؟ ایا هغه د کار کولو لپاره آرام دی؟ بیا زه دا مقاله بې ځایه نه لیکم.

او نور. زه غواړم مسلکي ټولنه وکاروم BuildBot، پراخه شوه ، لارښودونه ژباړل شوي ، او حتی نور مثالونه هم شتون لري.

ستاسو د پاملرنې څخه مننه. غوره چانس.

سرچینه: www.habr.com

Add a comment