BuildBot көмегімен үздіксіз интеграцияны енгізу мысалы

BuildBot көмегімен үздіксіз интеграцияны енгізу мысалы
(Сурет Компьютеризатор -дан Pixabay)

Сәлем!

Менің атым Евгений Черкин, Мен тау-кен компаниясының әзірлеу тобында бағдарламашымын Полиметалл.

Кез келген ірі жобаны бастаған кезде сіз: «Оны қолдау үшін қандай бағдарламалық жасақтаманы қолданған дұрыс?» деп ойлай бастайсыз. АТ жобасы келесі нұсқаны шығармас бұрын бірнеше кезеңнен өтеді. Бұл кезеңдердің тізбегі автоматтандырылған кезде жақсы. АТ жобасының жаңа нұсқасын шығарудың автоматтандырылған процесі деп аталады Үздіксіз интеграция. BuildBot бұл процесті жүзеге асыруда бізге жақсы көмекші болып шықты.

Бұл мақалада мен мүмкіндіктерге шолу жасауды шештім BuildBot. Бұл бағдарламалық құрал не істей алады? Оған қалай жақындауға болады және онымен қалыпты ТИІМДІ ЖҰМЫС ҚАТЫНАСЫ қалай құруға болады? Құрылғыңызда жобаңызды құру және сынау үшін жұмыс қызметін жасау арқылы тәжірибемізді өзіңіз қолдана аласыз.

Мазмұны

Мазмұны

1. Неліктен BuildBot?
2. BuildMaster басқаратын тұжырымдама
3. Орнату
4. Алғашқы қадамдар

5. Конфигурация. Қадамдық рецепт

5.1 BuildmasterConfig
5.2 жұмысшы
5.3 көзді өзгерту
5.4 жоспарлаушылар

5.5 BuildFactory
5.6 құрылысшы

6. Өз конфигурацияңыздың мысалы

6.1 Мастер.cfg жолында
6.2 svn-мен жұмыс
6.3 Сізге хат: журналистер хабарлауға құқылы

Біз бұны жасадық! Құттықтаймын

1. Неліктен BuildBot?

Бұрын мен habr-e сайтында іске асыру туралы мақалаларды кездестірдім Үздіксіз интеграция қолдану арқылы BuildBot. Мысалыға, мынау Мен оны ең ақпаратты деп таптым. Тағы бір мысал бар - қарапайым. Бұл мақалаларды дәмдеуге болады нұсқаулықтан мысалмен ол содан кейін ағылшын тілінде. Купе жақсы бастама жасайды. Осы мақалаларды оқығаннан кейін сіз бірден бірдеңе алғыңыз келетін шығар BuildBot істеу.

Тоқта! Біреу оны өз жобаларында қолданды ма? Иә болып шығады көптеген тапсырмаларында қолданды. Табуға болады мысалдар Пайдалану BuildBot және Google код мұрағатында.

Сонымен, адамдардың логикасы қандай Buildbot? Өйткені, басқа құралдар бар: Cruise Control и Дженкинс. Мен осылай жауап беремін. Көптеген тапсырмалар үшін Дженкинс және шындық жеткілікті болады. Өз кезегінде, BuildBot - неғұрлым бейімделгіш, ал ол жерде мәселелер бұрынғыдай қарапайым түрде шешіледі Дженкинс. Таңдау сіздікі. Бірақ біз дамып келе жатқан мақсатты жобаға арналған құралды іздеп жатқандықтан, неге қарапайым қадамдардан бастап интерактивтілігі мен бірегей интерфейсі бар құрастыру жүйесін алуға мүмкіндік беретін біреуін таңдамасқа.

Мақсатты жобасы питон тілінде жазылғандар үшін сұрақ туындайды: «Неге жобада қолданылатын тіл тұрғысынан түсінікті интерфейсі бар интеграциялық жүйені таңдамасқа?» Ал енді артықшылықтарды көрсететін кез келді BuildBot.

Сонымен, біздің «аспаптық квартет». Мен өзім үшін төрт ерекшелікті анықтадым BuildBot:

  1. Бұл GPL лицензиясы бойынша ашық бастапқы негіз
  2. Бұл конфигурация құралы және қажетті әрекеттердің сипаттамасы ретінде питонды пайдалану
  3. Бұл құрастыру жүріп жатқан машинадан жауап алу мүмкіндігі
  4. Бұл, сайып келгенде, Хостқа қойылатын ең төменгі талаптар. Орналастыру python және twisted тілін қажет етеді және виртуалды машина мен java машинасын қажет етпейді.

2. BuildMaster басқаратын тұжырымдама

BuildBot көмегімен үздіксіз интеграцияны енгізу мысалы

Тапсырмаларды тарату архитектурасында орталық болып табылады BuildMaster. Бұл қызмет:

  • қадағалайды жобаның бастапқы ағашындағы өзгерістер
  • жібереді Жобаны құрастыру және оны сынау үшін Жұмысшы қызметі орындауы тиіс командалар
  • хабарлайды пайдаланушыларға қабылданған әрекеттердің нәтижелері туралы

BuildMaster файл арқылы конфигурацияланады master.cfg. Бұл файл түбірде BuildMaster. Бұл түбірдің қалай жасалатынын кейінірек көрсетемін. Файлдың өзі master.cfg қоңырауларды пайдаланатын питон сценарийін қамтиды BuildBot.

Келесі ең маңызды нысан BuildBot аты бар Жұмысшы. Бұл қызметті басқа операциялық жүйесі бар басқа хостта немесе мүмкін болатын жерде іске қосуға болады BuildMaster. Ол сондай-ақ өзінің пакеттері мен айнымалылары бар арнайы дайындалған виртуалды ортада болуы мүмкін. Бұл виртуалды орталарды python утилиталары сияқты дайындауға болады виртуалды, венв.

BuildMaster командаларды барлығына таратады Жұмысшы-y, ал ол, өз кезегінде, оларды орындайды. Яғни, жобаны құру және сынақтан өткізу процесі жалғаса беретіні белгілі болды Жұмысшы-e Windows жүйесінде және Linux жұмыс істейтін басқа жұмысшыда.

Касса жобаның бастапқы кодтары әрқайсысында орын алады Жұмысшы-е.

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-а.


/*Все что под 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. Ол біздің қалтада болады /үй/хабр/шебер.

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.

«Алтын кілт
Ал енді мен алдыңғы абзацты не үшін жаздым: сценарий Master -дан талап етеді Жұмысшы-және осы каталогта қашықтан орындалған орындалмайды, себебі сценарийдің іске қосу құқығы жоқ. Жағдайды түзету үшін сізге кілт қажет --umask=0o22, бұл каталогқа жазуға тыйым салады, бірақ іске қосу құқықтарын сақтайды. Ал бізге керегі осы ғана.

BuildMaster и Жұмысшы бір-бірімен байланыс орнату. Ол үзіліп қалады және Жұмысшы тарапынан жауап күтуде BuildMaster-А. Жауап болмаса, байланыс қайта іске қосылады. Кілт --сақтау=60 тек одан кейінгі уақытты көрсету керек болды қосылу қайта жүктейді.

5. Конфигурация. Қадамдық рецепт

Конфигурация BuildMaster біз команданы орындаған машинаның жағында жүзеге асырылады жасау-шебер. Біздің жағдайда бұл каталог /үй/хабр/шебер. Конфигурация файлы master.cfg әлі жоқ, бірақ пәрменнің өзі файлды жасап қойған master.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 біраз кідіріспен ішкі нысан жасайды өзгеріс және оны оқиға өңдеушісіне жіберіңіз Жоспарлағыш, ол жобаны құру және сынау үшін қадамдарды бастайды Жұмысшы-е. Осы қадамдардың арасында көрсетілген болады жаңарту репозиторий. Дәл қосулы ЖұмысшыБұл репозиторийдің жергілікті көшірмесін жасайды. Бұл процестің егжей-тегжейлері төменде келесі екі бөлімде қарастырылады. (5.4 и 5.5).

Репозиторийдегі өзгерістерді қадағалаудың одан да талғампаз әдісі оны орналастыратын серверден хабарламаларды тікелей жіберу болып табылады. BuildMaster- жобаның бастапқы кодтарын өзгерту туралы. Бұл жағдайда әзірлеуші ​​жасағаннан кейін жасау, жоба репозиторийі бар сервер хабарлама жібереді BuildMaster-ж. Ал ол, өз кезегінде, объект құру арқылы оны кесіп тастайды PBChangeSource. Содан кейін бұл нысан келесіге ауыстырылады Жоспарлағыш, ол жобаны құру және оны тексеру қадамдарын белсендіреді. Бұл әдістің маңызды бөлігі жұмыс істейді ілгек- репозиторийдегі сервер сценарийлері. Сценарийде ілгек-a, әрекеттерді өңдеуге жауапты болған кезде жасау-e, утилитаға қоңырау шалу керек өзгерту жіберу және желі мекенжайын көрсетіңіз BuildMaster-А. Сондай-ақ тыңдайтын желі портын көрсету керек PBChangeSource. PBChangeSource, айтпақшы, бөлігі болып табылады BuildMaster-А. Бұл әдіс рұқсатты қажет етеді Admin-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 дана жасалады. Оның үстіне әрқайсысының өз түрі бар.

SingleBranchScheduler – кестедегі ең танымал сабақтардың бірі. Ол бір тармақты бақылайды және ондағы жазылған өзгеріс арқылы іске қосылады. Ол өзгерістерді көргенде, құрастыру сұрауын жіберуді кейінге қалдыра алады (арнайы параметрде көрсетілген мерзімге кейінге қалдыру treeStableTimer) Ішінде ат ішінде көрсетілетін кестенің атауын орнатады BuildBot-веб-интерфейс. IN Сүзгіні өзгерту сүзгі орнатылады, оны өткеннен кейін филиалдағы өзгерістер кестені құрылысқа сұраныс жіберуге шақырады. IN құрылысшы аттары аты көрсетілген құрылысшы-a, біз оны сәл кейінірек орнатамыз. Біздің жағдайда атау жоба атауымен бірдей болады: сіздің жоба.

ForceScheduler өте қарапайым нәрсе. Кестенің бұл түрі тінтуірді басу арқылы іске қосылады BuildBot-веб-интерфейс. Параметрлердің мәні бар SingleBranchScheduler.

PS № 3. Мүмкін бұл пайдалы болады
Мерзімді белгілі бір уақытқа бекітілген жиілікте жұмыс істейтін кесте. Қоңырау келесідей көрінеді


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

5.5 BuildFactory


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": "."}))

мерзімді BuildTimer осы кезеңділіктің уақытын секундтармен көрсетеді.

BuildFactory нақты жасайды салу, содан кейін құрылысшы жібереді Жұмысшы. The BuildFactory орындалатын қадамдарды көрсетеді Жұмысшы-ж. Қадамдар әдісті шақыру арқылы қосылады addStep

Бұл мысалдағы бірінші қосылған қадам git clean -d -f -f –x, содан кейін git checkout. Бұл әрекеттер параметрге енгізілген әдіс, ол анық көрсетілмеген, бірақ әдепкі мәнді білдіреді жаңа піскен... Параметр mode='өсімдік' файлдар орналасқан каталогтан екенін көрсетеді чек шығару, репозиторийде жоқ болса да, қол тигізбестен қалады.

Екінші қосылған қадам - ​​сценарийді шақыру сот параметрімен Сәлеметсіз бе жағында Жұмысшы-каталогтан /home/habr/worker/yourProject/build PATHONPATH= орта айнымалысымен... Осылайша, сіз өзіңіздің сценарийлеріңізді жазып, оларды жағында орындауға болады. Жұмысшы- әрбір қадам util.ShellCommand. Бұл сценарийлерді репозиторийге тікелей орналастыруға болады. Содан кейін сағат чек шығару-е олар түседі /home/habr/worker/yourProject/build. Дегенмен, екі «бірақ» бар:

  1. Жұмысшы кілтпен жасалуы керек --умас кейін орындау құқықтарын бұғаттамауы үшін шығу-а.
  2. жанында ит итеріңіз-e осы сценарийлердің сипатын көрсету керек өтелетінсондықтан кейінірек чек шығару-e Git сценарийін орындау құқығын жоғалтқан жоқ.

5.6 құрылысшы


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

Не туралы құрылысшы айтылды осында. Енді мен оны қалай жасау керектігі туралы толығырақ айтып беремін. BuilderConfig конструктор болып табылады құрылысшы. Мұндай дизайнерлер c['құрылысшылар'] бірнеше көрсетуге болады, себебі бұл нысандар парағы құрылысшы түрі. Енді мысалды қайта жазайық BuildBot, оны біздің міндетімізге жақындатады.


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

Енді мен параметрлер туралы айтып беремін BuilderConfig.

ат атын анықтайды құрылысшы-а. Міне, біз оны атадық сіздің жоба. Бұл қосулы дегенді білдіреді Жұмысшы- дәл осы жол құрылады /home/habr/worker/yourProject/build. Шедулер іздеп тұру құрылысшы дәл осы атпен.

жұмысшы аттары парағы бар Жұмысшы-s. Олардың әрқайсысын қосу керек c['жұмысшылар'].

фабрика - нақты салу, онымен байланысты құрылысшы. Ол нысанды жібереді салу туралы Жұмысшы осымен қамтылған барлық қадамдарды орындау үшін салу-а.

6. Өз конфигурацияңыздың мысалы

Міне, мен арқылы жүзеге асыруды ұсынатын жоба архитектурасының мысалы BuildBot
.

Біз нұсқаны басқару жүйесі ретінде қолданамыз svn. Репозиторийдің өзі қандай да бір бұлтта орналасады. Міне, бұлттың мекен-жайы svn.host/svn/yourProject/trunk. Бұлт астында svn тіркелгінің пайдаланушы аты бар: пайдаланушы, passwd: пароль. Қадамдарды көрсететін сценарийлер салу-а да филиалда болады svn, бөлек қалтада buildbot/worker_linux. Бұл сценарийлер сақталған сипаты бар репозиторийде орналасқан орындалатын.

BuildMaster и Жұмысшы сол хостта іске қосыңыз жоба.хост .BuildMaster файлдарын қалтада сақтайды /үй/хабр/шебер. Жұмысшы ол келесі жолда сақталады /үй/хабр/жұмысшы. Процесс байланысы BuildMaster-а және Жұмысшы-а хаттамаға сәйкес 4000 порт арқылы жүзеге асырылады BuildBot-а, яғни 'pb' хаттама.

Мақсатты жоба толығымен Python тілінде жазылған. Тапсырма - оның өзгерістерін қадағалау, орындалатын файлды жасау, құжаттаманы жасау және тестілеуді жүргізу. Сәтсіз болған жағдайда, барлық әзірлеушілер электрондық пошта арқылы сәтсіз әрекет бар екендігі туралы хабарлама жіберуі керек.

Веб-дисплей BuildBot үшін 80 портына қосыламыз жоба.хост. Apatch орнату қажет емес. Кітапхананың бір бөлігі ретінде Бұралған қазірдің өзінде веб-сервер бар, BuildBot пайдаланады.

Ішкі ақпаратты сақтау үшін BuildBot қолданамыз склит.

Пошта жіберу үшін хост қажет 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-а және Жұмысшы-а. Содан кейін осы файлды қойыңыз master.cfg в /үй/хабр/шебер.

Келесі қадам - ​​қызметті бастау BuildMaster-a


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 бұтақтарда. Ол сондай-ақ оларға салыстырмалы жолдарды ұсынады. Өз кезегінде split_file_alwaystrunk репозиторийде ғана бар екенін айту арқылы процесті жеңілдетеді магистраль.

В Жоспарлаушылар көрсетілген Сүзгіні өзгертукім көреді None және онымен тармақты байланыстырады магистраль арқылы берілген бірлестікке сәйкес split_file_alwaystrunk. Өзгерістерге жауап беру магистраль, Іске қосады құрылысшы атымен сіздің жоба.

қасиеттері мұнда әкімші процестің иесі ретінде құрастыру және сынақ нәтижелерінің тарату тізімдерін алуы үшін қажет.

Қадам салу-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 (мен салыстыруға болады джанго). BuildBot хабарлама мәтінін жасау процесінде мәндері үлгіге ауыстырылатын айнымалылар жиынтығы бар. Бұл айнымалылар {{ қос бұйра жақшалар }} ішіне алынған. Мысалы, қысқаша мазмұндама аяқталған операциялардың күйін, яғни сәтті немесе сәтсіздігін көрсетеді. А жобалар шығаратын болады сіздің жоба. Сонымен, басқару пәрмендерін пайдалану джинжа2, айнымалылар BuildBot-a және python жолын пішімдеу құралдары арқылы сіз өте ақпараттық хабарлама жасай аласыз.

MailNotifier келесі аргументтерді қамтиды.

fromaddr – барлығы ақпараттық бюллетень алатын мекенжай.

sendToInterestedUsers=True хабарламаны жасаған иесі мен пайдаланушыға жібереді жасау.

іздеу — ақпараттық бюллетеньді алатын пайдаланушылардың атына қосылуы керек жұрнақ. Сонымен Admin пайдаланушы ақпараттық бюллетеньді мекенжай бойынша қалай алатыны [электрондық пошта қорғалған].

релей хост сервер ашылатын хост атауын көрсетеді SMTPбір smptPort тыңдайтын порт нөмірін көрсетеді SMTP сервер.

режим = "ескерту" жіберу кем дегенде бір қадам болған жағдайда ғана жасалуы керек дейді салу-a, ол күйдің сәтсіздігімен немесе ескертуімен аяқталды. Сәтті болған жағдайда ақпараттық бюллетень жіберудің қажеті жоқ.

қосымша алушылар меншік иесі мен оны жүзеге асырған тұлғадан басқа пошта жөнелтілімі жіберілетін тұлғалардың тізімі бар. жасау.

хабарлама форматтаушысы хабар пішімін, оның үлгісін және қол жетімді айнымалылар жиынын көрсететін нысан джинжа2. сияқты опциялар wantProperties=Шын и wantSteps=Рас осы қол жетімді айнымалылар жиынын анықтаңыз.

['services']=[sendMessageToAll] қызметтердің тізімін ұсынады, олардың ішінде біздікі болады тілші.

Біз бұны жасадық! Құттықтаймын

Біз өз конфигурациямызды жасадық және ол қабілетті функционалдылықты көрдік. BuildBot. Бұл, менің ойымша, бұл құрал сіздің жобаңызды жасау үшін қажет пе екенін түсіну үшін жеткілікті. Сіз оған қызығасыз ба? Сізге пайдалы бола ма? Онымен жұмыс істеу ыңғайлы ма? Сонда бұл мақаланы бекер жазып отырғаным жоқ.

Және одан әрі. Мен кәсіби қауымдастықтың пайдаланғанын қалаймын BuildBot, кеңейді, нұсқаулықтар аударылды, мысалдар одан да көп болды.

Назарларыңызға рахмет. Іске сәт.

Ақпарат көзі: www.habr.com

пікір қалдыру