BuildBot භාවිතයෙන් අඛණ්ඩ අනුකලනය ක්රියාත්මක කිරීමේ උදාහරණයක්

BuildBot භාවිතයෙන් අඛණ්ඩ අනුකලනය ක්රියාත්මක කිරීමේ උදාහරණයක්
(රූපය විසිනි පරිගණකකරණය සිට පික්සාබේ)

හෙලෝ!

මගේ නම Evgeniy Cherkin, මම පතල් සමාගමක සංවර්ධන කණ්ඩායමක වැඩසටහන්කරුවෙකු වෙමි පොලිමෙටල්.

ඕනෑම විශාල ව්යාපෘතියක් ආරම්භ කරන විට, ඔබ සිතන්නට පටන් ගනී: "එය සේවය කිරීමට භාවිතා කිරීමට හොඳම මෘදුකාංගය කුමක්ද?" තොරතුරු තාක්ෂණ ව්‍යාපෘතියක් ඊළඟ අනුවාදය නිකුත් කිරීමට පෙර අදියර ගණනාවක් හරහා ගමන් කරයි. මෙම අදියරවල දාමය ස්වයංක්රීය වන විට එය හොඳයි. තොරතුරු තාක්ෂණ ව්‍යාපෘතියක නව අනුවාදයක් නිකුත් කිරීමේ ස්වයංක්‍රීය ක්‍රියාවලිය ලෙස හැඳින්වේ අඛණ්ඩ ඒකාබද්ධතාව. 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? සියල්ලට පසු, වෙනත් මෙවලම් තිබේ: CruiseControl и ජෙන්කින්ස්. මම මේ විදියට උත්තර දෙන්නම්. බොහෝ කාර්යයන් සඳහා ජෙන්කින්ස් සත්යය ප්රමාණවත් වනු ඇත. එහි වාරයේ, BuildBot - වඩාත් අනුවර්තනය වන අතර, ගැටළු සරලව විසඳනු ලැබේ ජෙන්කින්ස්. තේරීම ඔබගේ ය. නමුත් අපි සංවර්ධනය වෙමින් පවතින ඉලක්ක ව්‍යාපෘතියක් සඳහා මෙවලමක් සොයමින් සිටින බැවින්, අන්තර්ක්‍රියාකාරීත්වය සහ අද්විතීය අතුරු මුහුණතක් ඇති ගොඩනැගීමේ පද්ධතියක් ලබා ගැනීමට සරල පියවර වලින් ආරම්භ කිරීමට ඉඩ සලසන එකක් තෝරා නොගන්නේ මන්ද?

ඉලක්ක ව්‍යාපෘතිය python වලින් ලියා ඇති අය සඳහා, ප්‍රශ්නය පැන නගී: “ව්‍යාපෘතියේ භාවිතා වන භාෂාව අනුව පැහැදිලි අතුරු මුහුණතක් ඇති ඒකාබද්ධතා පද්ධතියක් තෝරා නොගන්නේ මන්ද?” දැන් ප්රතිලාභ ඉදිරිපත් කිරීමට කාලයයි BuildBot.

ඉතින්, අපේ "උපකරණ quartet". මා සඳහා, මම ලක්ෂණ හතරක් හඳුනාගෙන ඇත BuildBot:

  1. එය GPL බලපත්‍රය යටතේ විවෘත මූලාශ්‍ර රාමුවකි
  2. මෙය වින්‍යාස කිරීමේ මෙවලමක් ලෙස python භාවිතා කිරීම සහ අවශ්‍ය ක්‍රියාවන් විස්තර කිරීමයි
  3. මෙය එකලස් කිරීම සිදු වන යන්ත්රයෙන් ප්රතිචාරයක් ලැබීමේ අවස්ථාවකි
  4. මේවා අවසාන වශයෙන්, සත්කාරකයකු සඳහා වන අවම අවශ්‍යතා වේ. යෙදවීම සඳහා python සහ twisted අවශ්‍ය වන අතර අතථ්‍ය යන්ත්‍රයක් සහ java යන්ත්‍රයක් අවශ්‍ය නොවේ.

2. BuildMaster විසින් මෙහෙයවන ලද සංකල්පය

BuildBot භාවිතයෙන් අඛණ්ඩ අනුකලනය ක්රියාත්මක කිරීමේ උදාහරණයක්

කාර්ය බෙදාහැරීමේ ගෘහ නිර්මාණ ශිල්පයට කේන්ද්‍රීය වේ BuildMaster. එය සේවාවක් වන්නේ:

  • නිරීක්ෂණය කරයි ව්යාපෘති මූලාශ්ර ගසෙහි වෙනස්කම්
  • යවයි ව්‍යාපෘතිය ගොඩනැගීමට සහ එය පරීක්ෂා කිරීමට සේවක සේවය මඟින් ක්‍රියාත්මක කළ යුතු විධාන
  • දැනුම් දෙයි ගනු ලැබූ ක්‍රියාමාර්ගවල ප්‍රතිඵල ගැන පරිශීලකයන්

BuildMaster ගොනුව හරහා වින්‍යාස කර ඇත master.cfg. මෙම ගොනුව මූලයේ ඇත BuildMaster. මම පසුව පෙන්වන්නම් කොහොමද මේ root නිර්මාණය කරන්නේ කියලා. ගොනුව ම master.cfg ඇමතුම් භාවිතා කරන python පිටපතක් අඩංගු වේ BuildBot.

ඊළඟ වැදගත්ම වස්තුව BuildBot මාතෘකාවක් ඇත කම්කරුවා. මෙම සේවාව වෙනත් මෙහෙයුම් පද්ධතියක් සහිත වෙනත් ධාරකයක දියත් කළ හැකිය, නැතහොත් සමහර විට එය කළ හැක BuildMaster. එය තමන්ගේම පැකේජ සහ විචල්‍යයන් සමඟ විශේෂයෙන් සකස් කරන ලද අතථ්‍ය පරිසරයක ද පැවතිය හැකිය. වැනි පයිතන් උපයෝගිතා භාවිතයෙන් මෙම අතථ්‍ය පරිසරයන් සකස් කළ හැක virtualenv, 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. එය අපගේ ෆෝල්ඩරයේ වනු ඇත /home/habr/master.

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

ඊළඟ පියවර. අපි නිර්මාණය කරමු කම්කරුවා. එය අපගේ ෆෝල්ඩරයේ වනු ඇත /home/habr/කම්කරු.

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

ඔබ දුවන විට කම්කරුවා, එවිට පෙරනිමියෙන් එය නිර්මාණය වනු ඇත /home/habr/කම්කරු නිශ්චිතව දක්වා ඇති ව්‍යාපෘතියේ නම සහිත ෆෝල්ඩරය master.cfg. ව්‍යාපෘතියේ නම සහිත ෆෝල්ඩරයේ එය නාමාවලියක් සාදනු ඇත ගොඩනගා ගන්න, සහ එය දිගටම කරගෙන යනු ඇත ලොව පුරාවටම. සඳහා වැඩ කරන නාමාවලිය කම්කරුවා- එය නාමාවලියක් බවට පත්වනු ඇත /home/habr/yourProject/build.

"ගෝල්ඩන් යතුර
දැන් මම කලින් ඡේදය ලිව්වේ කුමක් සඳහාද: පිටපතක් මාස්ටර් වෙතින් ඉල්ලා සිටිනු ඇත කම්කරුවා-සහ මෙම නාමාවලියෙහි දුරස්ථව සිදු කරනු ලබන්නේ ස්ක්‍රිප්ටයට ධාවනය කිරීමට අවසර නොමැති නිසා ක්‍රියාත්මක නොවේ. තත්වය නිවැරදි කිරීම සඳහා, ඔබට යතුරක් අවශ්ය වනු ඇත --umask=0o22, මෙම නාමාවලියට ලිවීම තහනම් කරන නමුත් දියත් කිරීමේ අයිතිය රඳවා ගනු ඇත. ඒ වගේම තමයි අපිට අවශ්‍ය වෙන්නේ.

BuildMaster и කම්කරුවා එකිනෙකා සමඟ සම්බන්ධතාවයක් ඇති කර ගන්න. එය කැඩී බිඳී යාම සිදු වේ කම්කරුවා වෙතින් ප්රතිචාරයක් සඳහා යම් කාලයක් බලා සිටීම BuildMaster-ඒ. ප්රතිචාරයක් නොමැති නම්, සම්බන්ධතාවය නැවත ආරම්භ වේ. යතුර --keepalive=60 අවශ්‍ය වන්නේ ඉන් පසු කාලය දැක්වීම පමණි සම්බන්ධ නැවත ආරම්භ කරයි.

5. වින්යාසය. පියවරෙන් පියවර වට්ටෝරුව

වින්‍යාසය BuildMaster අපි විධානය ක්‍රියාත්මක කළ යන්ත්‍රයේ පැත්තේ සිදු කරනු ලැබේ නිර්මාණය-මාස්ටර්. අපගේ නඩුවේදී, මෙය නාමාවලියකි /home/habr/master. මානකරන ගොනුව 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". මාතෘකා යතුරු в 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 ගබඩාවක් භාවිතා කරන අතර එය නිශ්චිත කාල පරාසයන් තුළ ඡන්ද විමසීමක් සිදු කරයි.

පළමු තර්කය වන්නේ ඔබේ ගබඩාවට යන මාර්ගයයි.

workdir පැත්තේ ඇති ෆෝල්ඩරය වෙත යන මාර්ගය නියෝජනය කරයි කම්කරුවා- මාර්ගයට සාපේක්ෂව /home/habr/worker/yourProject/build git ගබඩාවේ දේශීය අනුවාදය ගබඩා කරයි.

ශාඛාව අනුගමනය කළ යුතු ගබඩාවේ විශේෂිත ශාඛාවක් අඩංගු වේ.

ඡන්ද පරතරය ඉන් පසු තත්පර ගණන අඩංගු වේ BuildMaster වෙනස්කම් සඳහා ගබඩාව මත විමසනු ඇත.

ව්‍යාපෘතියක ගබඩාවේ වෙනස්කම් නිරීක්ෂණය කිරීමට ක්‍රම කිහිපයක් තිබේ.

සරලම ක්රමය වන්නේ ඡන්දය, එය ඇඟවුම් කරයි BuildMaster වරින් වර ගබඩාව සමඟ සේවාදායකය මත විමසුම් කරයි. නම් කැපවන්න ගබඩාවේ වෙනස්කම් පිළිබිඹු කරයි, එවිට BuildMaster යම් ප්රමාදයකින් අභ්යන්තර වස්තුවක් නිර්මාණය කරනු ඇත වෙනස් සහ එය සිදුවීම් හසුරුවන්නා වෙත යවන්න උපලේඛකයා, ව්‍යාපෘතිය ගොඩනැගීමට සහ පරීක්ෂා කිරීමට පියවර දියත් කරනු ඇත කම්කරුවා-ඉ. මෙම පියවරයන් අතර සඳහන් වනු ඇත යාවත්කාලීන ගබඩාව. හරියටම ක්‍රියාත්මකයි කම්කරුවාමෙය ගබඩාවේ දේශීය පිටපතක් සාදනු ඇත. මෙම ක්‍රියාවලියේ විස්තර ඊළඟ කොටස් දෙකෙන් පහතින් ආවරණය කෙරේ. (5.4 и 5.5).

ගබඩාවක වෙනස්කම් නිරීක්ෂණය කිරීමේ ඊටත් වඩා අලංකාර ක්‍රමයක් නම් එය සත්කාරක සේවාදායකයෙන් කෙලින්ම පණිවිඩ යැවීමයි. BuildMaster- ව්‍යාපෘති මූල කේත වෙනස් කිරීම ගැන. මෙම අවස්ථාවේ දී, සංවර්ධකයා සෑදූ වහාම කැපවන්න, ව්‍යාපෘති ගබඩාව සහිත සේවාදායකය පණිවිඩයක් යවනු ඇත BuildMaster-y. තවද ඔහු වස්තුවක් නිර්මාණය කිරීමෙන් එය බාධා කරයි PBCchangeSource. ඊළඟට, මෙම වස්තුව මාරු කරනු ලැබේ උපලේඛකයා, ව්යාපෘතිය ගොඩනැගීමට සහ එය පරීක්ෂා කිරීමට පියවර සක්රිය කරයි. මෙම ක්රමයේ වැදගත් අංගයක් වන්නේ වැඩ කිරීමයි කොක්කෙන්- ගබඩාවේ සර්වර් ස්ක්‍රිප්ට්. පිටපතේ කොක්කෙන්-a, ක්‍රියාවන් සැකසීම සඳහා වගකිව යුතු විට කැපවන්න-e, ඔබට උපයෝගීතාව ඇමතීමට අවශ්ය වේ යැවීම වෙනස් කිරීම සහ ජාල ලිපිනය සඳහන් කරන්න BuildMaster-ඒ. ඔබ සවන් දෙන ජාල වරායද සඳහන් කළ යුතුය PBCchangeSource. PBCchangeSource, මාර්ගය වන විට, කොටසකි BuildMaster-ඒ. මෙම ක්රමය අවසරය අවශ්ය වනු ඇත පරිපාලක-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-අ වස්තුවට වෙනස් සහ දැන් සෑම ෂෙඩුලර් ඒවා මත පදනම්ව, එය ව්‍යාපෘති ගොඩනැගීමේ ක්‍රියාවලිය ආරම්භ කිරීමට ඉල්ලීම් ගොඩනඟයි. කෙසේ වෙතත්, මෙම ඉල්ලීම් තවදුරටත් පෝලිමට මාරු කරන්නේ කවදාද යන්න තීරණය කරයි. වස්තුවකි Builder ඉල්ලීම් පෝලිමක් ගබඩා කර වත්මන් එකලස් කිරීමේ තත්ත්වය වෙනම නිරීක්ෂණය කරයි කම්කරුවා-ඉ. Builder මත පවතී BuildMaster-e සහ මත කම්කරුවා-ඉ. ඔහු සමඟ යවයි BuildMaster- මත කම්කරුවා- සහ දැනටමත් නිශ්චිත ගොඩනගා ගන්න - අනුගමනය කළ යුතු පියවර මාලාවක්.
වත්මන් උදාහරණයෙන් අපට පෙනෙන්නේ එවැන්නකි උපලේඛන කෑලි 2 ක් සෑදී ඇත. එපමණක්ද නොව, සෑම එකක්ම තමන්ගේම වර්ගයක් ඇත.

SingleBranchScheduler - කාලසටහනේ වඩාත්ම ජනප්‍රිය පන්ති වලින් එකකි. එය එක් ශාඛාවක් නරඹන අතර එහි වාර්තාගත වෙනසක් මගින් අවුලුවනු ලැබේ. ඔහු වෙනස්කම් දකින විට, ඔහුට ගොඩනැගීමේ ඉල්ලීම යැවීම ප්‍රමාද කළ හැකිය (විශේෂ පරාමිතියෙහි දක්වා ඇති කාල සීමාව සඳහා කල් දමන්න treeStableTimer) තුළ නාමය දර්ශනය වන කාලසටහනේ නම සකසයි BuildBot- වෙබ් අතුරු මුහුණත. තුල පෙරහන වෙනස් කරන්න පෙරහනක් සකසා ඇති අතර, එය සම්මත කිරීමෙන් පසු ශාඛාවේ වෙනස්කම් ඉදිකිරීම් සඳහා ඉල්ලීමක් යැවීමට කාලසටහන විමසයි. තුල සාදන්නාගේ නම් නම සඳහන් වේ සාදන්නා-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": "."}))

periodicBuildTimer තත්පර වලින් මෙම ආවර්තිතා කාලය නියම කරයි.

BuildFactory නිශ්චිත එකක් නිර්මාණය කරයි ගොඩනගා ගන්න, එතකොට සාදන්නා වෙත යවයි කම්කරුවා. මෙම BuildFactory අනුගමනය කළ යුතු පියවර පෙන්නුම් කරයි කම්කරුවා-y. ක්රමය ඇමතීමෙන් පියවර එකතු කරනු ලැබේ addStep

මෙම උදාහරණයේ පළමු එකතු කළ පියවර වන්නේ git clean -d -f -f –xඑවිට git පිටවීම. මෙම ක්රියාවන් පරාමිතියෙහි ඇතුළත් වේ ක්රමයකි, එය පැහැදිලිව සඳහන් කර නැති නමුත් පෙරනිමි අගයක් ඇඟවුම් කරයි නැවුම්. පරාමිතිය mode='වර්ධක' ගොනු ඇති නාමාවලියෙන් බව පෙන්නුම් කරයි chechout, ගබඩාවෙන් අතුරුදහන් වූ විට, ස්පර්ශයෙන් තොරව සිටින්න.

දෙවන එකතු කළ පියවර වන්නේ ස්ක්‍රිප්ට් ඇමතීමයි නඩු පරාමිතිය සමඟ හෙලෝ පැත්තේ කම්කරුවා-a නාමාවලියෙන් /home/habr/worker/yourProject/build පරිසර විචල්‍යය PATHONPATH=... මේ අනුව, ඔබට ඔබේම ස්ක්‍රිප්ට් ලියා පැත්තකින් ක්‍රියාත්මක කළ හැක. කම්කරුවා- සෑම පියවරක්ම util.ShellCommand. මෙම ස්ක්‍රිප්ට් සෘජුවම ගබඩාවට තැබිය හැකිය. එවිට දී chechout- ඔවුන් වැටෙනු ඇත /home/habr/worker/yourProject/build. කෙසේ වෙතත්, පසුව "නමුත්" දෙකක් තිබේ:

  1. කම්කරුවා යතුරකින් නිර්මාණය කළ යුතුය --උමාස්ක් එය පසුව ක්රියාත්මක කිරීමේ අයිතිවාසිකම් අවහිර නොකරන ලෙස ලොව පුරාවටම-එම.
  2. දී git pushමෙම ස්ක්‍රිප්ට් වලින් -e ඔබ දේපල සඳහන් කළ යුතුය ක්රියාත්මක කළ හැකිඒ නිසා පසුව chechout-e Git ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීමේ අයිතිය නැති කර ගත්තේ නැත.

ඉදිකිරීම්කරුවන් 5.6 ක්


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

දේ ගැන Builder කියා දෙන ලදී මෙහි. දැන් මම එය නිර්මාණය කරන්නේ කෙසේද යන්න ගැන වඩාත් විස්තරාත්මකව ඔබට කියමි. BuilderConfig ඉදිකිරීම්කරුවෙකි සාදන්නා. එවැනි නිර්මාණකරුවන් තුළ c['ඉදි කරන්නන්'] මෙය වස්තු පත්‍රයක් බැවින් ඔබට කිහිපයක් සඳහන් කළ හැක සාදන්නා වර්ගය. දැන් අපි උදාහරණය නැවත ලියමු BuildBot, එය අපගේ කාර්යයට සමීප කිරීම.


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

දැන් මම ඔබට පරාමිතීන් ගැන කියන්නම් BuilderConfig.

නාමය නම සඳහන් කරයි සාදන්නා-ඒ. මෙන්න අපි එය නම් කළා ඔබේ ව්‍යාපෘතිය... මෙයින් අදහස් කරන්නේ on කම්කරුවා- මෙම මාර්ගය නිර්මාණය වනු ඇත /home/habr/worker/yourProject/build. ෂෙඩුලර් සොයමින් සාදන්නා මෙම නමින් පමණි.

සේවක නම් පත්රය අඩංගු වේ කම්කරුවා-s. ඒ සෑම එකක්ම එකතු කළ යුතුය c['කම්කරුවන්'].

කර්මාන්ත ශාලාව - විශේෂිත ගොඩනගා ගන්න, එය සම්බන්ධ කර ඇත සාදන්නා. ඔහු වස්තුව යවනු ඇත ගොඩනගා ගන්න මත කම්කරුවා මෙහි ඇතුලත් සියලුම පියවර සම්පූර්ණ කිරීමට ගොඩනගා ගන්න-එම.

6. ඔබේම වින්‍යාසය පිළිබඳ උදාහරණයක්

හරහා ක්‍රියාත්මක කිරීමට මා යෝජනා කරන ව්‍යාපෘති ගෘහ නිර්මාණ උදාහරණය මෙන්න BuildBot
.

අපි අනුවාද පාලන පද්ධතියක් ලෙස භාවිතා කරන්නෙමු svn. ගබඩාව යම් ආකාරයක වලාකුළක පිහිටා ඇත. මෙන්න මේ cloud එකේ address එක svn.host/svn/yourProject/කඳ. යට වලාකුළේ svn ගිණුමේ පරිශීලක නාමයක් ඇත: පරිශීලක, passwd: මුරපදය. පියවර නියෝජනය කරන ස්ක්‍රිප්ට් ගොඩනගා ගන්න-a ශාඛාවේ ද වනු ඇත svn, වෙනම ෆෝල්ඩරයක buildbot/worker_linux. මෙම ස්ක්‍රිප්ට් සුරකින ලද දේපල සමඟ ගබඩාවේ පිහිටා ඇත ක්‍රියාත්මක කළ හැකි.

BuildMaster и කම්කරුවා එකම ධාරකය මත ධාවනය කරන්න project.host .BuildMaster එහි ගොනු ෆෝල්ඩරයක ගබඩා කරයි /home/habr/master. කම්කරුවා එය පහත මාර්ගයේ ගබඩා කර ඇත /home/habr/කම්කරු. ක්රියාවලිය සන්නිවේදනය BuildMaster-a සහ කම්කරුවා-a ප්‍රොටෝකෝලය අනුව වරාය 4000 හරහා සිදු කෙරේ BuildBot-a, එනම් 'pb' ප්රොටෝකෝලය.

ඉලක්ක ව්‍යාපෘතිය සම්පූර්ණයෙන්ම පයිතන් වලින් ලියා ඇත. කාර්යය වන්නේ එහි වෙනස්කම් නිරීක්ෂණය කිරීම, ක්රියාත්මක කළ හැකි ගොනුවක් නිර්මාණය කිරීම, ලේඛන උත්පාදනය කිරීම සහ පරීක්ෂණ පැවැත්වීමයි. අසාර්ථක වූ විට, සියලුම සංවර්ධකයින් අසාර්ථක ක්‍රියාවක් ඇති බවට විද්‍යුත් තැපෑලෙන් පණිවිඩයක් යැවිය යුතුය.

වෙබ් සංදර්ශකය BuildBot අපි වරාය 80 වෙත සම්බන්ධ කරමු project.host. Apatch ස්ථාපනය කිරීම අවශ්ය නොවේ. පුස්තකාලයේ කොටසක් ලෙස ඇඹරී ඇත දැනටමත් වෙබ් සේවාදායකයක් ඇත, BuildBot එය භාවිතා කරයි.

සඳහා අභ්යන්තර තොරතුරු ගබඩා කිරීම සඳහා BuildBot අපි භාවිතා කරන්නෙමු sqlite.

තැපැල් කිරීම සඳහා සත්කාරකයකු අවශ්‍ය වේ smtp.your.domain - එය තැපෑලෙන් ලිපි යැවීමට ඉඩ සලසයි [විද්‍යුත් ආරක්‍ෂිත] සත්යාපනය නොමැතිව. ධාරකයේ ද'SMTP තැපැල් 1025 හි මිනිත්තු අසනු ලැබේ.

ක්‍රියාවලියට සම්බන්ධ පුද්ගලයන් දෙදෙනෙක් සිටී: පරිපාලක и පරිශීලක. පරිපාලක පරිපාලනය BuildBot. පරිශීලකයා යනු සිදු කරන පුද්ගලයාය කැපවන්න-s.

Exacutable ගොනුව හරහා ජනනය වේ 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-a සහ කම්කරුවා-ඒ. ඉන්පසු මෙම ගොනුව අලවන්න master.cfg в /home/habr/master.

ඊළඟ පියවර වන්නේ සේවාව ආරම්භ කිරීමයි BuildMaster


sudo buildbot start /home/habr/master

ඉන්පසු සේවාව ආරම්භ කරන්න කම්කරුවා-a


buildbot-worker start /home/habr/worker

සූදානම්! දැන් Buildbot වෙනස්කම් නිරීක්ෂණය කර අවුලුවාලනු ඇත කැපවන්න-y ඇතුලට svn, ඉහත වාස්තු විද්‍යාව සමඟ ව්‍යාපෘතියක් ගොඩනැගීමේ සහ පරීක්ෂා කිරීමේ පියවරයන් ඉටු කිරීම.

පහතින් මම ඉහත සඳහන් කළ විශේෂාංග කිහිපයක් විස්තර කරමි master.cfg.

6.1 ඔබේ මාස්ටර් වෙත යන ගමනේදී.cfg


ලියන අතරතුර මගේ master.cfg බොහෝ දෝෂ සිදුවනු ඇත, එබැවින් ලොග් ගොනුව කියවීම අවශ්ය වනු ඇත. ලෙස ගබඩා කර ඇත BuildMaster-ec නිරපේක්ෂ මාර්ගය /home/habr/master/twistd.log, සහ පැත්තේ කම්කරුවානිරපේක්ෂ මාර්ගයක් සහිත -a /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_always strunk ගබඩාවේ අඩංගු වන්නේ පමණක් බව පවසමින් ක්‍රියාවලිය සරල කරයි කඳ.

В උපලේඛනගත කරන්නන් දක්වා ඇත පෙරහන වෙනස් කරන්නකවුද බලන්නේ නැහැ සහ එය සමඟ ශාඛාවක් සම්බන්ධ කරයි කඳ හරහා දී ඇති සංගමයකට අනුව split_file_always strunk. වෙනස්කම් වලට ප්‍රතිචාර දැක්වීම කඳ, දියත් කරයි සාදන්නා නම සමඟ ඔබේ ව්‍යාපෘතිය.

දේපළ ක්‍රියාවලියේ හිමිකරු ලෙස පරිපාලකයාට ගොඩනැගීමේ සහ පරීක්‍ෂණ ප්‍රතිඵලවල තැපැල් ලැයිස්තු ලැබෙන පරිදි මෙහි එය අවශ්‍ය වේ.

පියවර ගොඩනගා ගන්න-a ලොව පුරාවටම ගබඩාවේ දේශීය අනුවාදයේ ඇති ඕනෑම ගොනු සම්පූර්ණයෙන්ම මකා දැමීමට හැකියාව ඇත කම්කරුවා-ඒ. ඉන්පසු සම්පූර්ණ කරන්න svn යාවත්කාලීන කිරීම. මාදිලිය පරාමිතිය හරහා වින්යාස කර ඇත mode=සම්පූර්ණ, method=නැවුම්. පරාමිතිය 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 දැනුම්දීම් යැවීමට ඊමේල් භාවිතා කරයි.

සැකිල්ල_html පුවත් පත්‍රිකාව සඳහා පෙළ අච්චුව සකසයි. සලකුණු සෑදීමට HTML භාවිතා කරයි. එය එන්ජිම මගින් වෙනස් කර ඇත ජිංජා2 (සමග සැසඳිය හැක ජැන්ගෝ). BuildBot පණිවිඩ පෙළ ජනනය කිරීමේ ක්‍රියාවලියේදී අච්චුව තුළට අගයන් ආදේශ කරන විචල්‍ය සමූහයක් ඇත. මෙම විචල්‍යයන් {{ ද්විත්ව කැරලි වරහන් }} තුළ කොටා ඇත. උදාහරණ වශයෙන්, සාරාංශය සම්පූර්ණ කරන ලද මෙහෙයුම්වල තත්ත්වය, එනම් සාර්ථකත්වය හෝ අසාර්ථකත්වය පෙන්වයි. ඒ ව්යාපෘති ප්රතිදානය කරනු ඇත ඔබේ ව්‍යාපෘතිය. එබැවින්, පාලන විධාන භාවිතා කිරීම ජිංජා2, විචල්යයන් BuildBot-a සහ python string ආකෘතිකරණ මෙවලම්, ඔබට තරමක් තොරතුරු සහිත පණිවිඩයක් නිර්මාණය කළ හැකිය.

MailNotifier පහත තර්ක අඩංගු වේ.

fromaddr - සෑම කෙනෙකුටම පුවත් පත්‍රිකාව ලැබෙන ලිපිනය.

උනන්දුවක් දක්වන පරිශීලකයින්ට යවන්න=True විසින් සාදන ලද හිමිකරුට සහ පරිශීලකයාට පණිවිඩයක් යවයි කැපවන්න.

සොයන්න — පුවත් පත්‍රිකාව ලබන පරිශීලකයන්ගේ නම්වලට එකතු කළ යුතු උපසර්ගයකි. ඒ නිසා පරිපාලක ලිපිනයෙහි පරිශීලකයාට පුවත් පත්‍රිකාව ලැබෙන ආකාරය [විද්‍යුත් ආරක්‍ෂිත].

relayhost සේවාදායකය විවෘත කර ඇති සත්කාරක නාමය සඳහන් කරයි SMTP, ඒ smptPort සවන් දෙන වරාය අංකය සඳහන් කරයි SMTP සේවාදායකය.

මාදිලිය="අවවාදය" අවම වශයෙන් එක් පියවරක් තිබේ නම් පමණක් තැපැල් කිරීම කළ යුතු බව පවසයි ගොඩනගා ගන්න-a, තත්ත්‍වය අසාර්ථක වීම හෝ අනතුරු ඇඟවීමෙන් අවසන් විය. සාර්ථකත්වයේ දී, පුවත් පත්‍රිකාවක් යැවීමට අවශ්‍ය නොවේ.

අමතර ලබන්නන් හිමිකරුට සහ එය සිදු කළ පුද්ගලයාට අමතරව තැපැල් යැවිය යුතු පුද්ගලයින්ගේ ලැයිස්තුවක් අඩංගු වේ කැපවන්න.

messageFormatter පණිවිඩ ආකෘතිය, එහි අච්චුව සහ ලබා ගත හැකි විචල්‍ය සමූහයක් සඳහන් කරන වස්තුවකි ජිංජා2. වැනි විකල්ප ඕනේProperties=ඇත්ත и wantSteps=ඇත්ත මෙම පවතින විචල්‍ය සමූහය නිර්වචනය කරන්න.

සමඟ['සේවා']=[sendMessageToAll] අපගේ සේවා ලැයිස්තුවක් සපයයි වාර්තාකරු පවසයි.

අපි ඒක කළා! සුභ පැතුම්

අපි අපේම වින්‍යාසයක් සාදා එයට හැකියාව ඇති ක්‍රියාකාරීත්වය දුටුවෙමු. BuildBot. ඔබේ ව්‍යාපෘතිය නිර්මාණය කිරීමට මෙම මෙවලම අවශ්‍ය දැයි තේරුම් ගැනීමට මෙය ප්‍රමාණවත් යැයි මම සිතමි. ඔබ ඔහු ගැන උනන්දුද? එය ඔබට ප්‍රයෝජනවත් වේවිද? ඔහු සමඟ වැඩ කිරීමට පහසුද? එහෙනම් මම මේ ලිපිය ලියන්නේ නිකරුනේ නොවේ.

සහ තවදුරටත්. වෘත්තීය ප්‍රජාව භාවිතා කිරීමට මම කැමතියි BuildBot, පුළුල් විය, අත්පොත් පරිවර්තනය කරන ලදී, ඊටත් වඩා උදාහරණ ඇත.

ඔබගේ අවධානයට ඔබ සැමට ස්තුතියි. වාසනාව.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න