(Зураг
Сайн уу!
Миний нэр Евгений Черкин, Би уул уурхайн компанид хөгжүүлэлтийн багийн програмист Полиметал.
Аливаа томоохон төслийг эхлүүлэхдээ та "Үүнд үйлчлэхийн тулд ямар програм хангамж ашиглах нь дээр вэ?" гэж бодож эхэлдэг. Мэдээллийн технологийн төсөл дараагийн хувилбараа гаргахаас өмнө хэд хэдэн үе шат дамждаг. Эдгээр үе шатуудын гинжин хэлхээг автоматжуулсан бол сайн. Мэдээллийн технологийн төслийн шинэ хувилбарыг гаргах автомат үйл явцыг өөрөө гэж нэрлэдэг Тогтмол интеграцчилал. BuildBot энэ үйл явцыг хэрэгжүүлэхэд бидэнд сайн туслагч болсон.
Энэ нийтлэлд би боломжуудын тоймыг өгөхөөр шийдсэн BuildBot. Энэ програм хангамж юу хийх чадвартай вэ? Түүнтэй хэрхэн ойртож, түүнтэй хэрхэн хэвийн ҮР ДҮНТЭЙ АЖЛЫН ХАРИЛЦАА бий болгох вэ? Та өөрийн машин дээр төслөө барьж, турших ажлын үйлчилгээг бий болгосноор бидний туршлагыг өөрөө хэрэгжүүлэх боломжтой.
Агуулга
Агуулга
1. Яагаад BuildBot гэж?
Өмнө нь habr-e дээр би хэрэгжилтийн талаархи нийтлэлүүдтэй танилцсан Тогтмол интеграцчилал ашиглаж байгаа BuildBot. Жишээ нь,
Зогс! Хэн нэгэн үүнийг төсөлдөө ашигласан уу? Тийм болж байна
Тэгэхээр хүмүүсийн хэрэглэж байгаа логик ямар байна Buildbot? Эцсийн эцэст, бусад хэрэгслүүд байдаг: Хурд тогтоон баригч и Jenkins. Би ингэж хариулъя. Ихэнх ажлын хувьд Jenkins мөн үнэн хангалттай байх болно. Эргээд, BuildBot - илүү дасан зохицох чадвартай, харин асуудлыг тэнд байгаа шиг энгийн байдлаар шийддэг Jenkins. Сонголт чинийх. Гэхдээ бид зорилтот төсөл боловсруулах хэрэгсэл хайж байгаа тул энгийн алхмуудаас эхлээд интерактив, өвөрмөц интерфэйстэй бүтээх системийг олж авах боломжийг олгодог нэгийг яагаад сонгож болохгүй гэж.
Зорилтот төсөл нь python хэл дээр бичигдсэн хүмүүсийн хувьд "Яагаад төсөлд ашигласан хэлний хувьд ойлгомжтой интерфэйстэй интеграцийн системийг сонгож болохгүй гэж?" Одоо ашиг тусаа танилцуулах цаг болжээ BuildBot.
Тэгэхээр манай “хэмжээний дөрвөл”. Би өөрийнхөө хувьд дөрвөн онцлогийг тодорхойлсон BuildBot:
- Энэ нь GPL лицензийн дагуу нээлттэй эхийн хүрээ юм
- Энэ нь python-ийг тохиргооны хэрэгсэл болгон ашиглах ба шаардлагатай үйлдлүүдийн тайлбар юм
- Энэ нь угсралт явагдаж буй машинаас хариу авах боломж юм
- Эдгээр нь эцэст нь хостод тавигдах хамгийн бага шаардлага юм. Байршуулахад python болон twisted программууд шаардлагатай бөгөөд виртуал машин болон java машин шаардлагагүй.
2. BuildMaster-ийн удирдсан үзэл баримтлал
Даалгаврын хуваарилалтын архитектурын гол хэсэг нь BuildMaster. Энэ нь дараах үйлчилгээ юм.
- мөрддөг төслийн эх модны өөрчлөлт
- илгээдэг Төслийг барьж, туршихын тулд Ажилчны үйлчилгээний гүйцэтгэх ёстой тушаалууд
- мэдэгддэг авсан арга хэмжээний үр дүнгийн талаар хэрэглэгчид
BuildMaster файлаар тохируулсан master.cfg. Энэ файл нь үндсэн хэсэгт байна BuildMaster. Дараа нь би энэ үндэс хэрхэн үүсдэгийг харуулах болно. Файл өөрөө master.cfg дуудлага ашигладаг python скрипт агуулсан BuildBot.
Дараагийн хамгийн чухал объект BuildBot нэртэй байна Ажилчин. Энэ үйлчилгээг өөр үйлдлийн системтэй өөр хост дээр, эсвэл хаана ч ажиллуулж болно BuildMaster. Мөн өөрийн багц болон хувьсагчтай тусгайлан бэлтгэсэн виртуал орчинд оршин тогтнох боломжтой. Эдгээр виртуал орчныг python гэх мэт хэрэгслүүдийг ашиглан бэлтгэж болно virtualenv, venv.
BuildMaster тушаалуудыг хүн бүрт дамжуулдаг Ажилчин-y, тэр нь эргээд тэдгээрийг биелүүлдэг. Өөрөөр хэлбэл, төсөл барих, турших үйл явц үргэлжилж болох нь харагдаж байна Ажилчин-e Windows болон Linux үйлдлийн системтэй өөр Worker дээр.
Тооцоо хийх төслийн эх код тус бүр дээр гардаг Ажилчин-e.
3. Суурилуулалт
За, явцгаая. Би Ubuntu 18.04-ийг хостоор ашиглах болно. Би түүн дээр нэгийг байрлуулна BuildMaster- нэг ба нэг Ажилчин-а. Гэхдээ эхлээд та 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-The.
/*Все что под 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
Чамайг гүйх үед Ажилчин, дараа нь анхдагчаар энэ нь үүсгэнэ /гэр/байшин/ажилчин -д заасан төслийн нэр бүхий хавтас master.cfg. Мөн төслийн нэр бүхий хавтсанд лавлах үүсгэнэ барих, цаашид ч хийх болно Тооцоо хийх. Ажлын лавлах Ажилчин-мөн энэ нь лавлах болно /home/habr/yourProject/build.
"Алтан түлхүүр
Одоо би өмнөх догол мөрийг юунд зориулж бичсэн бэ: скрипт гэж мастер -аас шаардах болно Ажилчин-мөн энэ санд алсаас хийсэн үйлдэл нь скриптийг ажиллуулах зөвшөөрөлгүй тул гүйцэтгэхгүй. Нөхцөл байдлыг засахын тулд танд түлхүүр хэрэгтэй болно
BuildMaster и Ажилчин бие биетэйгээ холбоо тогтоох. Энэ нь тасарч, тасрах тохиолдол гардаг Ажилчин -аас хариу ирэхийг хүлээж байна BuildMaster-А. Хэрэв хариу өгөхгүй бол холболтыг дахин эхлүүлнэ. Түлхүүр --хамгаалах=60 дараа нь цагийг зааж өгөхөд л хангалттай холбох дахин ачаална.
5. Тохиргоо. Алхам алхмаар жор
Тохиргоо BuildMaster Бидний тушаалыг гүйцэтгэсэн машины хажуу талд хийгддэг үүсгэх-мастер. Манай тохиолдолд энэ нь лавлах юм /home/habr/master. Тохиргооны файл master.cfg хараахан байхгүй, гэхдээ команд нь өөрөө файлыг аль хэдийн үүсгэсэн байна мастер.cmg.дээж. Та нэрийг нь өөрчлөх хэрэгтэй master.cfg. дээж в 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 репозиторыг ашигладаг.
Эхний аргумент бол таны репозитор руу орох зам юм.
ажлын чиглэл хажуу талд байгаа хавтсанд хүрэх замыг илэрхийлнэ Ажилчин- замтай холбоотой /home/habr/worker/yourProject/build git нь репозиторын локал хувилбарыг хадгалах болно.
салбар дагах ёстой репозиторын тодорхой салбарыг агуулдаг.
санал асуулгын интервал үүнээс хойшхи секундын тоог агуулна BuildMaster өөрчлөлтийн агуулахаас санал асуулга явуулна.
Төслийн агуулахын өөрчлөлтийг хянах хэд хэдэн арга байдаг.
Хамгийн энгийн арга бол Санал авах, энэ нь үүнийг илтгэнэ BuildMaster репозитортой серверээс үе үе санал асуулга явуулдаг. Хэрэв үйлдэх репозитор дахь өөрчлөлтүүдийг тусгасан, дараа нь BuildMaster зарим сааталтай дотоод объектыг үүсгэх болно Change мөн үйл явдал зохицуулагч руу илгээнэ үү Жагсаалт, энэ нь төслийг бүтээх, турших алхмуудыг эхлүүлэх болно Ажилчин-e. Эдгээр алхмуудын дунд заах болно шинэчлэх хадгалах газар. Яг дээр АжилчинЭнэ нь репозиторын локал хуулбарыг үүсгэх болно. Энэ үйл явцын дэлгэрэнгүйг дараагийн хоёр хэсэгт доор авч үзэх болно. (
Репозиторын өөрчлөлтийг хянах илүү гоёмсог арга бол түүнийг байршуулсан серверээс шууд мессеж илгээх явдал юм. BuildMaster- төслийн эх кодыг өөрчлөх тухай. Энэ тохиолдолд хөгжүүлэгч хийсэн даруйд үйлдэх, төслийн репозитортой сервер мессеж илгээх болно BuildMaster-y. Мөн тэрээр эргээд объект үүсгэх замаар үүнийг таслан зогсоох болно PBChangeSource. Дараа нь энэ объект руу шилжих болно Жагсаалт, энэ нь төслийг бүтээх, турших алхмуудыг идэвхжүүлдэг. Энэ аргын чухал хэсэг нь ажиллах явдал юм дэгээ- репозитор дахь серверийн скриптүүд. Скрипт дээр дэгээ-а, боловсруулах үйлдлийг хариуцах үед үйлдэх-e, та хэрэгсэл рүү залгах хэрэгтэй өөрчлөлт илгээх болон сүлжээний хаягийг зааж өгнө BuildMaster-А. Та мөн сонсох сүлжээний портыг зааж өгөх хэрэгтэй PBChangeSource. PBChangeSource, дашрамд хэлэхэд, нэг хэсэг юм BuildMaster-А. Энэ арга нь зөвшөөрөл авах шаардлагатай болно админ-Төслийн репозитор байрладаг сервер дээр. Та эхлээд репозиторыг нөөцлөх хэрэгтэй.
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- эсэргүүцэх Change тэгээд одоо бүр Шедулер тэдгээрт тулгуурлан төсөл бүтээх үйл явцыг эхлүүлэх хүсэлтийг бий болгодог. Гэсэн хэдий ч энэ нь эдгээр хүсэлтийг хэзээ дараалалд шилжүүлэхийг тодорхойлдог. Объект
Үүнийг бид одоогийн жишээнээс харж байна хуваарь гаргагчид 2 ширхэг бүтээгдсэн. Түүнээс гадна тус бүр өөрийн гэсэн төрөлтэй.
SingleBranchScheduler - хуваарийн хамгийн алдартай хичээлүүдийн нэг. Энэ нь нэг салбарыг ажиглаж, түүнд бүртгэгдсэн өөрчлөлтөөр өдөөгддөг. Өөрчлөлтийг олж харвал тэр бүтээх хүсэлтийг илгээх хугацааг хойшлуулж болно (тусгай параметрт заасан хугацааг хойшлуулах). treeStableTimer) Дотроо нэр харуулах хуваарийн нэрийг тохируулна BuildBot- вэб интерфэйс. IN Шүүлтүүрийг өөрчлөх шүүлтүүрийг тохируулсан бөгөөд үүнийг дамжуулсны дараа салбар дахь өөрчлөлтүүд нь барилгын хүсэлтийг илгээх хуваарийг шаарддаг. IN Барилгачдын нэрс нэрийг зааж өгсөн барилгачин-а, бид үүнийг хэсэг хугацааны дараа тохируулах болно. Манай тохиолдолд нэр нь төслийн нэртэй ижил байх болно: таны төсөл.
ForceScheduler маш энгийн зүйл. Энэ төрлийн хуваарь нь хулганаар товших замаар өдөөгддөг BuildBot- вэб интерфэйс. Параметрүүд нь дээрхтэй ижил мөн чанартай байдаг SingleBranchScheduler.
Жич №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": "."}))
үе үе Барилга Таймер Энэ давтамжийн хугацааг секундээр зааж өгдөг.
Үйлдвэр барих тодорхойг бий болгодог барих, дараа нь барилгачин руу илгээдэг Ажилчин. The Үйлдвэр барих дагаж мөрдөх алхмуудыг заана Ажилчин-y. Аргыг дуудах замаар алхамуудыг нэмнэ нэмэх алхам
Энэ жишээн дэх эхний нэмэлт алхам бол git clean -d -f -f –xдараа нь git checkout. Эдгээр үйлдлүүд нь параметрт багтсан болно Арга, энэ нь тодорхой заагаагүй боловч анхдагч утгыг илэрхийлдэг шинэ. Параметр горим='өсөх' файлууд байгаа лавлахаас байгааг харуулж байна chechout, хадгалах газраас алга болсон ч хөндөгдөөгүй хэвээр байна.
Хоёрдахь нэмэлт алхам бол скриптийг дуудах явдал юм туршилт параметртэй Сайн уу талд Ажилчин- лавлахаас /home/habr/worker/yourProject/build орчны хувьсагчтай PATHONPATH=... Тиймээс та өөрөө скрипт бичиж, хажуу талд нь ажиллуулж болно. Ажилчин- алхам тутамд util.ShellCommand. Эдгээр скриптүүдийг репозитор руу шууд байрлуулж болно. Дараа нь цагт chechout-д тэд унах болно /home/habr/worker/yourProject/build. Гэсэн хэдий ч хоёр "гэхдээ" байна:
- Ажилчин түлхүүрээр үүсгэгдсэн байх ёстой
--умак дараа нь гүйцэтгэх эрхийг хааж болохгүй Тооцоо хийх-The. - үед git түлхэх-эдгээр скриптүүдээс та өмчийг зааж өгөх хэрэгтэй гүйцэтгэгдэх боломжтойтэгэхээр дараа нь chechout-e Git скриптийг гүйцэтгэх эрхээ алдаагүй.
5.6 барилгачин
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="runtests",
workernames=["example-worker"],
factory=factory))
Юу тухай Builder гэж хэлсэн
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="yourProject",
workernames=["yourWorkerName"],
factory=factory))
Одоо би параметрүүдийн талаар танд хэлэх болно BuilderConfig.
нэр нэрийг зааж өгдөг барилгачин-а. Энд бид үүнийг нэрлэсэн таны төсөл. Энэ нь асаалттай гэсэн үг Ажилчин- яг ийм зам бий болно /home/habr/worker/yourProject/build. Шедулер хайж байна барилгачин зүгээр л энэ нэрээр.
ажилчдын нэрс хуудас агуулсан Ажилчин-s. Тэд тус бүрийг нэмж оруулах ёстой c['ажилчид'].
үйлдвэр - тодорхой барих, түүнтэй холбоотой барилгачин. Тэр объектыг илгээх болно барих тухай Ажилчин үүнд багтсан бүх алхмуудыг дуусгах барих-The.
6. Өөрийн тохиргооны жишээ
Миний хэрэгжүүлэхийг санал болгож буй төслийн архитектурын жишээ энд байна BuildBot
.
Бид хувилбарын хяналтын систем болгон ашиглах болно svn. Хадгалах газар өөрөө ямар нэгэн үүлэн дотор байрлах болно. Энэ үүлний хаяг энд байна
BuildMaster и Ажилчин ижил хост дээр ажиллуулах төсөл. хост .BuildMaster файлуудаа хавтсанд хадгалдаг /home/habr/master. Ажилчин дараах замд хадгалагдана /гэр/байшин/ажилчин. Харилцаа холбооны үйл явц BuildMaster-а ба Ажилчин-a нь протоколын дагуу 4000 портоор дамжин хийгддэг BuildBot-а, тэр нь 'pb' протокол.
Зорилтот төсөл нь бүхэлдээ Python дээр бичигдсэн. Даалгавар нь түүний өөрчлөлтийг хянах, гүйцэтгэх файл үүсгэх, баримт бичиг үүсгэх, туршилт хийх явдал юм. Алдаа гарсан тохиолдолд бүх хөгжүүлэгчид бүтэлгүйтсэн үйлдэл байгаа тухай имэйлээр мессеж илгээх шаардлагатай.
Вэб дэлгэц BuildBot Бид 80-р порт руу холбогдох болно төсөл. хост. Apatch суулгах шаардлагагүй. Номын сангийн нэг хэсэг болгон эрчилсэн вэб сервер аль хэдийн байна, BuildBot ашигладаг.
Дотоод мэдээллийг хадгалахын тулд BuildBot бид ашиглах болно sqlite.
Захидал явуулахад хост шаардлагатай smtp.таны.домайн - энэ нь шуудангаас захидал илгээх боломжийг олгодог [имэйлээр хамгаалагдсан] баталгаажуулалтгүйгээр. Мөн хост дээр 'SMTP Протоколыг 1025 дугаар постоор сонсож байна.
Энэ үйл явцад хоёр хүн оролцож байна: админ и хэрэглэгчийн. админ удирддаг 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 Мастер руугаа явах замд.cfg
Миний бичиж байхдаа master.cfg Олон алдаа гарах тул бүртгэлийн файлыг унших шаардлагатай болно. хэлбэрээр хадгалагддаг BuildMaster-ec үнэмлэхүй зам /home/habr/master/twistd.log, ба хажуу талд Ажилчин- үнэмлэхүй замтай /home/habr/worker/twistd.log. Алдааг уншиж, засах үед та үйлчилгээг дахин эхлүүлэх шаардлагатай болно BuildMaster-а. Үүнийг хэрхэн хийснийг энд харуулав.
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 салбарууд дээр. Тэр бас тэдэнд харьцангуй замыг санал болгодог. Эргээд хуваах_файлыг_үргэлж таслав репозитор нь зөвхөн агуулагддаг гэж хэлээд үйл явцыг хялбаршуулдаг их бие.
В Төлөвлөгчид заасан Шүүлтүүрийг өөрчлөххэн харж байна Аль нь ч биш мөн салбарыг түүнтэй холбодог их бие дамжуулан тухайн холбооны дагуу хуваах_файлыг_үргэлж таслав. Өөрчлөлтөд хариу үйлдэл үзүүлж байна их бие, Эхлүүлнэ барилгачин нэртэй таны төсөл.
шинж чанар Энд админ нь процессын эзэмшигчийн хувьд бүтээх болон туршилтын үр дүнгийн жагсаалтыг шуудангаар хүлээн авах шаардлагатай.
Алхам барих-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]
Тэр мессеж илгээх боломжтой
MailNotifier мэдэгдэл илгээхдээ имэйл ашигладаг.
template_html мэдээллийн товхимолын текстийн загварыг тохируулна. HTML нь тэмдэглэгээ үүсгэхэд ашиглагддаг. Үүнийг хөдөлгүүрээр өөрчилдөг
MailNotifier дараах аргументуудыг агуулна.
fromaddr – хүн бүр мэдээллийн товхимол хүлээн авах хаяг.
sendToInterestedUsers=True нь хийсэн эзэмшигч болон хэрэглэгч рүү мессеж илгээдэг үйлдэх.
хайлт хийх — мэдээллийн товхимолыг хүлээн авч буй хэрэглэгчдийн нэрэнд заавал залгах дагавар. Тэгэхээр админ хэрэглэгч тухайн хаягаар мэдээллийн хуудсыг хэрхэн хүлээж авах [имэйлээр хамгаалагдсан].
релей хост сервер нээгдсэн хостын нэрийг зааж өгнө SMTPнь smptPort сонсох портын дугаарыг зааж өгнө SMTP сервер.
горим = "анхааруулах" Зөвхөн дор хаяж нэг алхам байгаа тохиолдолд шуудан илгээх ёстой гэж хэлдэг барих-a, энэ нь статусын бүтэлгүйтэл эсвэл анхааруулгатай дууссан. Амжилттай болсон тохиолдолд мэдээллийн товхимол явуулах шаардлагагүй.
нэмэлт хүлээн авагчид эзэмшигч болон гүйцэтгэгчээс гадна шуудан илгээх ёстой хүмүүсийн жагсаалтыг агуулсан болно. үйлдэх.
мессеж форматлагч нь мессежийн формат, түүний загвар болон түүнээс авах боломжтой хувьсагчдын багцыг тодорхойлдог объект юм жинжа2. гэх мэт сонголтууд wantProperties=Үнэн и wantSteps=Үнэн боломжтой хувьсагчдын энэ багцыг тодорхойлох.
with['services']=[sendMessageToAll] үйлчилгээний жагсаалтыг гаргаж өгдөг бөгөөд үүнд манайх багтах болно сурвалжлагч.
Бид үүнийг хийсэн! Баяр хүргэе
Бид өөрсдийн тохиргоог бүтээж, ямар функцтэй болохыг олж харсан. BuildBot. Энэ нь таны төслийг бий болгоход энэ хэрэгсэл шаардлагатай эсэхийг ойлгоход хангалттай гэж би бодож байна. Чи түүнийг сонирхож байна уу? Энэ нь танд ашигтай байх болов уу? Түүнтэй ажиллахад тухтай юу? Тэгвэл би энэ нийтлэлийг дэмий бичиж байгаа юм биш.
Тэгээд цааш нь. Мэргэжлийн хүмүүс ашигламаар байна BuildBot, улам өргөн болж, гарын авлагууд орчуулагдаж, илүү олон жишээнүүд гарч ирэв.
Анхаарал тавьсан та бүхэнд баярлалаа. Амжилт хүсье.
Эх сурвалж: www.habr.com