BuildBot ашиглан тасралтгүй интеграцчлалыг хэрэгжүүлэх жишээ

BuildBot ашиглан тасралтгүй интеграцчлалыг хэрэгжүүлэх жишээ
(Зураг Компьютерчин нь Pixabay)

Сайн уу!

Миний нэр Евгений Черкин, Би уул уурхайн компанид хөгжүүлэлтийн багийн програмист Полиметал.

Аливаа томоохон төслийг эхлүүлэхдээ та "Үүнд үйлчлэхийн тулд ямар програм хангамж ашиглах нь дээр вэ?" гэж бодож эхэлдэг. Мэдээллийн технологийн төсөл дараагийн хувилбараа гаргахаас өмнө хэд хэдэн үе шат дамждаг. Эдгээр үе шатуудын гинжин хэлхээг автоматжуулсан бол сайн. Мэдээллийн технологийн төслийн шинэ хувилбарыг гаргах автомат үйл явцыг өөрөө гэж нэрлэдэг Тогтмол интеграцчилал. 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 Мастер руугаа явах замд.cfg
6.2 svn-тэй ажиллах
6.3 Танд илгээх захидал: сэтгүүлчдэд мэдэгдэх эрхтэй

Бид үүнийг хийсэн! Баяр хүргэе

1. Яагаад BuildBot гэж?

Өмнө нь habr-e дээр би хэрэгжилтийн талаархи нийтлэлүүдтэй танилцсан Тогтмол интеграцчилал ашиглаж байгаа BuildBot. Жишээ нь, Энэ нэг Би үүнийг хамгийн мэдээлэлтэй гэж олсон. Өөр нэг жишээ байна - илүү энгийн. Эдгээр нийтлэлийг амталж болно гарын авлагаас авсан жишээболон энэ нь үүний дараа англиар. Купе нь сайн эхлэлийг тавьдаг. Эдгээр нийтлэлийг уншсаны дараа та нэн даруй ямар нэг зүйлийг хүсэх болно BuildBot хийх.

Зогс! Хэн нэгэн үүнийг төсөлдөө ашигласан уу? Тийм болж байна олон үүнийг ажилдаа ашигласан. Олж болно Жишээ нь использования BuildBot болон Google кодын архивт.

Тэгэхээр хүмүүсийн хэрэглэж байгаа логик ямар байна Buildbot? Эцсийн эцэст, бусад хэрэгслүүд байдаг: Хурд тогтоон баригч и Jenkins. Би ингэж хариулъя. Ихэнх ажлын хувьд Jenkins мөн үнэн хангалттай байх болно. Эргээд, BuildBot - илүү дасан зохицох чадвартай, харин асуудлыг тэнд байгаа шиг энгийн байдлаар шийддэг Jenkins. Сонголт чинийх. Гэхдээ бид зорилтот төсөл боловсруулах хэрэгсэл хайж байгаа тул энгийн алхмуудаас эхлээд интерактив, өвөрмөц интерфэйстэй бүтээх системийг олж авах боломжийг олгодог нэгийг яагаад сонгож болохгүй гэж.

Зорилтот төсөл нь python хэл дээр бичигдсэн хүмүүсийн хувьд "Яагаад төсөлд ашигласан хэлний хувьд ойлгомжтой интерфэйстэй интеграцийн системийг сонгож болохгүй гэж?" Одоо ашиг тусаа танилцуулах цаг болжээ BuildBot.

Тэгэхээр манай “хэмжээний дөрвөл”. Би өөрийнхөө хувьд дөрвөн онцлогийг тодорхойлсон BuildBot:

  1. Энэ нь GPL лицензийн дагуу нээлттэй эхийн хүрээ юм
  2. Энэ нь python-ийг тохиргооны хэрэгсэл болгон ашиглах ба шаардлагатай үйлдлүүдийн тайлбар юм
  3. Энэ нь угсралт явагдаж буй машинаас хариу авах боломж юм
  4. Эдгээр нь эцэст нь хостод тавигдах хамгийн бага шаардлага юм. Байршуулахад python болон twisted программууд шаардлагатай бөгөөд виртуал машин болон java машин шаардлагагүй.

2. BuildMaster-ийн удирдсан үзэл баримтлал

BuildBot ашиглан тасралтгүй интеграцчлалыг хэрэгжүүлэх жишээ

Даалгаврын хуваарилалтын архитектурын гол хэсэг нь 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.

"Алтан түлхүүр
Одоо би өмнөх догол мөрийг юунд зориулж бичсэн бэ: скрипт гэж мастер -аас шаардах болно Ажилчин-мөн энэ санд алсаас хийсэн үйлдэл нь скриптийг ажиллуулах зөвшөөрөлгүй тул гүйцэтгэхгүй. Нөхцөл байдлыг засахын тулд танд түлхүүр хэрэгтэй болно --умаска=0o22, энэ нь энэ лавлах руу бичихийг хориглодог боловч эхлүүлэх эрхийг хадгалах болно. Энэ л бидэнд хэрэгтэй.

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 - тохиргооны файлын үндсэн толь бичиг. Энэ нь тохиргооны файлд орсон байх ёстой. Ашиглахад хялбар болгох үүднээс тохиргооны кодонд өөр нэрийг оруулсан болно "в". Гарчиг түлхүүрийн в 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 репозиторыг ашигладаг.

Эхний аргумент бол таны репозитор руу орох зам юм.

ажлын чиглэл хажуу талд байгаа хавтсанд хүрэх замыг илэрхийлнэ Ажилчин- замтай холбоотой /home/habr/worker/yourProject/build git нь репозиторын локал хувилбарыг хадгалах болно.

салбар дагах ёстой репозиторын тодорхой салбарыг агуулдаг.

санал асуулгын интервал үүнээс хойшхи секундын тоог агуулна BuildMaster өөрчлөлтийн агуулахаас санал асуулга явуулна.

Төслийн агуулахын өөрчлөлтийг хянах хэд хэдэн арга байдаг.

Хамгийн энгийн арга бол Санал авах, энэ нь үүнийг илтгэнэ BuildMaster репозитортой серверээс үе үе санал асуулга явуулдаг. Хэрэв үйлдэх репозитор дахь өөрчлөлтүүдийг тусгасан, дараа нь BuildMaster зарим сааталтай дотоод объектыг үүсгэх болно Change мөн үйл явдал зохицуулагч руу илгээнэ үү Жагсаалт, энэ нь төслийг бүтээх, турших алхмуудыг эхлүүлэх болно Ажилчин-e. Эдгээр алхмуудын дунд заах болно шинэчлэх хадгалах газар. Яг дээр АжилчинЭнэ нь репозиторын локал хуулбарыг үүсгэх болно. Энэ үйл явцын дэлгэрэнгүйг дараагийн хоёр хэсэгт доор авч үзэх болно. (5.4 и 5.5).

Репозиторын өөрчлөлтийг хянах илүү гоёмсог арга бол түүнийг байршуулсан серверээс шууд мессеж илгээх явдал юм. 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 ашиглан тасралтгүй интеграцчлалыг хэрэгжүүлэх жишээ

Бүртгэгдсэн өөрчлөлтүүд эх сурвалжийг өөрчлөх, ажлын явцад өөрчлөгдсөн BuildBot- эсэргүүцэх Change тэгээд одоо бүр Шедулер тэдгээрт тулгуурлан төсөл бүтээх үйл явцыг эхлүүлэх хүсэлтийг бий болгодог. Гэсэн хэдий ч энэ нь эдгээр хүсэлтийг хэзээ дараалалд шилжүүлэхийг тодорхойлдог. Объект Builder хүсэлтийн дарааллыг хадгалж, одоогийн угсралтын төлөвийг тусад нь бүртгэдэг Ажилчин-e. Builder дээр байдаг BuildMaster-e ба түүнээс дээш Ажилчин-e. Тэр хамт илгээдэг BuildMaster-а дээр Ажилчин-мөн аль хэдийн тодорхой барих - заавал дагаж мөрдөх хэд хэдэн алхам.
Үүнийг бид одоогийн жишээнээс харж байна хуваарь гаргагчид 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. Гэсэн хэдий ч хоёр "гэхдээ" байна:

  1. Ажилчин түлхүүрээр үүсгэгдсэн байх ёстой --умак дараа нь гүйцэтгэх эрхийг хааж болохгүй Тооцоо хийх-The.
  2. үед git түлхэх-эдгээр скриптүүдээс та өмчийг зааж өгөх хэрэгтэй гүйцэтгэгдэх боломжтойтэгэхээр дараа нь chechout-e Git скриптийг гүйцэтгэх эрхээ алдаагүй.

5.6 барилгачин


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

Юу тухай Builder гэж хэлсэн энд. Одоо би үүнийг хэрхэн бүтээх талаар илүү дэлгэрэнгүй ярих болно. BuilderConfig бүтээгч юм барилгачин. Ийм дизайнерууд дахь c['барилгачид'] Энэ нь объектын хуудас тул та хэд хэдэн зүйлийг зааж өгч болно барилгачин төрөл. Одоо жишээгээ дахин бичье BuildBot, үүнийг бидний даалгаварт ойртуулж байна.


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. Хадгалах газар өөрөө ямар нэгэн үүлэн дотор байрлах болно. Энэ үүлний хаяг энд байна svn.host/svn/yourProject/trunk. Доод үүлэн дотор svn дансны хэрэглэгчийн нэр байна: хэрэглэгчийн, passwd: нууц үг. Алхам алхмуудыг харуулсан скриптүүд барих-а бас салбарт байх болно svn, тусдаа хавтсанд buildbot/worker_linux. Эдгээр скриптүүд нь хадгалсан өмчтэй репозитор байрладаг гүйцэтгэх боломжтой.

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"
}

Эхлээд танд хэрэгтэй бий болгох BuildMaster-а ба Ажилчин-а. Дараа нь энэ файлыг буулгана уу 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 Мастер руугаа явах замд.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 нь тэмдэглэгээ үүсгэхэд ашиглагддаг. Үүнийг хөдөлгүүрээр өөрчилдөг жинжа2 (тэй харьцуулж болно django). BuildBot Мессежийн текстийг үүсгэх явцад утгууд нь загварт орлуулсан хувьсагчдын багцтай. Эдгээр хувьсагчийг {{ давхар буржгар хаалтанд }} хавсаргасан болно. Жишээлбэл, хураангуй дууссан үйл ажиллагааны төлөв, өөрөөр хэлбэл амжилт эсвэл бүтэлгүйтлийг харуулна. А төсөл гаргана таны төсөл. Тиймээс хяналтын командуудыг ашиглан жинжа2, хувьсагч BuildBot-a болон python string форматлах хэрэгслүүдийн тусламжтайгаар та нэлээд мэдээлэлтэй мессеж үүсгэж болно.

MailNotifier дараах аргументуудыг агуулна.

fromaddr – хүн бүр мэдээллийн товхимол хүлээн авах хаяг.

sendToInterestedUsers=True нь хийсэн эзэмшигч болон хэрэглэгч рүү мессеж илгээдэг үйлдэх.

хайлт хийх — мэдээллийн товхимолыг хүлээн авч буй хэрэглэгчдийн нэрэнд заавал залгах дагавар. Тэгэхээр админ хэрэглэгч тухайн хаягаар мэдээллийн хуудсыг хэрхэн хүлээж авах [имэйлээр хамгаалагдсан].

релей хост сервер нээгдсэн хостын нэрийг зааж өгнө SMTPнь smptPort сонсох портын дугаарыг зааж өгнө SMTP сервер.

горим = "анхааруулах" Зөвхөн дор хаяж нэг алхам байгаа тохиолдолд шуудан илгээх ёстой гэж хэлдэг барих-a, энэ нь статусын бүтэлгүйтэл эсвэл анхааруулгатай дууссан. Амжилттай болсон тохиолдолд мэдээллийн товхимол явуулах шаардлагагүй.

нэмэлт хүлээн авагчид эзэмшигч болон гүйцэтгэгчээс гадна шуудан илгээх ёстой хүмүүсийн жагсаалтыг агуулсан болно. үйлдэх.

мессеж форматлагч нь мессежийн формат, түүний загвар болон түүнээс авах боломжтой хувьсагчдын багцыг тодорхойлдог объект юм жинжа2. гэх мэт сонголтууд wantProperties=Үнэн и wantSteps=Үнэн боломжтой хувьсагчдын энэ багцыг тодорхойлох.

with['services']=[sendMessageToAll] үйлчилгээний жагсаалтыг гаргаж өгдөг бөгөөд үүнд манайх багтах болно сурвалжлагч.

Бид үүнийг хийсэн! Баяр хүргэе

Бид өөрсдийн тохиргоог бүтээж, ямар функцтэй болохыг олж харсан. BuildBot. Энэ нь таны төслийг бий болгоход энэ хэрэгсэл шаардлагатай эсэхийг ойлгоход хангалттай гэж би бодож байна. Чи түүнийг сонирхож байна уу? Энэ нь танд ашигтай байх болов уу? Түүнтэй ажиллахад тухтай юу? Тэгвэл би энэ нийтлэлийг дэмий бичиж байгаа юм биш.

Тэгээд цааш нь. Мэргэжлийн хүмүүс ашигламаар байна BuildBot, улам өргөн болж, гарын авлагууд орчуулагдаж, илүү олон жишээнүүд гарч ирэв.

Анхаарал тавьсан та бүхэнд баярлалаа. Амжилт хүсье.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх