ከBuildBot ጋር ቀጣይነት ያለው ውህደት ምሳሌ ትግበራ

ከBuildBot ጋር ቀጣይነት ያለው ውህደት ምሳሌ ትግበራ
(ምስል በ ኮምፕዩተራይዘር ከ (Pixbay)

ሠላም!

ስሜ ነው Evgeny Cherkinእኔ በማዕድን ማውጫ ኩባንያ ውስጥ ለልማት ቡድን ፕሮግራመር ነኝ ፖሊመታል.

ማንኛውንም ትልቅ ፕሮጀክት በመጀመር “ለመንከባከብ ምን ሶፍትዌር መጠቀም የተሻለ ነው?” ብለው ማሰብ ይጀምራሉ። የ IT ፕሮጀክት ቀጣዩን እትም ከመውጣቱ በፊት ተከታታይ ደረጃዎችን ያልፋል። የእነዚህ ደረጃዎች ሰንሰለት በራስ-ሰር ሲሰራ ጥሩ ነው. በራሱ፣ የአይቲ ፕሮጄክት አዲስ እትም የመልቀቅ አውቶማቲክ ሂደት ይባላል ተከታታይ ማዋሃድ. 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? ከሁሉም በኋላ, ሌሎች መሳሪያዎች አሉ: የመርከብ መቆጣጠሪያ и ጄንከንዝ. እንደዚህ እመለስበታለሁ። ለአብዛኛዎቹ ተግባራት ጄንከንዝ እውነትም ይበቃናል። በተራው፣ buildbot - የበለጠ መላመድ ፣ ተግባራት እዚያ ልክ እንደ ውስጥ ተፈትተዋል ጄንከንዝ. አንተ ምረጥ. ነገር ግን እየፈለግን ላለው ኢላማ ፕሮጀክት መሳሪያ ስለምንፈልግ ከቀላል ደረጃዎች ጀምሮ በይነተገናኝ እና ልዩ የሆነ በይነገጽ ያለው የግንባታ ስርዓት ለማግኘት ለምን አንመርጥም።

የዒላማው ፕሮጄክታቸው በፓይቶን ውስጥ ለተፃፈ, ጥያቄው የሚነሳው "በፕሮጀክቱ ውስጥ ጥቅም ላይ በሚውልበት ቋንቋ ላይ ግልጽ የሆነ በይነገጽ ያለው ለምንድነው የመዋሃድ ስርዓት ለምን አይመርጡም?". እና አሁን ጥቅሞቹን ለማቅረብ ጊዜው አሁን ነው buildbot.

ስለዚህ የእኛ "የመሳሪያ ኳርት"። ለራሴ, አራት ባህሪያትን ለይቻለሁ buildbot:

  1. በጂፒኤል ፍቃድ ስር ያለ ክፍት ምንጭ ማዕቀፍ ነው።
  2. አስፈላጊዎቹን ድርጊቶች ለማዋቀር እና ለመግለፅ ይህ ፓይቶንን እንደ መሳሪያ መጠቀም ነው።
  3. ይህ ስብሰባው በሚካሄድበት ማሽን ላይ ምላሽ የመቀበል ችሎታ ነው
  4. በመጨረሻም፣ እነዚህ ለአንድ አስተናጋጅ ዝቅተኛ መስፈርቶች ናቸው። ማሰማራት ፓይቶን እና ጠማማ ያስፈልገዋል እና ቪኤም እና ጃቫ ማሽን አያስፈልግም።

2. በBuildMaster የሚመራ ጽንሰ-ሀሳብ

ከBuildBot ጋር ቀጣይነት ያለው ውህደት ምሳሌ ትግበራ

የተግባር ስርጭት አርክቴክቸር ማዕከላዊ ነው። BuildMaster. አገልግሎት ነው፡-

  • ይከታተላል በፕሮጀክቱ ምንጭ ዛፍ ላይ ለውጦች
  • ይልካል ፕሮጀክቱን ለመገንባት እና ለመፈተሽ በሠራተኛ አገልግሎት እንዲፈፀም ያዛል
  • ያሳውቃል ተጠቃሚዎች ሾለ ድርጊታቸው ውጤቶች

BuildMaster በፋይል የተዋቀረ master.cfg. ይህ ፋይል በሥሩ ውስጥ ነው። BuildMaster. በኋላ ላይ ይህ ሥር እንዴት እንደሚፈጠር አሳያለሁ. ፋይሉ ራሱ master.cfg python ይዟል - ጥሪዎችን የሚጠቀም ስክሪፕት buildbot.

የሚቀጥለው በጣም አስፈላጊ ነገር buildbot የሚል ስም አለው። ሠራተኛ. ይህ አገልግሎት በሌላ አስተናጋጅ በተለየ ስርዓተ ክወና ወይም ምናልባት በየት ሊሄድ ይችላል። BuildMaster. እንዲሁም የራሱ ፓኬጆች እና ተለዋዋጮች ያሉት በልዩ ሁኔታ በተዘጋጀ ምናባዊ አካባቢ ውስጥ ሊኖር ይችላል። እነዚህ ምናባዊ አካባቢዎች እንደ python መገልገያዎችን በመጠቀም ሊዘጋጁ ይችላሉ። verticalenv, venv.

BuildMaster ትዕዛዞችን ለሁሉም ሰው ያሰራጩ ሠራተኛ-y, እና እሱ በተራው, ያከናውናቸዋል. ያም ማለት አንድ ፕሮጀክት የመገንባት እና የመሞከር ሂደት ሊቀጥል ይችላል ሠራተኛ-e በዊንዶውስ እና በሊኑክስ ስር በሌላ ሰራተኛ ላይ።

ጨርሰህ ውጣ የፕሮጀክት ምንጭ ኮድ በእያንዳንዱ ላይ ይከሰታል ሠራተኛ- ሠ.

3. መጫን

ስለዚህ እንሂድ. ኡቡንቱ 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. እና የፕሮጀክቱ ስም ባለው አቃፊ ውስጥ ማውጫን ይፈጥራል መገንባት, እና ከዚያ ያደርጋል ጨርሰህ ውጣ. የስራ ማውጫ ለ ሠራተኛ- ማውጫ ይሆናል /ቤት/ሀብር/የእርስዎ ፕሮጀክት/ግንባታ.

"ወርቃማው ቁልፍ
እና አሁን የቀደመውን አንቀጽ ለጻፍኩት፡ ስክሪፕት ያ ባለቤት ይጠይቃል ሠራተኛ- በዚህ ማውጫ ውስጥ ያለው የርቀት መቆጣጠሪያ አይተገበርም ምክንያቱም ስክሪፕቱ የማሄድ ፍቃድ ስለሌለው። ሁኔታውን ለማስተካከል, ቁልፍ ያስፈልግዎታል --umask=0o22, ወደዚህ ማውጫ መጻፍ የሚከለክል ነገር ግን የማስጀመሪያ መብቶችን ይተዋል. እና እኛ የምንፈልገው ያ ብቻ ነው።

BuildMaster и ሠራተኛ እርስ በርስ ግንኙነት መመስረት. ይሰብራል እና ይከሰታል ሠራተኛ ምላሽ በመጠባበቅ ላይ BuildMaster- አ. ምንም ምላሽ ከሌለ ግንኙነቱ እንደገና ተጀምሯል. ቁልፍ --Kepalive=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 - የውቅር ፋይል መሰረታዊ መዝገበ ቃላት። በማዋቀሪያው ፋይል ውስጥ መካተት አለበት. ለአጠቃቀም ምቹነት፣ ተለዋጭ ስም በማዋቀር ኮድ ውስጥ ገብቷል። "ሐ". ርዕሶች ቁልፎች в ሐ["keyFromDist"] ጋር መስተጋብር የሚፈጥሩ ቋሚ አካላት ናቸው። BuildMaster. በእያንዳንዱ ቁልፍ ስር, ተጓዳኝ እቃው እንደ እሴት ተተክቷል.

5.2 ሰራተኞች

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

በዚህ ጊዜ እንጠቁማለን BuildMaster- ዝርዝር ሠራተኛ-ኦቭ. ራሴ ሠራተኛ እኛ ፈጠርን ከፍተኛ, የሚያመለክት አንተ-የሠራተኛ-ስም и የይለፍ ቃል. አሁን በምትኩ መገለጽ አለባቸው ምሳሌ ሠራተኛ и ማለፍ .

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 ማከማቻን ይጠቀማል።

የመጀመሪያው መከራከሪያ ወደ ማከማቻዎ የሚወስደው መንገድ ነው።

workdir በጎን በኩል ወደ አቃፊው የሚወስደውን መንገድ ይወክላል ሠራተኛ- ከመንገዱ ጋር ዘመድ /ቤት/ሀብር/ሠራተኛ/የእርስዎ ፕሮጀክት/ግንባታ git የማከማቻውን አካባቢያዊ ሥሪት ያከማቻል።

ቅርንጫፍ ለመከተል በማከማቻው ውስጥ የተወሰነ ቅርንጫፍ ይዟል.

የምርጫ ክፍተት ከዚያ በኋላ የሰከንዶች ብዛት ይይዛል BuildMaster ለለውጦች ማከማቻውን ይመረምራል።

በፕሮጀክቱ ማከማቻ ውስጥ ለውጦችን ለመከታተል ብዙ ዘዴዎች አሉ.

በጣም ቀላሉ ዘዴ ነው ድምጽ መስጠት, ይህም የሚያመለክተው BuildMaster በየጊዜው አገልጋዩን ከማከማቻው ጋር ይመርጣል። ከሆነ መሰጠት በማጠራቀሚያው ውስጥ ያሉትን ለውጦች አንፀባርቋል ፣ ከዚያ BuildMaster በተወሰነ መዘግየት የውስጣዊውን ነገር ይፈጥራል ለዉጥ እና ወደ ዝግጅቱ ተቆጣጣሪው ይላኩት መርሐግብር, ይህም ፕሮጀክቱን ለመገንባት እና ለመሞከር ደረጃዎችን ይጀምራል ሠራተኛ- ሠ. እነዚህ እርምጃዎች ያካትታሉ ዝማኔ ማከማቻ. በትክክል በርቷል። ሠራተኛ-e የማከማቻው አካባቢያዊ ቅጂ ይፈጥራል. የዚህ ሂደት ዝርዝሮች በሚቀጥሉት ሁለት ክፍሎች ከዚህ በታች ይብራራሉ. (5.4 и 5.5).

በማከማቻው ላይ የሚደረጉ ለውጦችን የመከታተያ ዘዴ ይበልጥ የሚያምር ዘዴ በቀጥታ ከሚያስተናግደው አገልጋይ መልእክት መላክ ነው። BuildMaster-y የፕሮጀክቱን ምንጭ ኮድ ስለመቀየር። በዚህ ሁኔታ, ገንቢው እንደሰራ መሰጠት፣ የፕሮጀክት ማከማቻ ያለው አገልጋይ መልእክት ይልካል BuildMaster- y. እና ያ, በተራው, አንድ ነገር በመፍጠር ያቋርጠዋል ፒቢካንግ ምንጭ. ይህ ነገር ከዚያ ወደ ይተላለፋል መርሐግብር, ፕሮጀክቱን ለመገንባት እና ለመፈተሽ ደረጃዎችን የሚያንቀሳቅሰው. የዚህ ዘዴ አስፈላጊ አካል ይህ ስራ ነው ሜንጦ- በማጠራቀሚያው ውስጥ የአገልጋይ ስክሪፕቶች። በስክሪፕት ውስጥ ሜንጦ-ሀ፣ መቼ እርምጃዎችን የማስኬድ ኃላፊነት አለበት። መሰጠት- ሠ, መገልገያውን መደወል ያስፈልግዎታል መላኪያ እና የአውታር አድራሻውን ይግለጹ BuildMaster- አ. የሚያዳምጠውን የአውታረ መረብ ወደብ መግለፅ ያስፈልግዎታል ፒቢካንግ ምንጭ. ፒቢካንግ ምንጭበነገራችን ላይ አካል ነው 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- ለመቃወም ለዉጥ እና አሁን እያንዳንዱ ሸዱለር በእነሱ ላይ በመመስረት የፕሮጀክቱን የግንባታ ሂደት ለመጀመር ጥያቄዎችን ይገነባል. ሆኖም፣ እነዚህ ጥያቄዎች ወደ ወረፋው መቼ እንደሚተላለፉም ይወስናል። ዕቃ ቤት ሠሪ የጥያቄዎችን ወረፋ ይይዛል እና የአሁኑን ስብሰባ ሁኔታ በተለየ ሁኔታ ይከታተላል ሠራተኛ- ሠ. ቤት ሠሪ ላይም አለ። BuildMaster- ኢ እና ላይ ሠራተኛ- ሠ. እሱ ከ ይልካል BuildMaster- እና ላይ ሠራተኛ- አስቀድሞ የተወሰነ መገንባት - መከተል ያለባቸው ተከታታይ እርምጃዎች.
ያንን አሁን ባለው ምሳሌ ውስጥ እናያለን መርሐግብር አውጪዎች 2 ተፈጥረዋል። ከዚህም በላይ እያንዳንዱ የራሱ ዓይነት አለው.

ነጠላ ቅርንጫፍ መርሐግብር አውጪ በጣም ታዋቂ ከሆኑ የመርሐግብር ክፍሎች አንዱ ነው. አንድ ቅርንጫፍ ይመለከታቸዋል እና በእሱ ውስጥ ቁርጠኛ ለውጥ ያስነሳል። ለውጦቹን ሲመለከት የግንባታ ጥያቄውን ለሌላ ጊዜ ማስተላለፍ ይችላል (በልዩ ግቤት ውስጥ ለተጠቀሰው ጊዜ ለሌላ ጊዜ ማስተላለፍ) treeStableTimer) ውስጥ ስም ውስጥ የሚታየውን የጊዜ ሰሌዳ ስም ይገልጻል buildbot- የድር በይነገጽ. ውስጥ ማጣሪያን ቀይር ማጣሪያ ተዘጋጅቷል፣ በቅርንጫፉ ላይ የሚደረጉ ለውጦች የግንባታ ጥያቄን ለመላክ መርሐ ግብሩን የሚያነሳሱ ናቸው። ውስጥ የገንቢ ስሞች የሚለው ስም ተጠቅሷል ሰሪ-ሀ, ትንሽ ቆይተን እናዘጋጃለን. በእኛ ሁኔታ ውስጥ ያለው ስም ከፕሮጀክቱ ስም ጋር ተመሳሳይ ይሆናል፡- የእርስዎ ፕሮጀክት.

አስገድድ መርሐግብር በጣም ቀላል ነገር. የዚህ አይነት መርሐግብር የሚቀሰቀሰው በመዳፊት ጠቅታ ነው። buildbot- የድር በይነገጽ. መለኪያዎች በ ውስጥ ተመሳሳይ ናቸው ነጠላ ቅርንጫፍ መርሐግብር አውጪ.

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

periodicBuildTimer የዚህ ወቅታዊነት ጊዜ በሰከንዶች ውስጥ ይገልጻል።

BuildFactory የተወሰነ ይፈጥራል መገንባት፣ ከዚያ በኋላ ሰሪ ማመሳከር ሠራተኛ. በ BuildFactory የሚወሰዱ እርምጃዎችን ይጠቁማል ሠራተኛ- y. ዘዴን በመጥራት ደረጃዎች ይታከላሉ addStep

በዚህ ምሳሌ ውስጥ የመጀመሪያው የተጨመረው እርምጃ ነው git ንጹህ -d -f -f –xእንግዲህ git ተመዝግቦ መውጣት. እነዚህ እርምጃዎች በመለኪያው ውስጥ ተካትተዋል። ዘዴ, እሱም በግልጽ አልተገለጸም ነገር ግን ነባሪ እሴትን ያመለክታል አዲስ. መለኪያ ሁነታ='የጨመረ'' ፋይሎቹ ከማውጫው ውስጥ ናቸው ይላል ቼቹት፣ በማከማቻው ውስጥ የጠፉት ሳይነኩ ይቀራሉ።

ሁለተኛው የተጨመረው እርምጃ የስክሪፕት ጥሪ ነው። የሙከራ ከመለኪያ ጋር እው ሰላም ነው ከጎኑ ሠራተኛ- ከማውጫ /ቤት/ሀብር/ሠራተኛ/የእርስዎ ፕሮጀክት/ግንባታ ከአካባቢ ተለዋዋጭ PATHONPATH=… ስለዚህ የራስዎን ስክሪፕቶች መጻፍ እና በጎን በኩል ማስፈጸም ይችላሉ። ሠራተኛ- ደረጃ በደረጃ util.ShellCommand. እነዚህ ስክሪፕቶች በቀጥታ ወደ ማከማቻው ውስጥ ሊቀመጡ ይችላሉ. ከዚያም በ ቼቹት- እነሱ ውስጥ ይወድቃሉ /ቤት/ሀብር/ሠራተኛ/የእርስዎ ፕሮጀክት/ግንባታ. ሆኖም ፣ ከዚያ ሁለት "ግን" አሉ-

  1. ሠራተኛ በቁልፍ መፈጠር አለበት። --ማስክ ከዚያ በኋላ የማስፈጸሚያ መብቶችን እንዳያግድ ጨርሰህ ውጣ- የ.
  2. በ git push- ከእነዚህ ስክሪፕቶች ውስጥ ንብረቱን መግለጽ አለባቸው ሊባባስ የሚችልስለዚህ በኋላ ቼቹት- የ Git ስክሪፕት ለማስፈጸም ፍቃድ አላጣም።

5.6 ግንበኞች


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

ስለ ምን እንደሆነ ቤት ሠሪ ተባለ እዚህ. አሁን እንዴት እንደሚፈጥሩት በበለጠ ዝርዝር እነግርዎታለሁ. BuilderConfig ገንቢ ነው። ሰሪ. እንደነዚህ ያሉ ገንቢዎች በ ሐ ['ገንቢዎች'] ይህ የነገሮች ዝርዝር ስለሆነ ከአንድ በላይ ሊገለጽ ይችላል። ሰሪ ዓይነት. አሁን ምሳሌውን ከ እንደገና እንፃፍ buildbotወደ ችግራችን ማቅረቡ።


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

አሁን ስለ ቅንብሮቹ እንነጋገር. BuilderConfig.

ስም ስሙን ያዘጋጃል ሰሪ- ሀ. እዚህ ስም አወጣነው የእርስዎ ፕሮጀክት... ይህ ማለት በ ላይ ማለት ነው ሠራተኛ- ይህ መንገድ ይፈጠራል /ቤት/ሀብር/ሠራተኛ/የእርስዎ ፕሮጀክት/ግንባታ. ሸዱለር ይፈልጋል ሰሪ በዚህ ስም ብቻ።

የስራ ስም አንድ ሉህ ይዟል ሠራተኛ-ኦቭ. እያንዳንዳቸው መጨመር አለባቸው ሐ [“ሠራተኞች”].

ፋብሪካ - የተወሰነ መገንባትከየትኛው ጋር የተያያዘ ነው ሰሪ. ዕቃ ይልካል መገንባት ላይ ሠራተኛ በዚህ ውስጥ የተካተቱትን ሁሉንም ደረጃዎች ለማጠናቀቅ መገንባት- የ.

6. የራሱ ውቅር ምሳሌ

በ በኩል ለመተግበር ያቀረብኩት የፕሮጀክት አርክቴክቸር ናሙና እዚህ አለ። buildbot
.

እንደ ስሪት ቁጥጥር ስርዓት, እንጠቀማለን svn. ማከማቻው ራሱ በአንዳንድ ደመና ውስጥ ይቀመጣል። የዚህ ደመና አድራሻ እዚህ አለ። svn.host/svn/YourProject/trunk. በደመና ስር svn የመለያ ተጠቃሚ ስም አለ፡- ተጠቃሚ, passwd: የይለፍ ቃል. ደረጃዎች የሆኑ ስክሪፕቶች መገንባት- እንዲሁም በቅርንጫፍ ውስጥ ይሆናል svn, በተለየ አቃፊ ውስጥ buildbot/worker_linux. እነዚህ ስክሪፕቶች ከተቀመጠው ንብረት ጋር በማከማቻው ውስጥ ናቸው። አስፈፃሚ.

BuildMaster и ሠራተኛ በተመሳሳይ አስተናጋጅ ላይ አሂድ ፕሮጀክት.አስተናጋጅ .BuildMaster ፋይሎቹን በአቃፊ ውስጥ ያከማቻል /ቤት/ሀብር/ማስተር. ሠራተኛ በሚከተለው መንገድ ተመሳሳይ መደብሮች /ቤት/ሀብር/ሰራተኛ. የግንኙነት ሂደት BuildMaster- እና ሠራተኛ- በፕሮቶኮሉ መሠረት በ 4000 ወደብ በኩል ይካሄዳል buildbot-ሀ፣ ማለትም 'ፒቢ' ፕሮቶኮል.

የዒላማው ፕሮጀክት ሙሉ በሙሉ በፓይቶን የተጻፈ ነው። ስራው ለውጦቹን መከታተል, ሊተገበር የሚችል ፋይል መፍጠር, ሰነዶችን ማመንጨት እና ሙከራን ማካሄድ ነው. ያልተሳካ ከሆነ ሁሉም ገንቢዎች ያልተሳካ እርምጃ እንዳለ መልዕክት ወደ ደብዳቤ መላክ አለባቸው።

የድር ማሳያ buildbot ወደብ 80 እንገናኛለን ለ ፕሮጀክት.አስተናጋጅ. Apatch አያስፈልግም። እንደ ቤተ-መጽሐፍት አካል ተጠመጠ ቀድሞውኑ የድር አገልጋይ አለ ፣ buildbot ይጠቀማል።

የውስጥ መረጃ ለማከማቸት buildbot мем использовать ስክሪት.

የደብዳቤ መላኪያ ዝርዝር አስተናጋጅ ያስፈልገዋል smtp.የእርስዎ.ጎራ - ከደብዳቤ ደብዳቤዎችን ለመላክ ተፈቅዶለታል [ኢሜል የተጠበቀ] ያለ ማረጋገጫ. እንዲሁም በአስተናጋጁ ላይSMTP ፕሮቶኮል በፖስታ 1025 እየተሰማ ነው።

በሂደቱ ውስጥ የተሳተፉ ሁለት ሰዎች አሉ- አስተዳዳሪ и ተጠቃሚ. ያስተዳድራል buildbot. ተጠቃሚው የሚሰራው ሰው ነው። መሰጠት-ሰ.

ሊፈታ የሚችል ፋይል የሚመነጨው በ 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ሀ


sudo buildbot start /home/habr/master

ከዚያ አገልግሎቱን ይጀምሩ ሠራተኛ-a


buildbot-worker start /home/habr/worker

ዝግጁ! አሁን buildbot ለውጦችን ይከታተላል እና ይሠራል መሰጠት- ገባ svnከላይ ከተጠቀሰው አርክቴክቸር ጋር የፕሮጀክት ግንባታ እና የሙከራ ደረጃዎችን በመከተል.

ከላይ ያሉትን አንዳንድ ባህሪያት ከዚህ በታች እገልጻለሁ master.cfg.

6.1 ወደ ጌታህ በሚወስደው መንገድ ላይ.cfg


የእኔን በሚጽፍበት ጊዜ master.cfg ብዙ ስህተቶች ይደረጋሉ, ስለዚህ የምዝግብ ማስታወሻውን ማንበብ ያስፈልጋል. እንደ ተከማችቷል BuildMaster- ፍጹም መንገድ /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_ሁልጊዜ ስትሮክ ደንቦቹን ያዘጋጃል: የአቃፊውን መዋቅር እንዴት እንደሚከፋፈል 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]

መልእክት መላክ ይችላል። የተለያዩ መንገዶች.

መልዕክት አሳዋቂ ማሳወቂያዎችን ለመላክ ደብዳቤ ይጠቀማል።

አብነት_html ለደብዳቤ መላኪያ የጽሑፍ አብነት ያዘጋጃል። ኤችቲኤምኤል ማርክ ለመፍጠር ጥቅም ላይ ይውላል። ሞተሩ ተስተካክሏል። ጂንጃ2 (ከ ጋር ሊመሳሰል ይችላል። django). buildbot የመልእክት ጽሑፍ በሚፈጠርበት ጊዜ እሴቶቹ በአብነት ውስጥ የሚተኩ የተለዋዋጮች ስብስብ አለው። እነዚህ ተለዋዋጮች በ{{ double curly braces }} ውስጥ ተዘግተዋል። ለምሳሌ, ማጠቃለያ የተጠናቀቁ ስራዎችን ማለትም ስኬትን ወይም ውድቀትን ሁኔታ ያሳያል. ሀ ፕሮጀክቶች ያወጣል። የእርስዎ ፕሮጀክት. ስለዚህ ፣ በ ውስጥ የቁጥጥር ትዕዛዞች እገዛ ጂንጃ2፣ ተለዋዋጮች buildbot-a እና python string formatters በጣም መረጃ ሰጭ መልእክት መፍጠር ትችላለህ።

መልዕክት አሳዋቂ የሚከተሉትን ክርክሮች ይዟል.

fromaddr - መልእክቱ ለሁሉም ሰው የሚላክበት አድራሻ።

ለፍላጎት ተጠቃሚዎች ይላኩ።=እውነት ለሰራው ባለቤት እና ተጠቃሚ መልእክት ትልካለች። መሰጠት.

ተመልከት — የደብዳቤ ዝርዝሩን በሚቀበሉ የተጠቃሚ ስሞች ላይ የሚታከል ቅጥያ። ስለዚህ አስተዳዳሪ ተጠቃሚው በአድራሻው ላይ ደብዳቤውን እንዴት እንደሚቀበል [ኢሜል የተጠበቀ].

relayhost አገልጋዩ የተከፈተበትን የአስተናጋጅ ስም ይገልጻል SMTPአንድ smptPort የሚያዳምጠውን የወደብ ቁጥር ያዘጋጃል። SMTP አገልጋይ.

ሁነታ = "ማስጠንቀቂያ" መልእክቱ መደረግ ያለበት ቢያንስ አንድ እርምጃ ካለ ብቻ ነው ይላል። መገንባት- በውድቀት ወይም በማስጠንቀቂያ ሁኔታ የተጠናቀቀ። በተሳካ ሁኔታ, ደብዳቤ መላክ አያስፈልግም.

ተጨማሪ ተቀባዮች ከባለቤቱ እና አገልግሎቱን ካከናወነው ሰው በተጨማሪ መልእክቱ መደረግ ያለበት የሰዎች ዝርዝር ይዟል መሰጠት.

መልእክት ፎርማተር የመልእክቱን ቅርጸት፣ አብነት እና የተለዋዋጮችን ስብስብ የሚገልጽ ዕቃ ነው። ጂንጃ2. እንደ አማራጮች wantProperties=እውነት и wantSteps=እውነት የሚገኙትን ተለዋዋጮች ስብስብ ይግለጹ።

በ['አገልግሎቶች']=[መልእክት መላክ ለሁሉም] የአገልግሎቶች ዝርዝር ያቀርባል, ከእነዚህም መካከል የእኛ ይሆናል ጋዜጠኛ.

አደረግነው! እንኳን ደስ አላችሁ

የራሳችንን ውቅር ፈጠርን እና ተግባራዊነቱን አይተናል buildbot. ይህ, እኔ እንደማስበው, ይህ መሳሪያ ፕሮጀክትዎን ለመፍጠር ያስፈልግ እንደሆነ ለመረዳት በቂ ነው. እሱ ለእርስዎ ፍላጎት አለው? ለእርስዎ ጠቃሚ ይሆናል? አብሮ ለመስራት ምቹ ነው? ከዚያ ይህን ጽሑፍ የምጽፈው በከንቱ አይደለም።

እና ተጨማሪ። የፕሮፌሽናል ማህበረሰቡ እንዲጠቀም እፈልጋለሁ buildbot, ሰፊ ሆነ, መመሪያዎቹ ተተርጉመዋል, እና እንዲያውም ተጨማሪ ምሳሌዎች ነበሩ.

ለሁላችሁም ትኩረት አመሰግናለሁ። መልካም ምኞት.

ምንጭ: hab.com

አስተያየት ያክሉ