(د انځور لخوا
سلام!
زما نوم دي Evgeniy Cherkin، زه د کان کیندنې په شرکت کې د پراختیایی ټیم یو پروګرامر یم پولیتال.
کله چې کومه لویه پروژه پیل کړئ، تاسو فکر کوئ: "د دې ساتلو لپاره کوم سافټویر کارول غوره دي؟" د آی ټي پروژه د راتلونکي نسخې خپرولو دمخه د یو شمیر مرحلو څخه تیریږي. دا ښه ده کله چې د دې مرحلو سلسله اتومات وي. د آی ټي پروژې نوې نسخه خوشې کولو اتومات پروسه پخپله ویل کیږي دوامداره یوځای کول. BuildBot د دې پروسې په پلي کولو کې زموږ لپاره یو ښه معاون ثابت شو.
پدې مقاله کې ما پریکړه وکړه چې د امکاناتو یوه عمومي کتنه وړاندې کړم BuildBot. دا سافټویر څه شی دی؟ څنګه د هغه سره اړیکه ونیسئ او څنګه د هغه سره عادي اغیزمنه اړیکه جوړه کړئ؟ تاسو کولی شئ زموږ تجربه پخپله په خپل ماشین کې د خپلې پروژې جوړولو او ازموینې لپاره د کاري خدمت رامینځته کولو سره پلي کړئ.
منځپانګې
منځپانګې
1. ولې BuildBot؟
مخکې په حبر کې ما د تطبیق په اړه مقالې ولیدلې دوامداره یوځای کول کارول BuildBot. د بیلګې په توګه
درېدل! ایا چا واقعیا دا په خپلو پروژو کې کارولې؟ دا معلومه شوه چې هو
نو د خلکو منطق څه دی Buildbot؟ په هرصورت، نورې وسیلې شتون لري: CruiseControl и جینکنز. زه به په دې ډول ځواب ورکړم. د ډیری کارونو لپاره جینکنز او حقیقت به کافي وي. په خپل وار، BuildBot - ډیر تطابق، پداسې حال کې چې ستونزې په ساده ډول حل کیږي جینکنز. انتخاب ستاسو دی. مګر له هغه ځایه چې موږ د پرمختیایي هدف پروژې لپاره د یوې وسیلې په لټه کې یو، ولې داسې یو غوره نه کړئ چې اجازه ورکړي، د ساده ګامونو څخه پیل، د جوړونې سیسټم ترلاسه کولو لپاره چې متقابل عمل او یو ځانګړی انٹرفیس ولري.
د هغو کسانو لپاره چې هدف یې پروژه په python کې لیکل شوې ، پوښتنه راپورته کیږي: "ولې د ادغام سیسټم نه غوره کوئ چې په پروژه کې کارول شوي ژبې شرایطو کې روښانه انٹرفیس ولري؟" او اوس دا وخت دی چې ګټې وړاندې کړئ BuildBot.
نو، زموږ "د وسیلې کوارټیټ". د ځان لپاره، ما څلور ځانګړتیاوې په ګوته کړې BuildBot:
- دا د GPL جواز لاندې د خلاصې سرچینې چوکاټ دی
- دا د python کارول د ترتیب کولو وسیلې په توګه او د اړینو کړنو توضیح کول دي
- دا یو فرصت دی چې د ماشین څخه ځواب ترلاسه کړي په کوم کې چې مجلس ترسره کیږي
- دا په نهایت کې د کوربه لپاره لږترلږه اړتیاوې دي. ځای په ځای کول پیتون او ټیسټ ته اړتیا لري، او د مجازی ماشین او جاوا ماشین ته اړتیا نلري.
2. مفهوم د BuildMaster لخوا رهبري کیږي
د دندې د توزیع جوړښت مرکزي دی 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 # Собственно сдесь и создаем
mkdir worker
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker localhost:4000 yourWorkerName password
کله چې تاسو منډې وهئ کارګر، نو بیا به په ډیفالټ کې رامینځته شي /home/habr/worker د پروژې نوم سره فولډر، کوم چې په کې مشخص شوی master.cfg. او په فولډر کې د پروژې نوم سره دا به یو لارښود جوړ کړي د جوړولو، او دې کار ته به دوام ورکړي بشپړ ی وګوره. لپاره کاري لارښود کارګر- او دا به یو لارښود شي /home/habr/yourProject/build.
"طلایی کیلي
او اوس هغه څه چې ما د دې لپاره پخوانی پراګراف لیکلی: یو سکریپټ چې ماسټر څخه به غوښتنه وکړي کارګر-او په دې لارښود کې له لرې څخه ترسره شوي به اجرا نشي ځکه چې سکریپټ د چلولو حق نلري. د وضعیت سمولو لپاره، تاسو به یو کیلي ته اړتیا ولرئ
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 - د ترتیب کولو فایل بنسټیز قاموس. دا باید د تشکیلاتو فایل کې شامل شي. د کارونې اسانتیا لپاره، یو عرف د ترتیب کوډ کې معرفي شوی "ج". عنوانونه
د 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 د یو څه ځنډ سره به یو داخلي څیز رامینځته کړي د بدلون او د پیښې سمبالونکي ته یې واستوئ مهالویشونکی، کوم چې به د پروژې جوړولو او ازموینې لپاره مرحلې پیل کړي کارګر-ای. د دې ګامونو په منځ کې به اشاره وشي تازه ذخیره په دقیق ډول کارګردا به د ذخیره کولو ځایی کاپي رامینځته کړي. د دې پروسې جزئیات به په راتلونکو دوو برخو کې لاندې پوښل شي. (
په ذخیره کې د بدلونونو تعقیب کولو حتی خورا په زړه پوری میتود دا دی چې مستقیم له سرور څخه پیغامونه واستول شي چې دا کوربه کوي. 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- اعتراض کول د بدلون او اوس هر شیډولر د دوی پر بنسټ، دا د پروژې جوړولو پروسې پیل کولو لپاره غوښتنې جوړوي. په هرصورت، دا هم ټاکي کله چې دا غوښتنې نور کتار ته لیږدول کیږي. یو څیز
موږ دا په اوسني مثال کې ګورو مهالویشونه 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. په هرصورت، بیا دوه "خو" شتون لري:
- کارګر باید د کیلي سره جوړ شي
--ماسک تر څو وروسته د اعدام حقونه بند نه کړي بشپړ ی وګوره-د. - په ګيټ فشارد دې سکریپټونو څخه تاسو اړتیا لرئ ملکیت مشخص کړئ د اجرا وړنو چې وروسته چیچاؤټ-e د Git سکریپټ اجرا کولو حق له لاسه نه دی ورکړی.
5.6 جوړونکي
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="runtests",
workernames=["example-worker"],
factory=factory))
د څه په اړه جوړونکی ویل شوي وو
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="yourProject",
workernames=["yourWorkerName"],
factory=factory))
اوس زه به تاسو ته د پیرامیټونو په اړه ووایم BuilderConfig.
نوم نوم مشخص کوي جوړونکی-a. دلته موږ نومولی شو ستاسو پروژه... دا پدې مانا ده چې پر کارګر- دا لاره به پیدا شي /home/habr/worker/yourProject/build. شیډولر لټون کول لپاره د جوړونکی یوازې په دې نوم.
د کارګر نومونه پاڼه لري کارګر-s. هر یو باید اضافه شي ج['کارګران'].
فابريکه - مشخص د جوړولو، چې ورسره تړاو لري جوړونکی. هغه به اعتراض ولېږدوي د جوړولو په کارګر په دې کې شامل ټول مرحلې بشپړولو لپاره د جوړولو-د.
6. ستاسو د خپل ترتیب بیلګه
دلته د پروژې جوړښت مثال دی چې زه یې د پلي کولو وړاندیز کوم BuildBot
.
موږ به د نسخې کنټرول سیسټم په توګه وکاروو svn. ذخیره پخپله به په یو ډول بادل کې موقعیت ولري. دلته د دې بادل پته ده
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"
}
لومړی تاسو اړتیا لرئ
بل ګام د خدمت پیل کول دي 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 د مارک اپ جوړولو لپاره کارول کیږي. دا د انجن لخوا تعدیل شوی
میل نوټیفایر لاندې دلیلونه لري.
له اضافه څخه - هغه پته چې هرڅوک به خبر پاڼه ترلاسه کړي.
لیږونکي ته لیږونکي= ریښتیا مالک او کارونکي ته پیغام لیږي چې جوړ کړی ژمن کول.
لټون - یو ضمیمه چې باید د خبر لیک ترلاسه کونکو کاروونکو نومونو کې اضافه شي. نو اداری څنګه به کاروونکي په پته کې خبرپاڼه ترلاسه کړي [ایمیل خوندي شوی].
relayhost د کوربه نوم مشخص کوي په کوم کې چې سرور خلاص شوی smtp، یو smptPort د پورټ شمیره مشخص کوي چې اوریدل کیږي smtp سرور
حالت = خبرداری" وايي چې بریښنالیک باید یوازې هغه وخت ترسره شي چې لږترلږه یو ګام وي د جوړولو-a، کوم چې د وضعیت ناکامۍ یا خبرتیا سره پای ته ورسید. د بریالیتوب په صورت کې، د خبر پاڼې لیږلو ته اړتیا نشته.
اضافي ترلاسه کوونکي د هغه اشخاصو لیست لري چې د مالک او هغه کس سربیره چې دا یې ترسره کړي چې بریښنالیک باید واستول شي. ژمن کول.
د پیغام بڼه یو څیز دی چې د پیغام بڼه، د هغې ټیمپلیټ، او د متغیرونو سیټ مشخص کوي jinja2. اختیارونه لکه مطلوب ملکیت = ریښتیا и wantSteps=ریښتیا د شته متغیرونو دا سیټ تعریف کړئ.
د ['خدماتو'] = [SendMessageToAll] سره د خدماتو لیست وړاندې کوي، چې زموږ په منځ کې به وي خبريال.
موږ دا وکړل! مبارک شه
موږ خپل تشکیلات جوړ کړل او هغه فعالیت مو ولیدل چې دا وړتیا لري. BuildBot. دا، زما په اند، د دې پوهیدو لپاره کافي دی چې آیا دا وسیله ستاسو د پروژې جوړولو لپاره اړینه ده. ایا تاسو د هغه سره علاقه لرئ؟ ایا دا به تاسو ته ګټور وي؟ ایا هغه د کار کولو لپاره آرام دی؟ بیا زه دا مقاله بې ځایه نه لیکم.
او نور. زه غواړم مسلکي ټولنه وکاروم BuildBot، پراخه شوه ، لارښودونه ژباړل شوي ، او حتی نور مثالونه هم شتون لري.
ستاسو د پاملرنې څخه مننه. غوره چانس.
سرچینه: www.habr.com