He laʻana hoʻokō o ka Hoʻohui Hoʻomau me BuildBot

He laʻana hoʻokō o ka Hoʻohui Hoʻomau me BuildBot
(Kiʻi na Mea hana kamepiula mai Pixabay)

Alohaʻoe!

O_____ koʻu inoa Evgeniy Cherkin, He mea papahana wau ma kahi hui hoʻomohala ma kahi hui mining Pāpale.

Ke hoʻomaka nei i kekahi papahana nui, hoʻomaka ʻoe e noʻonoʻo: "He aha ka polokalamu maikaʻi e hoʻohana ai e mālama?" Hele kekahi papahana IT ma mua o ka hoʻokuʻu ʻana i ka mana hou. He mea maikaʻi ke hoʻokaʻawale ʻia ke kaulahao o kēia mau pae. Ua kapa ʻia ke kaʻina hana automate o ka hoʻokuʻu ʻana i kahi mana hou o kahi papahana IT ponoʻī Ka hoʻomau holomua. BuildBot ua lilo ia i mea kōkua maikaʻi no mākou i ka hoʻokō ʻana i kēia kaʻina hana.

Ma kēia ʻatikala ua hoʻoholo wau e hāʻawi i kahi ʻike o nā mea hiki BuildBot. He aha ka mea hiki i kēia polokalamu? Pehea e hoʻokokoke aku ai iā ia a pehea e kūkulu ai i kahi HANA HANA maʻamau me ia? Hiki iā ʻoe ke hoʻohana i kā mākou ʻike iā ʻoe iho ma ka hana ʻana i kahi lawelawe hana no ke kūkulu ʻana a hoʻāʻo i kāu papahana ma kāu mīkini.

Nā mea

Nā mea

1. No ke aha ʻo BuildBot?
2. Manaʻo alakaʻi ʻia e BuildMaster
3. Hoʻokomo
4. Nā ʻanuʻu mua

5. Hoʻonohonoho. ʻAi ʻanuʻu i ka papa ʻaina

5.1 BuildmasterConfig
Hanahana 5.2
5.3 change_source
5.4 mea hoʻonohonoho

5.5 BuildFactory
5.6 mea kukulu hale

6. Ka laʻana o kāu hoʻonohonoho ponoʻī

6.1 Ma ke ala i kou haku.cfg
6.2 Hana pū me svn
6.3 Palapala iā ʻoe: ua ʻae ʻia nā mea hoʻolaha e haʻi aku

Ua hana mākou! Hoʻomaikaʻi

1. No ke aha ʻo BuildBot?

Ma mua ma ka habr-e ua ʻike au i nā ʻatikala e pili ana i ka hoʻokō Ka hoʻomau holomua hoʻohana ʻana BuildBot. E laʻa, ʻO kēia Ua loaʻa iaʻu ka ʻike nui loa. Aia kekahi laʻana - maʻalahi. Hiki ke hoʻomaʻamaʻa ʻia kēia mau ʻatikala laʻana mai ka manuala me ka ia ma hope o kēlā, ma ka ʻōlelo Pelekania. Hoʻomaka maikaʻi ka coupe. Ma hope o ka heluhelu ʻana i kēia mau ʻatikala, makemake koke ʻoe i kekahi mea BuildBot e hana.

Kāohi! Ua hoʻohana maoli kekahi i kā lākou papahana? ʻAe lehulehu hoʻohana ʻia i kā lākou mau hana. Hiki ke loaʻa nā hiʻohiʻona использования BuildBot a ma nā waihona code Google.

No laila he aha ka manaʻo o ka poʻe e hoʻohana nei Buildbot? Ma hope o nā mea a pau, aia nā mea hana ʻē aʻe: CruiseControl и ʻO Jenkins. E pane au penei. No ka nui o nā hana ʻO Jenkins a lawa ka oiaio. I kona manawa, BuildBot - ʻoi aku ka maʻalahi, ʻoiai e hoʻoponopono ʻia nā pilikia ma laila e like me ka maʻalahi ʻO Jenkins. Nou ka koho. Akā, no ka mea, ke ʻimi nei mākou i kahi mea hana no ka hoʻomohala ʻana i ka papahana pahuhopu, no ke aha e koho ʻole ai i kahi e ʻae ai, e hoʻomaka ana mai nā pae maʻalahi, e kiʻi i kahi ʻōnaehana kūkulu i loaʻa ka launa pū ʻana a me kahi kikowaena kūʻokoʻa.

No ka poʻe i kākau ʻia ka papahana i manaʻo ʻia ma ka python, ua kū mai ka nīnau: "No ke aha e koho ʻole ai i kahi ʻōnaehana hoʻohui i loaʻa ka ʻike ma ke ʻano o ka ʻōlelo i hoʻohana ʻia ma ka papahana?" A ʻo ka manawa kēia e hōʻike i nā pōmaikaʻi BuildBot.

No laila, ʻo kā mākou "quartet instrumental". Noʻu iho, ua ʻike au i ʻehā mau hiʻohiʻona BuildBot:

  1. ʻO ia kahi hoʻolālā open source ma lalo o ka laikini GPL
  2. ʻO kēia ka hoʻohana ʻana i ka python ma ke ʻano he mea hana hoʻonohonoho a me ka wehewehe ʻana i nā hana i koi ʻia
  3. He manawa kūpono kēia e loaʻa ai kahi pane mai ka mīkini kahi e hui ai
  4. ʻO kēia ka mea hope loa, nā koi liʻiliʻi no kahi Host. Pono ka deployment i ka python a me ka wili, a ʻaʻole pono i ka mīkini virtual a me ka mīkini java.

2. Manaʻo alakaʻi ʻia e BuildMaster

He laʻana hoʻokō o ka Hoʻohui Hoʻomau me BuildBot

ʻO ke kikowaena o ka hoʻolālā hoʻoili hana BuildMaster. He lawelawe ia e:

  • mālama pono nā hoʻololi i ke kumu kumu papahana
  • hoʻouna nā kauoha e hoʻokō ʻia e ka lawelawe Worker e kūkulu i ka papahana a hoʻāʻo
  • hoʻolaha mea hoʻohana e pili ana i nā hopena o nā hana i hana ʻia

BuildMaster hoʻonohonoho ʻia ma o ka faila haku.cfg. Aia kēia faila ma ke kumu BuildMaster. Ma hope e hōʻike wau i ka hana ʻana o kēia aʻa. ʻO ka faila ponoʻī haku.cfg Loaʻa i kahi palapala python e hoʻohana ana i nā kelepona BuildBot.

ʻO ka mea nui aʻe BuildBot he inoa Hana. Hiki ke hoʻokuʻu ʻia kēia lawelawe ma kahi hoʻokipa ʻē aʻe me kahi OS ʻē aʻe, a i ʻole ma kahi o kahi BuildMaster. Hiki iā ia ke noho i loko o kahi kaiapuni virtual i hoʻomākaukau kūikawā ʻia me kāna mau pūʻolo a me nā loli. Hiki ke hoʻomākaukau ʻia kēia mau kaiapuni virtual me ka hoʻohana ʻana i nā pono python like virtualenv, venv.

BuildMaster hoʻolaha i nā kauoha i nā mea a pau Hana-y, a nana no e hooko. ʻO ia hoʻi, hiki ke hele i ke kaʻina hana o ke kūkulu ʻana a me ka hoʻāʻo ʻana i kahi papahana Hana-e holo ana i ka Windows a ma kekahi Worker e holo ana i Linux.

Huli aku Loaʻa nā code kumu papahana ma kēlā me kēia Hana-e.

3. Hoʻokomo

No laila, e hele kāua. E hoʻohana wau iā Ubuntu 18.04 ma ke ʻano he mea hoʻokipa. E kau au i hoʻokahi ma luna BuildMaster-a a hookahi Hana-a. Akā pono ʻoe e hoʻokomo i ka python3.7:

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

No ka poʻe makemake i ka python3.7.2 ma kahi o 3.7.1, hiki iā ʻoe ke hana i kēia:


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

ʻO ka hana aʻe e hoʻokomo Tweeted и BuildBot, a me nā pūʻolo e ʻae iā ʻoe e hoʻohana i nā hana hou BuildBot-ʻO ka.


/*Все что под 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. Nā ʻanuʻu mua

Ka manawa e hana ai BuildMaster. Aia ia ma kā mākou waihona /home/habr/master.

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

Kaʻina aʻe. E hana kākou Hana. Aia ia ma kā mākou waihona /home/habr/worker.

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

Ke holo ʻoe Hana, a laila ma ka paʻamau e hoʻokumu i loko /home/habr/worker waihona me ka inoa o ka papahana, i kuhikuhi ʻia ma haku.cfg. A i loko o ka waihona me ka inoa o ka papahana e hana ia i papa kuhikuhi hana, a e hoʻomau i ka hana a Kūʻai. Papa kuhikuhi hana no Hana-a e lilo ia i papa kuhikuhi /home/habr/yourProject/build.

“Kī gula
A i kēia manawa ka mea aʻu i kākau ai i ka paukū mua no: kahi palapala i ka haku e koi mai Hana-a hana mamao ʻia i loko o kēia papa kuhikuhi ʻaʻole e hoʻokō ʻia no ka mea ʻaʻohe palapala ʻae e holo. No ka hoʻoponopono i ke kūlana, pono ʻoe i kahi kī --umask=0o22, ka mea e pāpā ana i ke kākau ʻana i kēia papa kuhikuhi, akā e mālama ʻia nā kuleana hoʻomaka. A ʻo ia wale nō kā mākou e pono ai.

BuildMaster и Hana e hoʻopaʻa i ka pilina me kekahi. Ua haki ia a Hana e kali ana no ka pane mai BuildMaster-A. Inā ʻaʻohe pane, hoʻomaka hou ka pilina. Ki --keepalive=60 pono e hōʻike i ka manawa ma hope hoʻohui hana hou.

5. Hoʻonohonoho. ʻAi ʻanuʻu i ka papa ʻaina

Kauoa BuildMaster lawe ʻia ma ka ʻaoʻao o ka mīkini kahi i hoʻokō ai mākou i ke kauoha haku-kumu. I kā mākou hihia, he papa kuhikuhi kēia /home/habr/master. waihona hoʻonohonoho haku.cfg ʻAʻole i loaʻa i kēia manawa, akā ua hana mua ke kauoha i ka faila master.cmg.sample. Pono ʻoe e hoʻololi i ka inoa master.cfg.sample в haku.cfg

mv master.cfg.sample master.cfg

E wehe kākou i kēia haku.cfg. A e nānā kākou i ke ʻano o ia mea. A ma hope o kēlā, e hoʻāʻo mākou e hana i kā mākou faila hoʻonohonoho ponoʻī.

haku.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 - puke wehewehe ʻōlelo kumu o ka faila hoʻonohonoho. Pono e hoʻokomo i ka faila hoʻonohonoho. No ka maʻalahi o ka hoʻohana ʻana, hoʻokomo ʻia kahi inoa inoa ma ka code hoʻonohonoho "c". Nā poʻo inoa o nā kī в c["keyFromDist"] he mau mea paʻa no ka launa pū ʻana me BuildMaster. No kēlā me kēia kī, hoʻololi ʻia ka mea pili ma ke ʻano he waiwai.

Hanahana 5.2

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

Hōʻike mākou i kēia manawa BuildMaster-y papa inoa o Hana-s. ʻO wau iho Hana hana mākou kiekie, e hoike ana inoa-kauahana и hua huna. I kēia manawa pono lākou e kuhikuhi ʻia hana hoʻohālike и kekahi .

5.3 change_source

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

Ma ke kī hoʻololi_kumu puke weheweheʻōlelo c loaʻa iā mākou ke komo i ka papa inoa kahi a mākou e makemake ai e kau i kahi mea e koho ai i ka waihona me ka code kumu o ka papahana. Hoʻohana ka laʻana i kahi waihona Git i koho ʻia i kekahi mau manawa.

ʻO ka hoʻopaʻapaʻa mua ke ala i kāu waihona.

workdir hōʻike i ke ala i ka waihona ma ka ʻaoʻao Hana-a pili i ke ala /home/habr/worker/yourProject/build git e mālama i ka mana kūloko o ka waihona.

lala loaʻa i kahi lālā kikoʻī i ka waihona e pono e hahai ʻia.

pollInterval aia ka helu o nā kekona ma hope BuildMaster e koho i ka waihona no nā loli.

Nui nā ala e nānā i nā loli i ka waihona o kahi papahana.

ʻO ke ala maʻalahi loa E koho, ʻo ia hoʻi ka manaʻo BuildMaster koho i ke kikowaena me ka waihona. Ina hana hōʻike i nā loli i ka waihona, a laila BuildMaster e hana i kekahi mea i loko me kekahi lohi ho'ololi a hoʻouna aku i ka mea mālama hanana Hoʻomākaukau, e hoʻomaka i nā ʻanuʻu e kūkulu a hoʻāʻo i ka papahana ma Hana-e. Ma waena o kēia mau ʻanuʻu e hōʻike ʻia IeAIIeXIAaIEN waihona waihona. Ma ka pololei HanaE hana kēia i kope kūloko o ka waihona. E uhi ʻia nā kikoʻī o kēia kaʻina hana ma lalo o nā ʻāpana ʻelua e hiki mai ana. (5.4 и 5.5).

ʻO kahi ala ʻoi aku ka nani o ka nānā ʻana i nā loli i kahi waihona ʻo ka hoʻouna pololei ʻana i nā memo mai ke kikowaena e hoʻokipa nei iā ia BuildMaster- e pili ana i ka hoʻololi ʻana i nā code kumu papahana. I kēia hihia, i ka wā e hana ai ka mea hoʻomohala hana, e hoʻouna aku ke kikowaena me ka waihona papahana i kahi leka BuildMaster-y. A ʻo ia hoʻi, e kāʻili iā ia ma ka hana ʻana i kahi mea PBCchangeSource. A laila, e hoʻoili ʻia kēia mea i Hoʻomākaukau, e ho'ā ana i nā ʻanuʻu e kūkulu i ka papahana a hoʻāʻo iā ia. ʻO kahi mea nui o kēia ʻano hana ke hana pū me makau- nā palapala kikowaena ma ka waihona. Ma ka palapala makau-a, kuleana no ka hooponopono ana i na hana i ka wa hana-e, pono ʻoe e kāhea i ka pono hoʻololi hoʻouna a e kuhikuhi i ka helu wahi pūnaewele BuildMaster-A. Pono ʻoe e kuhikuhi i ke awa pūnaewele e hoʻolohe ai PBCchangeSource. PBCchangeSource, ma ke ala, he hapa BuildMaster-A. Pono kēia ʻano hana i ka ʻae Keʻena Luna-a ma ke kikowaena kahi i loaʻa ai ka waihona papahana. Pono mua ʻoe e hoʻopaʻa i ka waihona.

5.4 mea hoʻonohonoho


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

nā mea hoʻonohonoho - he mea kēia e hoʻomaka ai i ke kaulahao holoʻokoʻa o ka hui ʻana a me ka hoʻāʻo ʻana o ka papahana.
He laʻana hoʻokō o ka Hoʻohui Hoʻomau me BuildBot

ʻO kēlā mau hoʻololi i hoʻopaʻa ʻia hoʻololi_kumu, hoʻololi i ke kaʻina hana BuildBot-a e kue ho'ololi a i kēia manawa kēlā me kēia Sheduler ma muli o lākou, kūkulu ia i nā noi e hoʻomaka i ke kaʻina hana kūkulu. Eia nō naʻe, hoʻoholo ia i ka wā e hoʻoneʻe hou ʻia ai kēia mau noi i ka pila. He mea hana mālama i kahi laina o nā noi a nānā i ke kūlana o ka hui o kēia manawa ma kahi kaʻawale Hana-e. hana aia ma BuildMaster-e a ma luna Hana-e. Hoʻouna ʻo ia me BuildMaster-a ma Hana-a ua kiko'ī hana - he mau ʻanuʻu e pono ke hahai.
ʻIke mākou i ka laʻana o kēia manawa penei nā mea hoʻonohonoho Hana ʻia nā ʻāpana 2. Eia kekahi, loaʻa i kēlā me kēia me kona ʻano ponoʻī.

HoʻokahiBranchScheduler - kekahi o nā papa kaulana loa ma ka papahana. Nānā ia i hoʻokahi lālā a hoʻomaka ʻia e ka hoʻololi i hoʻopaʻa ʻia i loko. Ke ʻike ʻo ia i nā loli, hiki iā ia ke hoʻopaneʻe i ka hoʻouna ʻana i ke noi kūkulu (e hoʻopanee no ka manawa i kuhikuhi ʻia ma ka ʻāpana kūikawā treeStableTimer). MA inoa hoʻonohonoho i ka inoa o ka papahana e hōʻike ʻia i loko BuildBot-pili pūnaewele. IN ChangeFilter hoʻonohonoho ʻia kahi kānana, ma hope o ka hala ʻana i nā loli i ka lālā e koi i ka papa kuhikuhi e hoʻouna i kahi noi no ke kūkulu ʻana. IN mea kūkuluNames hōʻike ʻia ka inoa hana-a, a makou e hoonoho ai mahope iki. E like ka inoa ma kā mākou hihia me ka inoa o ka papahana: kouPahana.

ForceScheduler he mea maalahi loa. Hoʻomaka ʻia kēia ʻano papahana e kahi kaomi ʻiole BuildBot-pili pūnaewele. Loaʻa i nā ʻāpana ke ʻano like me ka in HoʻokahiBranchScheduler.

PS Helu 3. Malia paha e hiki mai ana
Kau manawa he papa hana e holo ana ma kekahi alapine pa'a manawa. Ke nānā aku nei ke kelepona me kēia


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

periodicBuildTimer hōʻike i ka manawa o kēia manawa i kekona.

BuildFactory hana i kahi kiko'ī hana, a laila hana hoʻouna i Hana. ka BuildFactory hōʻike i nā ʻanuʻu e hahai ai Hana-y. Hoʻohui ʻia nā ʻanuʻu ma ke kāhea ʻana i ke ʻano addStep

ʻO ka hana mua i hoʻohui ʻia i kēia laʻana git clean -d -f -f –xalaila checkout git. Hoʻokomo ʻia kēia mau hana i ka parameter hana, ʻaʻole i hōʻike maopopo ʻia akā hōʻike i kahi waiwai paʻamau hawaiian... Parameter mode = 'hoʻonui' e hōʻike ana i nā faila mai ka papa kuhikuhi kahi o ka ʻokiʻoki, ʻoiai e nalowale ana mai ka waihona, e noho ʻole ʻia.

ʻO ka lua i hoʻohui ʻia ʻo ke kāhea ʻana i ka palapala hookolokoloia me ka palena aloha ma ka aoao Hana-a mai ka papa kuhikuhi /home/habr/worker/yourProject/build me ke kaiapuni PATHONPATH=... No laila, hiki iā ʻoe ke kākau i kāu mau palapala ponoʻī a hoʻokō iā lākou ma ka ʻaoʻao. Hana-a kēlā me kēia ʻanuʻu util.ShellCommand. Hiki ke waiho pololei ʻia kēia mau palapala i loko o ka waihona. A laila ma ʻokiʻoki-e hāʻule lākou i loko /home/habr/worker/yourProject/build. Eia naʻe, aia ʻelua "akā":

  1. Hana pono e hana ʻia me kahi kī --umask i ʻole ia e ālai i nā kuleana hoʻokō ma hope a Kūʻai-ʻO ka.
  2. ma pahu kuʻi git-e o kēia mau palapala pono ʻoe e kuhikuhi i ka waiwai hiki ke hoʻokōno laila ma hope ʻokiʻoki-e ʻaʻole i nalowale ke kuleana e hoʻokō i ka palapala Git.

5.6 mea kukulu hale


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

E pili ana i ka mea hana haʻi ʻia maanei. I kēia manawa e haʻi aku wau iā ʻoe i nā kikoʻī hou aku e pili ana i ka hana ʻana. BuilderConfig he mea hana hana. ʻO ia mau mea hoʻolālā i c['mea kūkulu hale'] hiki iā ʻoe ke kuhikuhi i nā mea he nui, no ka mea he pepa kēia o nā mea hana ʻano ʻano. I kēia manawa e kākau hou kākou i ka laʻana mai BuildBot, e hoʻokokoke ana i kā mākou hana.


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

I kēia manawa e haʻi wau iā ʻoe e pili ana i nā ʻāpana BuilderConfig.

inoa kuhikuhi i ka inoa hana-a. Maanei mākou i kapa ai kouPahana... ʻO ia hoʻi ma ka Hana- e hana ʻia kēia ala /home/habr/worker/yourProject/build. Sheduler ʻimi i hana ma keia inoa wale no.

inoa hana he pepa Hana-s. Pono e hoʻohui ʻia kēlā me kēia c ['poe hana'].

hola - kikoʻī hana, e pili ana hana. E hoʻouna ʻo ia i ka mea hana maluna o Hana e hoʻopau i nā ʻanuʻu āpau i komo i loko o kēia hana-ʻO ka.

6. Ka laʻana o kāu hoʻonohonoho ponoʻī

Eia ke kumu hoʻohālike papahana aʻu e manaʻo nei e hoʻokō ma o BuildBot
.

E hoʻohana mākou ma ke ʻano he ʻōnaehana mana mana svn. Aia ka waihona ma kekahi ʻano ao. Eia ka helu wahi o keia ao svn.host/svn/yourProject/trunk. I ke ao i lalo svn aia kekahi moʻokāki inoa: mea hoʻohana, passwd: hua huna. Nā palapala e hōʻike ana i nā ʻanuʻu hana-a i loko o ka lālā svn, ma kahi waihona ʻokoʻa buildbot/worker_linux. Aia kēia mau palapala i loko o ka waihona me ka waiwai i mālama ʻia hiki ke hoʻokō.

BuildMaster и Hana holo ma ka hoʻokipa hoʻokahi project.host .BuildMaster mālama i kāna mau faila i loko o kahi waihona /home/habr/master. Hana mālama ʻia ma ke ala aʻe /home/habr/worker. Kaʻina kamaʻilio BuildMaster-a a me Hana-a lawe ʻia ma o port 4000 e like me ka protocol BuildBot-a, ʻo ia hoʻi 'pb' protocol.

Ua kākau piha ʻia ka papahana target ma Python. ʻO ka hana ka nānā ʻana i kāna mau loli, hana i kahi faila hiki ke hoʻokō, hana i nā palapala, a hana i ka hoʻāʻo. I ka hihia o ka hāʻule ʻole, pono nā mea hoʻomohala āpau e hoʻouna i kahi leka ma ka leka uila e hōʻike ana aia kahi hana i kūleʻa ʻole.

Hōʻike pūnaewele BuildBot e hoʻohui mākou i ke awa 80 no project.host. ʻAʻole pono e hoʻokomo iā Apache. Ma ke ʻano he ʻāpana o ka waihona he olonā i aia he kikowaena pūnaewele, BuildBot hoohana ia.

No ka mālama ʻana i ka ʻike kūloko no BuildBot e hoʻohana mākou sqlite.

Pono ka mea hoʻokipa no ka leka uila smtp.your.domain - hiki iā ia ke hoʻouna i nā leka mai ka leka uila [pale ʻia ka leka uila] me ka hooiaio ole. Ma luna nō hoʻi o ka mea hoʻokipa 'smtp ' Ke lohe ʻia nei nā minuke ma ka post 1025.

ʻElua mau kānaka i komo i ka hana: Keʻena Luna и mea hoʻohana. hooponopono BuildBot. ʻO ka mea hoʻohana ke kanaka e hana nei hana-s.

Hoʻokumu ʻia ka faila exacutable ma o pyinstaller. Hana ʻia ka palapala ma o doxygen.

No kēia hale hana, ua kākau wau i kēia: haku.cfg:

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

Pono mua ʻoe hana BuildMaster-a a me Hana-a. A laila hoʻopili i kēia faila haku.cfg в /home/habr/master.

ʻO ka hana aʻe e hoʻomaka i ka lawelawe BuildMastera..e.a I


sudo buildbot start /home/habr/master

A laila hoʻomaka i ka lawelawe Hana-a


buildbot-worker start /home/habr/worker

Mākaukau! I kēia manawa Buildbot e hahai i nā loli a me ka hoʻomaka hana-y i loko svn, e hana ana i nā ʻanuʻu o ke kūkulu ʻana a me ka hoʻāʻo ʻana i kahi papahana me ka hoʻolālā o luna.

Ma lalo wau e wehewehe i kekahi mau hiʻohiʻona o nā mea i luna haku.cfg.

6.1 Ma ke ala i kou haku.cfg


ʻOiai e kākau ana i kaʻu haku.cfg Nui nā hewa e hana ʻia, no laila pono e heluhelu i ka faila log. Ua mālama ʻia e like me BuildMaster-ec ala pau loa /home/habr/master/twistd.log, a ma ka aoao Hana-a me ke ala pololei /home/habr/worker/twistd.log. Ke heluhelu nei ʻoe i ka hewa a hoʻoponopono, pono ʻoe e hoʻomaka hou i ka lawelawe BuildMaster-a. Penei ka hana ana:


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

6.2 Hana pū me 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)

ʻO ka mua, e nānā kākou svn_poller. ʻO kēia ke ʻano like, e koho mau ana i ka waihona i hoʻokahi minuke. Ma keia hihia svn_poller komo wale i ka lala ka pahu. Parane pohihihi split_file=util.svn.split_file_alwaystrunk hoʻonohonoho i nā lula: pehea e wāwahi ai i ka hoʻolālā waihona svn ma na lala. Hāʻawi pū ʻo ia iā lākou i nā ala pili. I kona manawa split_file_alwaystrunk maʻalahi ke kaʻina hana ma ka ʻōlelo ʻana aia wale nō ka waihona ka pahu.

В Nā Mea Hoʻolālā i kuhikuhi ʻia ChangeFilterka mea ike None a hoʻohui i kahi lālā me ia ka pahu e like me ka hui i haawiia ma o split_file_alwaystrunk. E pane ana i nā hoʻololi i ka pahu, Hoolana hana me ka inoa kouPahana.

nā mea waiwai ma ʻaneʻi ka mea e pono ai e loaʻa i ka luna nā papa inoa leka uila o ke kūkulu ʻana a me ka hoʻāʻo ʻana i nā hopena ma ke ʻano he mea nona ke kaʻina hana.

Mea hana hana-a a Kūʻai hiki ke hoʻopau loa i nā faila i loaʻa i ka mana kūloko o ka waihona Hana-A. A laila e hana i ka piha hōʻano hou svn. Hoʻonohonoho ʻia ke ʻano ma o ka ʻāpana mode=piha, ala=hou... Parameter haltOnTailure e olelo ana ina hōʻano hou svn e hoʻokō ʻia me ka hewa, a laila e hoʻokuʻu ʻia ke kaʻina holoʻokoʻa o ke kūkulu ʻana a me ka hoʻāʻo ʻana, no ka mea ʻaʻole kūpono nā hana hou aʻe.

6.3 Palapala iā ʻoe: ua ʻae ʻia nā mea hoʻolaha e haʻi aku


reporters he lawelawe no ka hoʻouna ʻana i nā leka uila.


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]

Hiki iā ia ke hoʻouna i nā leka nāʻano likeʻole.

MailNotifier hoʻohana i ka leka uila e hoʻouna i nā leka.

template_html hoʻonohonoho i ke ʻano kikokikona no ka nūhou. Hoʻohana ʻia ka HTML e hana i ka markup. Hoʻololi ʻia e ka ʻenekini jinja2 (hiki ke hoʻohālikelike me django). BuildBot Loaʻa iā ia kahi hoʻonohonoho o nā mea hoʻololi i hoʻololi ʻia nā waiwai i ka template i ka wā o ka hana ʻana i ka kikokikona memo. Hoʻopili ʻia kēia mau ʻano hoʻololi i loko o {{ nā pale pale ʻāwili pālua }}. ʻo kahi laʻana, hōʻuluʻulu manaʻo hōʻike i ke kūlana o nā hana i hoʻopau ʻia, ʻo ia hoʻi, kūleʻa a hāʻule paha. A hana e hoopuka kouPahana. No laila, e hoʻohana ana i nā kauoha control in jinja2, nā hoʻololi BuildBot-a a me ka python string formatting tools, hiki iā ʻoe ke hana i kahi leka hoʻomaopopo.

MailNotifier aia nā manaʻo hoʻopaʻapaʻa.

maiaddr - ka helu wahi e loaʻa ai ka nūhou i nā mea a pau.

hoʻouna i nā mea hoʻohana= Hoʻouna ʻo True i kahi leka i ka mea nona a me ka mea hoʻohana nāna i hana hana.

nānā i lune - he suffix pono e hoʻohui ʻia i nā inoa o nā mea hoʻohana e loaʻa ana ka nūhou. No laila Keʻena Luna pehea e loaʻa ai i ka mea hoʻohana ka nūhou ma ka helu wahi [pale ʻia ka leka uila].

relayhost hōʻike i ka inoa hoʻokipa kahi i wehe ʻia ai ke kikowaena smtp, he smptPort hōʻike i ka helu awa e hoʻolohe ana smtp kikowaena.

mode = "'ōlelo aʻo" ʻōlelo ʻo ia e hana ʻia ka leka uila inā he hoʻokahi ʻanuʻu hana-a, ka mea i pau me ka hemahema o ke kūlana a i ʻole ka ʻōlelo aʻo. I ka hihia o ka holomua, ʻaʻohe pono e hoʻouna i kahi nūhou.

mea loaʻa hou aia ka papa inoa o nā mea e hoʻouna ʻia ai ka leka ma waho aʻe o ka mea nona a me ka mea nāna i hoʻokō hana.

messageFormatter he mea ia e hoakaka ana i ke ano o ka memo, kona mamana, a me na hoololi i loaa mai jinja2. Nā koho e like me wantProperties=ʻOiaʻiʻo и wantSteps=ʻOiaʻiʻo wehewehe i kēia pūʻulu o nā mea hoʻololi i loaʻa.

me ['lawelawe']=[sendMessageToAll] hāʻawi i kahi papa inoa o nā lawelawe, i waena o kā mākou reporter.

Ua hana mākou! Hoʻomaikaʻi

Ua hana mākou i kā mākou hoʻonohonoho ponoʻī a ʻike i ka hana i hiki iā ia. BuildBot. ʻO kēia, manaʻo wau, ua lawa ia e hoʻomaopopo inā pono kēia mea hana e hana i kāu papahana. Makemake ʻoe iā ia? E pono anei ia ia oe? Ua ʻoluʻolu anei ʻo ia e hana pū me? A laila, ʻaʻole wau e kākau makehewa i kēia ʻatikala.

A ʻoi aku. Makemake au e hoʻohana ke kaiāulu ʻoihana BuildBot, ua ʻoi aku ka laulā, ua unuhi ʻia nā manual, a ua nui aʻe nā laʻana.

Mahalo iā ʻoukou a pau no ko ʻoukou nānā ʻana. Pōmaikaʻi iā ʻoe.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka