Ihe atụ mmejuputa iwu na-aga n'ihu na BuildBot

Ihe atụ mmejuputa iwu na-aga n'ihu na BuildBot
(Foto sitere na Kọmputa si Pixabay)

Ndewo!

Aha m bụ Evgeniy Cherkin, Abụ m onye mmemme na otu mmepe na ụlọ ọrụ Ngwuputa Polymetal.

Mgbe ị na-amalite nnukwu oru ngo ọ bụla, ị na-amalite iche: "Olee ngwa ngwa kacha mma iji dowe ya?" Ọrụ IT na-aga n'ọtụtụ ọkwa tupu ewepụta ụdị ọzọ. Ọ dị mma mgbe agbụ nke usoro ndị a na-akpaghị aka. A na-akpọ usoro akpaghị aka nke iwepụta ụdị ọhụrụ nke ọrụ IT n'onwe ya Ịnọgide na-aga n'ihu. BuildBot tụgharịrị bụrụ ezigbo onye enyemaka nye anyị n'imejuputa usoro a.

N'isiokwu a, ekpebiri m ịnye nkọwa nke ohere BuildBot. Kedu ihe ngwanrọ a nwere ike ime? Kedu ka esi agakwuru ya na otu esi eme ka ya na ya nwee mmekọrịta dị irè na-arụ ọrụ nkịtị? Ị nwere ike itinye ahụmịhe anyị n'onwe gị site na ịmepụta ọrụ na-arụ ọrụ maka iwulite na ịnwale ọrụ gị na igwe gị.

Ihe

Ihe

1. Gịnị mere BuildBot?
2. Echiche nke BuildMaster na-edu
3. Nwụnye
4. Nzọụkwụ mbụ

5. Nhazi. Ntụziaka nzọụkwụ site nzọụkwụ

5.1 BuildmasterConfig
Ndị ọrụ 5.2
5.3 mgbanwe_isi iyi
5.4 ndị na-emepụta ihe

5.5 BuildFactory
5.6 ndị na-ewu ụlọ

6. Ihe atụ nke nhazi nke gị

6.1 N'ụzọ nke nna gị ukwu.cfg
6.2 Na-arụ ọrụ na svn
6.3 Akwụkwọ ozi nye gị: enyere ndị nta akụkọ ikike ikwusa

Anyị mere ya! Ekele

1. Gịnị mere BuildBot?

Na mbụ na habr-e ahụrụ m akụkọ gbasara mmejuputa Ịnọgide na-aga n'ihu eji BuildBot. Dịka ọmụmaatụ, Nke a Achọpụtara m na ọ bụ ihe kacha enye nkọwa. Enwere ihe atụ ọzọ - mfe. Enwere ike iji akụkọ ndị a mee ihe ihe atụ si na ntuziakana mgbe nke ahụ gasịrị, na Bekee. Coupe na-eme ka mmalite dị mma. Mgbe ị gụchara isiokwu ndị a, ikekwe ị ga-achọ ihe ozugbo BuildBot ime.

Kwụsị! Onwere onye ji ya mee ihe n'ọrụ ha? Ọ tụgharịrị ee ọtụtụ tinye ya n'ọrụ n'ọrụ ha. Enwere ike ịchọta ihe atụ ike BuildBot na n'ime ebe nchekwa koodu Google.

Yabụ kedu ihe mgbagha ndị mmadụ na-eji Buildbot? E kwuwerị, enwere ngwaọrụ ndị ọzọ: CruiseControl и Jenkins. M ga-aza otu a. Maka ọtụtụ ọrụ Jenkins na eziokwu ga-ezuru. N'aka nke ya, BuildBot - na-eme mgbanwe karịa, ebe a na-edozi nsogbu ebe ahụ dị ka ọ dị na Jenkins. Nhọrọ bụ nke gị. Ma ebe ọ bụ na anyị na-achọ ngwá ọrụ maka oru ngo na-emepe emepe, gịnị kpatara na ị gaghị ahọrọ nke ga-ekwe ka, malite site na nzọụkwụ dị mfe, iji nweta usoro ụlọ nke nwere mmekọrịta na interface pụrụ iche.

Maka ndị e debere atụmatụ ha na Python, ajụjụ na-ebilite: "Gịnị kpatara na ị gaghị ahọrọ usoro ntinye nke nwere interface doro anya n'ihe gbasara asụsụ eji eme ihe?" Ma ugbu a ọ bụ oge iji gosipụta uru BuildBot.

Ya mere, anyị "Quartet ngwá ọrụ". Maka onwe m, achọpụtala m atụmatụ anọ BuildBot:

  1. Ọ bụ isi mmalite mepere emepe n'okpuru ikike GPL
  2. Nke a bụ iji Python dị ka ngwa nhazi na nkọwa nke omume achọrọ
  3. Nke a bụ ohere ịnweta nzaghachi site na igwe nke mgbakọ ahụ na-eme
  4. Ndị a bụ, n'ikpeazụ, ihe kacha nta achọrọ maka onye ọbịa. Nbunye chọrọ python na gbagọrọ agbagọ, na ọ dịghị achọ igwe mebere na igwe java.

2. Echiche nke BuildMaster na-edu

Ihe atụ mmejuputa iwu na-aga n'ihu na BuildBot

Central na ọrụ nkesa ije bụ BuildMaster. Ọ bụ ọrụ na:

  • na-esochi mgbanwe na oru ngo isi iyi osisi
  • na-eziga iwu nke ndị ọrụ na-arụ ọrụ kwesịrị ime iji wuo ọrụ ahụ ma nwalee ya
  • na-egosi ndị ọrụ gbasara nsonaazụ omume emere

BuildMaster ahaziri site na faịlụ nna ukwu.cfg. Faịlụ a dị na mgbọrọgwụ BuildMaster. E mesịa, m ga-egosi otú e si emepụta mgbọrọgwụ a. Faịlụ n'onwe ya nna ukwu.cfg nwere edemede Python na-eji oku BuildBot.

Ihe kacha mkpa na-esote BuildBot nwere aha Onye ọrụ. Enwere ike ịmalite ọrụ a na onye ọbịa ọzọ nwere OS dị iche, ma ọ bụ ikekwe na ebe BuildMaster. Ọ nwekwara ike ịdị na ebe a na-akwado akwadoro nke nwere ngwugwu na mgbanwe nke ya. Enwere ike ịkwado gburugburu ebe obibi ndị a site na iji ngwa python dịka virtualenv, igwe.

BuildMaster na-agbasa iwu nye onye ọ bụla Onye ọrụ-y, na ya, n'aka nke ya, na-emezu ha. Ya bụ, ọ na-apụta na usoro iwu ụlọ na ịnwale ọrụ nwere ike ịga n'ihu Onye ọrụ-e na-agba ọsọ Windows na onye ọrụ ọzọ na-agba Linux.

Lelee Koodu isi mmalite ọrụ na-eme na nke ọ bụla Onye ọrụ-e.

3. Nwụnye

Yabụ, ka anyị gawa. M ga-eji Ubuntu 18.04 dị ka onye ọbịa. Aga m etinye otu na ya BuildMaster-a na otu Onye ọrụ-a. Mana buru ụzọ tinye Python3.7:

sudo apt-get update
sudo apt-get install python3.7

Maka ndị chọrọ python3.7.2 kama 3.7.1, ị nwere ike ime ihe ndị a:


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

Nzọụkwụ ọzọ bụ ịwụnye Tweeted и BuildBot, yana ngwugwu na-enye gị ohere iji ọrụ ndị ọzọ BuildBot- Nke.


/*Все что под 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. Nzọụkwụ mbụ

Oge ịmepụta BuildMaster. Ọ ga-adị na folda anyị /home/habr/master.

mkdir master
buildbot create-master master # Собственно сдесь и создаем

Nzọụkwụ ọzọ. Ka anyị mepụta Onye ọrụ. Ọ ga-adị na folda anyị /home/habr/onye ọrụ.

mkdir worker
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker localhost:4000 yourWorkerName password

Mgbe ị na-agba ọsọ Onye ọrụ, mgbe ahụ na ndabara ọ ga-emepụta na /home/habr/onye ọrụ nchekwa na aha nke oru ngo, nke akọwapụtara na nna ukwu.cfg. Na na nchekwa na aha nke oru ngo ọ ga-emepụta ndekọ -ewu, ọ ga-anọgidekwa na-eme ya lelee. Akwụkwọ ndekọ aha maka Onye ọrụ- na ọ ga-abụ ndekọ /home/habr/YourProject/build.

"Igodo ọla edo
Ma ugbu a ihe m dere gara aga paragraf maka: a script na Master ga-achọ si Onye ọrụ-ma mere remotely na ndekọ a agaghị egbu n'ihi na script enweghị ikike na-agba ọsọ. Iji dozie ọnọdụ ahụ, ị ​​ga-achọ igodo --umask=0o22, nke machibidoro ide akwụkwọ na ndekọ aha a, mana ọ ga-ejigide ikike mmalite. Ma nke ahụ bụ ihe anyị chọrọ.

BuildMaster и Onye ọrụ guzobe njikọ na ibe gị. Ọ na-eme na ọ na-agbaji na Onye ọrụ na-eche ruo oge ụfọdụ maka nzaghachi si BuildMaster-A. Ọ bụrụ na enweghị nzaghachi, njikọ ahụ amaliteghachila. Igodo --edebe ndụ=60 dị nnọọ mkpa na-egosi oge mgbe nke jikọọ reboots.

5. Nhazi. Ntụziaka nzọụkwụ site nzọụkwụ

Nhazi BuildMaster a na-eme n'akụkụ igwe ebe anyị mere iwu ahụ kee-onye-nwe. N'ọnọdụ anyị, nke a bụ ndekọ /home/habr/master. faịlụ nhazi nna ukwu.cfg adịbeghị, mana iwu n'onwe ya emepụtala faịlụ ahụ nna ukwu.cmg. ihe nlele. Ịkwesịrị ịmegharị ya aha master.cfg. ihe nlele в nna ukwu.cfg

mv master.cfg.sample master.cfg

Ka anyị mepee nke a nna ukwu.cfg. Ka anyị lebakwa anya n’ihe ọ mejupụtara. Ma mgbe nke ahụ gasịrị, ka anyị gbalịa ịmepụta faịlụ nhazi nke anyị.

nna ukwu.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 - akwụkwọ ọkọwa okwu bụ isi nke faịlụ nhazi. A ga-etinyerịrị ya na faịlụ nhazi. Maka ịdị mfe iji, ewebata utu aha na koodu nhazi "c". Aha igodo в c["keyFromDist"] bụ ihe edoziri maka mmekọrịta ya BuildMaster. Maka igodo ọ bụla, a na-edochi ihe kwekọrọ dị ka uru.

Ndị ọrụ 5.2

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

Oge a anyị na-egosi BuildMaster-y ndepụta nke Onye ọrụ-s. Onwe m Onye ọrụ anyị kere elu, na-egosi gị-onye ọrụ-aha и password. Ugbu a ọ dị mkpa ka akọwapụta ha kama onye ọrụ atụ и rue .

5.3 mgbanwe_isi iyi

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
                            'git://github.com/buildbot/hello-world.git',
                             workdir='gitpoller-workdir', branch='master',
                             pollInterval=300))                

Site igodo mgbanwe_source akwụkwọ ọkọwa okwu c anyị na-enweta ohere na ndepụta ebe anyị chọrọ itinye ihe na-eme ntuli aka ebe nchekwa na koodu isi mmalite. Ọmụmaatụ a na-eji ebe nchekwa Git nke a na-enyocha n'oge ụfọdụ.

Arụmụka mbụ bụ ụzọ nke ebe nchekwa gị.

onye ọrụ na-anọchi anya ụzọ na nchekwa ebe dị n'akụkụ Onye ọrụ- onye ikwu na ụzọ /home/habr/worker/YourProject/build git ga-echekwa ụdị nchekwa nchekwa mpaghara.

alaka nwere otu alaka ụlọ ọrụ a kapịrị ọnụ na ebe nchekwa nke ekwesịrị ịgbaso.

etiti oge nwere ọnụọgụ nke sekọnd mgbe nke ahụ gasịrị BuildMaster ga-enyocha ebe nchekwa maka mgbanwe.

Enwere ụzọ dị iche iche iji soro mgbanwe na ebe nchekwa ọrụ.

Ụzọ kachasị mfe bụ Ntuli, nke pụtara na BuildMaster na-eme ntuli aka nke ihe nkesa site na ebe nchekwa oge. Ọ bụrụ eme gosipụtara mgbanwe na ebe nchekwa ahụ, mgbe ahụ BuildMaster ga-emepụta ihe dị n'ime na-egbu oge Change ma ziga ya na onye njikwa mmemme Onye nhazi, nke ga-amalite usoro iji wuo ma nwalee ọrụ ahụ Onye ọrụ-e. A ga-egosipụta n'ime usoro ndị a update ebe nchekwa. Kpọmkwem na Onye ọrụNke a ga-emepụta nnomi nke ebe nchekwa. A ga-ekpuchi nkọwa nke usoro a n'okpuru na ngalaba abụọ na-esote. (5.4 и 5.5).

Ụzọ kachasị mma nke nsuso mgbanwe na ebe nchekwa bụ izipu ozi ozugbo site na sava na-anabata ya na. BuildMaster- gbasara ịgbanwe koodu isi mmalite ọrụ. N'okwu a, ozugbo onye nrụpụta na-eme eme, ihe nkesa nwere ebe nchekwa ọrụ ga-eziga ozi BuildMaster-y. Na ya, n'aka nke ya, ga-egbochi ya site n'ịmepụta ihe PBCHangeSource. Na-esote, a ga-ebufe ihe a na ya Onye nhazi, nke na-arụ ọrụ nzọụkwụ iji wuo oru ngo ma nwalee ya. Otu akụkụ dị mkpa nke usoro a na-arụ ọrụ nko-ihe nkesa scripts na ebe nchekwa. Na edemede nko-a, na-ahụ maka nhazi omume mgbe eme-e, ịkwesịrị ịkpọ akụrụngwa mgbanwe mgbanwe ma kọwaa adreesị netwọk BuildMaster-A. Ịkwesịrị ịkọwapụta ọdụ ụgbọ mmiri nke ga-ege ntị PBCHangeSource. PBCHangeSource, n'agbanyeghị, bụ akụkụ BuildMaster-A. Usoro a ga-achọ ikike admin-a na ihe nkesa ebe ebe nchekwa ọrụ dị. Ị ga-ebu ụzọ mee nkwado ndabere nke ebe nchekwa ahụ.

5.4 ndị na-emepụta ihe


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"]))

ndị nhazi oge - nke a bụ ihe na-eme ka ọ bụrụ ihe na-akpali akpali nke na-amalite usoro mgbakọ dum na ule nke ọrụ ahụ.
Ihe atụ mmejuputa iwu na-aga n'ihu na BuildBot

Mgbanwe ndị ahụ e dekọrọ mgbanwe_source, gbanwere na usoro ọrụ BuildBot-a ịjụ Change na ugbu a ọ bụla Sheduler dabere na ha, ọ na-ewulite arịrịọ ịmalite usoro iwu ụlọ ọrụ. Otú ọ dị, ọ na-ekpebikwa mgbe a na-ebufe arịrịọ ndị a n'ihu n'ahịrị. Ihe Nrụpụta na-echekwa a kwụ n'ahịrị nke arịrịọ na tracks ala nke ugbu a mgbakọ na iche iche Onye ọrụ-e. Nrụpụta dị na BuildMaster-e na na Onye ọrụ-e. Ọ na-ezigara ya BuildMaster-a na Onye ọrụ- na ugbua kpọmkwem -ewu - usoro usoro nke a ga-agbaso.
Anyị na-ahụ na ugbu a ihe atụ dị otú ahụ ndị nhazi oge 2 iberibe na-kere. Ọzọkwa, onye ọ bụla nwere ụdị nke ya.

Nhazi otu alaka - otu n'ime klaasị kachasị ewu ewu na nhazi oge. Ọ na-ekiri otu alaka ụlọ ọrụ ma na-akpalite ya site na mgbanwe edere na ya. Mgbe ọ hụrụ mgbanwe, ọ nwere ike igbu oge izipu arịrịọ ihe owuwu (nkwụsị maka oge akọwapụtara na paramita pụrụ iche OsisiStableTimer). N’ime aha na-esetịpụ aha nhazi oge nke a ga-egosipụta na ya BuildBot- interface weebụ. N'ime GbanweeFilter a na-edozi nzacha, mgbe ọ gafechara nke na-agbanwe na alaka ụlọ ọrụ na-eme ka usoro ihe omume ziga arịrịọ maka owuwu. N'ime aha ndị nrụpụta aha na-egosi na-ewu-a, nke anyị ga-edozi obere oge. Aha dị n'ọnọdụ anyị ga-adị ka aha ọrụ ahụ: Project gị.

ForceScheduler ihe dị nnọọ mfe. Ụdị nhazi oge a na-ebute site na òké ọpịpị BuildBot- interface weebụ. Paragraf ndị ahụ nwere otu isi ihe dị na ya Nhazi otu alaka.

PS Nọmba 3. Ma eleghị anya, ọ ga-aba uru
Oge bụ usoro nhazi oge na-aga n'otu oge a kara aka. Oku a yiri ihe a


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

oge BuildTimer na-akọwapụta oge nke oge a na sekọnd.

Ụlọ ọrụ BuildFactory na-emepụta kpọmkwem -ewu, nke ahụ na-ewu na-eziga na Onye ọrụ. The Ụlọ ọrụ BuildFactory na-egosi usoro a ga-agbaso Onye ọrụ-y. A na-agbakwunye nzọụkwụ site na ịkpọ usoro ahụ tinye nzọụkwụ

Nzọụkwụ mbụ agbakwunyere na ihe atụ a bụ git dị ọcha -d -f -f –xmgbe ahụ git ndenye ọpụpụ. Agụnyere omume ndị a na oke usoro, nke ekwughị nke ọma mana na-egosi uru ndabara ọhụrụ... Oke mode = 'nkwalite' na-egosi na faịlụ ndị si na ndekọ ebe chechout, mgbe ọ na-efu site na ebe nchekwa, nọgide na-emetụghị ya aka.

Nzọụkwụ nke abụọ agbakwunyere bụ ịkpọ edemede ahụ ikpe na oke Nnọọ n'akụkụ Onye ọrụ-a site na ndekọ /home/habr/worker/YourProject/build na mgbanwe gburugburu ebe obibi PATHONPATH=... Ya mere, ị nwere ike dee edemede nke gị wee gbuo ha n'akụkụ Onye ọrụ-a nzọụkwụ ọ bụla util.ShellCommand. Enwere ike itinye edemede ndị a ozugbo na ebe nchekwa. Mgbe ahụ na chechout-e ha ga-adaba /home/habr/worker/YourProject/build. Otú ọ dị, mgbe ahụ, e nwere "ma" abụọ:

  1. Onye ọrụ ga-eji igodo kee ya --mmask nke mere na ọ ghara igbochi ikike igbu mgbe lelee- Nke.
  2. na gbaa ọsọ-e nke ndị a scripts ị chọrọ ezipụta ihe onwunwe nke ukwuuka emechaa chechout-e tufuo ikike ime script Git.

5.6 ndị na-ewu ụlọ


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

Banyere ihe bụ Nrụpụta a gwara ya ebe a. Ugbu a, m ga-agwa gị n'ụzọ zuru ezu banyere otu esi emepụta ya. BuilderConfig bụ onye nrụpụta na-ewu. Ndị na-emepụta ihe dị otú ahụ na c['ndị na-ewu ụlọ'] ị nwere ike ịkọwapụta ọtụtụ, ebe ọ bụ na nke a bụ mpempe akwụkwọ na-ewu ụdị. Ugbu a ka anyị degharịa ihe atụ si BuildBot, na-eweta ya nso na ọrụ anyị.


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

Ugbu a, m ga-agwa gị gbasara paramita BuilderConfig.

aha ezipụta aha na-ewu-a. Ebe a ka anyị kpọrọ ya aha Project gị... Nke a pụtara na na Onye ọrụA ga-ekekwa ụzọ a /home/habr/worker/YourProject/build. Sheduler na-achọ na-ewu naanị site na aha a.

aha ndị ọrụ nwere mpempe akwụkwọ Onye ọrụ-s. Nke ọ bụla n'ime ha ga-agbakwunyere c ['ndị ọrụ'].

factory - kpọmkwem -ewu, nke ejikọtara ya na-ewu. Ọ ga-eziga ihe -ewu on Onye ọrụ iji mezue usoro niile agụnyere na nke a -ewu- Nke.

6. Ihe atụ nke nhazi nke gị

Nke a bụ ihe atụ ngo architecture nke m na-atụ aro imejuputa site BuildBot
.

Anyị ga-eji dị ka usoro njikwa ụdị Ugboro abụọ. Ebe nchekwa ahụ n'onwe ya ga-adị n'ụdị igwe ojii. Nke a bụ adreesị igwe ojii a svn.host/svn/YourProject/trunk. Na ígwé ojii n'okpuru Ugboro abụọ enwere aha njirimara akaụntụ: onye ọrụ, passwd: password. Ederede na-anọchi anya nzọụkwụ -ewu-a ga-adikwa na alaka Ugboro abụọ, na nchekwa dị iche buildbot/onye ọrụ_linux. Edemede ndị a dị n'ime ebe nchekwa yana akụrụngwa echekwara na -arụ ọrụ.

BuildMaster и Onye ọrụ na-agba ọsọ na otu onye ọbịa project.onye ọbịa .BuildMaster na-echekwa faịlụ ya na nchekwa /home/habr/master. Onye ọrụ A na-echekwa ya n'ụzọ na-esonụ /home/habr/onye ọrụ. Usoro nkwukọrịta BuildMaster-a na Onye ọrụ-a na-eme site n'ọdụ ụgbọ mmiri 4000 dị ka protocol si dị BuildBot-a, ya bu 'pb' protocol.

Edere ihe a na-achọsi ike na Python kpamkpam. Ọrụ a bụ ịgbaso mgbanwe ya, mepụta faịlụ enwere ike ime ya, mepụta akwụkwọ, yana mee nnwale. Ọ bụrụ na ọdịda dara, ndị nrụpụta niile kwesịrị izipu ozi site na email na-ekwupụta na enwere mmemme agaghị eme nke ọma.

Ngosipụta webụ BuildBot anyị ga-ejikọta na ọdụ ụgbọ mmiri 80 maka project.onye ọbịa. Ọ dịghị mkpa ịwụnye Apatch. Dị ka akụkụ nke ọbá akwụkwọ kpara akpa enweelarị sava weebụ, BuildBot na-eji ya.

Ka ịchekwaa ozi ime maka BuildBot Ọ dị mkpa Oghere.

Achọrọ onye nnabata maka izipu ozi smtp.ngalaba gị - ọ na-enye ohere izipu akwụkwọ ozi site na mail [email protected] na-enweghị nyocha. Ọzọkwa na onye ọbịa 'SMTP ' A na-anụ nkeji na post 1025.

Enwere mmadụ abụọ na-etinye aka na usoro a: admin и onye ọrụ. na-elekọta BuildBot. onye ọrụ bụ onye na-eme ihe eme-s.

A na-emepụta faịlụ nwere ike ime site na pyinstaller. A na-ewepụta akwụkwọ site na doxygen.

Maka ihe owuwu a, edere m nke a: nna ukwu.cfg:

nna ukwu.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"
}

Akpa ị chọrọ ike BuildMaster-a na Onye ọrụ-a. Mgbe ahụ mado faịlụ a nna ukwu.cfg в /home/habr/master.

Nzọụkwụ ọzọ bụ ịmalite ọrụ BuildMastera


sudo buildbot start /home/habr/master

Mgbe ahụ malite ọrụ Onye ọrụ-a


buildbot-worker start /home/habr/worker

Njikere! Ugbu a Buildbot ga-esochi mgbanwe na ịkpalite eme-y n'ime Ugboro abụọ, Na-arụ usoro nke iwulite na ịnwale ọrụ na ihe owuwu dị n'elu.

N'okpuru ebe a, m ga-akọwa ụfọdụ atụmatụ nke n'elu nna ukwu.cfg.

6.1 N'ụzọ nke nna gị ukwu.cfg


Mgbe m na-ede nna ukwu.cfg A ga-eme ọtụtụ mperi, yabụ ịgụ faịlụ ndekọ ga-achọrọ. A na-echekwa ya dị ka BuildMaster-ec ụzọ zuru oke /home/habr/master/twistd.log, na n'akụkụ Onye ọrụ-a nwere uzo zuru oke /home/habr/worker/twistd.log. Ka ị na-agụ njehie ahụ ma dozie ya, ị ga-achọ ịmalitegharị ọrụ ahụ BuildMaster-a. Nke a bụ otu esi eme ya:


sudo buildbot stop /home/habr/master
sudo buildbot upgrade-master /home/habr/master
sudo buildbot start /home/habr/master

6.2 Na-arụ ọrụ na 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)

Mbụ, ka anyị lee anya svn_poller. Nke a ka bụ otu interface ahụ, na-eme ntuli aka mgbe niile n'otu oge n'otu nkeji. N'okwu a svn_poller na-enweta naanị alaka ụlọ ọrụ akpati. Oke omimi split_file=util.svn.split_file_alwaysrunk na-esetịpụ iwu: otu esi agbaji usoro nchekwa Ugboro abụọ na alaka. Ọ na-enyekwa ha ụzọ ndị ikwu. N'aka ya split_file_alwaysstrunk na-eme ka usoro ahụ dị mfe site n'ikwu na ebe nchekwa ahụ nwere naanị akpati.

В Nhazi oge egosi GbanweeFilteronye na-ahụ Ọ dịghị onye na-ejikọta alaka na ya akpati dị ka e nyere mkpakọrịta site split_file_alwaysstrunk. Na-aza mgbanwe na akpati, Mwepụta na-ewu na aha Project gị.

Njirimara ebe a ọ dị mkpa ka admin na-enweta mail ndepụta nke ewu na ule pụta dị ka onye nwe usoro.

Nzọụkwụ -ewu-a lelee ike ihichapụ kpam kpam faịlụ ọ bụla dị na mpaghara ụdị nke ebe nchekwa Onye ọrụ-A. Wee mezuo ya mmelite svn. A na-ahazi ọnọdụ ahụ site na oke mode=zuru oke, usoro = ọhụrụ... Oke haltOnTailure na-ekwu na ọ bụrụ mmelite svn a ga-egbu ya na njehie, mgbe ahụ, a ga-akwụsịtụ usoro iwu ụlọ na ule niile, ebe ọ bụ na omume ndị ọzọ adịghị enwe isi.

6.3 Akwụkwọ ozi nye gị: enyere ndị nta akụkọ ikike ikwusa


akuko bụ ọrụ maka izipu ọkwa site na email.


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]

O nwere ike izipu ozi ụzọ dị iche iche.

MailNotifier na-eji email izipu ọkwa.

template_html na-esetịpụ ndebiri ederede maka akwụkwọ akụkọ. A na-eji HTML mepụta akara. A na-emezi ya site na injin jinja2 (nwere ike iji ya tụnyere django). BuildBot nwere nhazi nke mgbanwe ndị a na-edochi ụkpụrụ ya n'ime template n'oge usoro nke ịmepụta ederede ozi. Akpọchiri mgbanwe ndị a n'ime {{ braces mpịaji okpukpu abụọ}}. Ọmụmaatụ, nchịkọta na-egosiputa ọkwa nke arụmọrụ emechara, ya bụ, ịga nke ọma ma ọ bụ ọdịda. A oru ngo ga-arụpụta Project gị. Yabụ, na-eji iwu njikwa na jinja2, mgbanwe BuildBot-a na Python string formatting tools, ị nwere ike ịmepụta ozi na-enye nkọwa.

MailNotifier nwere arụmụka ndị a.

site na addr - adreesị nke onye ọ bụla ga-enweta akwụkwọ akụkọ.

sendToInterestUsers=Eziokwu na-ezigara onye nwe ya na onye ọrụ mere ozi eme.

lelie anya — a suffix nke a ga-agbakwunyere na aha ndị ọrụ na-anata akwụkwọ akụkọ. Ya mere admin ka onye ọrụ ga-esi nweta akwụkwọ akụkọ na adreesị [email protected].

relayhost ezipụta aha nnabata nke emepere ihe nkesa na ya SMTPnwere smptPort ezipụta nọmba ọdụ ụgbọ mmiri na-ege ntị SMTP ihe nkesa.

mode = "ịdọ aka na ntị" na-ekwu na a ga-eme nzipu ozi naanị ma ọ bụrụ na enwere opekata mpe otu nzọụkwụ -ewu-a, nke kwụsịrị na ọdịda ọkwa ma ọ bụ ịdọ aka ná ntị. N'ihe banyere ihe ịga nke ọma, ọ dịghị mkpa izipu akwụkwọ akụkọ.

ndị nnata ọzọ nwere ndepụta nke ndị mmadụ kwesịrị iziga ozi nzipu ozi na mgbakwunye na onye nwe ya na onye rụrụ ọrụ ahụ eme.

MessageFormatter bụ ihe na-akọwapụta usoro ozi, ndebiri ya, yana ụdị mgbanwe dị na ya jinja2. Nhọrọ dị ka wantProperties=Eziokwu и wantSteps=Eziokwu kọwapụta usoro mgbanwe dịnụ.

ya na['ọrụ']=[sendMessageToAll] na-enye ndepụta nke ọrụ, nke anyị ga-abụ akụkọ.

Anyị mere ya! Ekele

Anyị mepụtara nhazi nke anyị wee hụ ọrụ ọ nwere ike. BuildBot. Nke a, echere m, zuru ezu iji ghọta ma ngwá ọrụ a dị mkpa iji mepụta ọrụ gị. Ị nwere mmasị na ya? Ọ ga-abara gị uru? Ọ dị ya mma ịrụ ọrụ? Mgbe ahụ, anaghị m ede akụkọ a n'efu.

Na n'ihu. Ọ ga-amasị m ka obodo ndị ọkachamara jiri BuildBot, ghọrọ obosara, a sụgharịrị akwụkwọ ntuziaka, na e nwekwara ọbụna ihe atụ ndị ọzọ.

Daalụ niile maka nlebara anya gị. Jisie ike.

isi: www.habr.com

Tinye a comment