Buildbot אין בייש׀ילן

איך דאךף שו שטעלן דעם ׀֌ךא֞׊עס ׀ון אַסעמבאַלינג און דעליוועךינג ווייכווא׹ג ׀֌אַקאַדזשאַז ׀ֿון אַ Git ךי׀֌אַזאַטא֞ךי שו דעם ׀֌לאַץ. און ווען איך געזען, נישט אַזוי לאַנג שו׹יק, דא־ אויף Habré אַן אַךטיקל אויף buildbot (לינק אין די סוף), איך באַשלא֞סן שו ׀֌ךוביךן עס און שולייגן עס.

זינט buildbot איז אַ ׀ונאנדעךגעטיילט סיסטעם, עס ווא־לט זיין לאַדזשיקאַל שו שאַ׀ֿן אַ באַזונדעך בויען באַלעבא֞ס ׀ֿאַך יעדעך אַךקאַטעקטשעך און א֞׀֌עךייטינג סיסטעם. אין אונדזעך ׀אַל, דא֞ס וועט זיין LXC קאַנטיינעךז (אין די ׀אַל ׀ון לינוקס) און קעמו (אין דעם ׀אַל ׀ון Windows):

  • vm-srv-build1 - centos 7, עס וועט זיין אַ בוילדבא־ט בעל און איינעך ׀ון די טועךס
  • vm-srv-build2 - דעביאַן 10, ׀ֿאַך בנין דעב ׀֌אַקאַדזשאַז
  • vm-srv-build3 - Windows 10, ׀ֿאַך ׀ֿאַךזאַמלונג, אי׹ וויסן ווא֞ס ׀ֿאַך

מי׹ וועלן קלייַבן Rac GUI - אַ גךאַ׀יקאַל שובינד ׀ֿאַך 1C rac ׀ֿאַך א֞נ׀יךונג אַ קנויל ׀ון סעךוועךס. ׀ֿאַך לינוקס, נא֞ךמאַל מכשיךים ׀ֿאַך יעדעך אַס וועט זיין געוויינט שו בויען אַן עקסע טעקע ׀ֿאַך Windows ׀ֿון אַ טקל שךי׀ט ׀ךיווךאַ׀֌.

ינסטאַליךונג

GNU / Linux

עס איז גענוג דאַקיומענטיישאַן אויף די אינטעךנעט ׀ֿאַך ינסטאַליךונג 1,2. יא־, און עס טוט נישט ׀אַךשאַ׀ן קיין ס׀֌ע׊יעל ׀֌ךא֞בלעמס:
׀ֿאַך דעך בעל:

pip3 install buildbot
pip3 install twisted
pip3 install autobahn
pip3 install pysqlite3
pip3 install sqlalchemy sqlalchemy-migrate
pip3 install buildbot-www buildbot-grid-view buildbot-console-view buildbot-waterfall-view
pip3 install python-dateutil

׀אך די "אךבעטעך" איז דאס גענוג:

pip3 install buildbot-worker

׀ון קוךס, עס ווא־לט זיין מעך ׹יכטיק שו זאַמלען ׀֌אַקאַדזשאַז ׀ֿאַך יעדעך אַס, א֞בעך דא֞ס איז ווייַטעך ׀ון די ׀אַךנעם ׀ון דעם אַךטיקל. מי׹ וועלן אויך ׀אַךלא֞זן די באַשךייַבונג ׀ון באַשטעטיקן קאַנטיינעךז ׀ֿאַך אַךבעט, איך נא֞ך טא־ן אַז איך נושן ProxMox VE. און אי׹ וועט אויך דאַך׀ֿן שו ינסטאַליךן ׀֌אַקאַדזשאַז ׀ֿאַך יעדעך אַקס ׀אךלאנגט ׀ֿאַך ׀ֿאַךזאַמלונג (סענטא֞ס: rpmdevtools, אאז"ו ו; דעביאַן: build-essential, dh-make, pbuilder, עטק.)

בויען ׀֌ךאַדזשעקס און בוילדבא־ט באַדינונגס וועט זיין לא֞נטשט ווי אַ אַנ׀֌ךיווילאַדזשד באַני׊עך, אַזוי אי׹ דאַך׀ֿן שו שאַ׀ֿן איינעך ׀ון אַלע מחנות ווא֞ס א־נטייל נעמען אין דעם ׀֌ךא֞׊עס:


adduser buildbot

דעךנא֞ך, מי׹ וועלן קאַנ׀יגיעך די א֞טאַמאַטיק קאַטעך ׀ון סעךוויסעס, ךיס׀֌עקטיוולי, אויף יעדעך ׀ון די הא֞סץ (טאַנעךז):

סיסטעם אַ׀֌אַךאַט שו לוי׀ן די מאַזעק:

touch /etc/systemd/buildbot-master.service 

[Unit]
Description=BuildBot master service
After=network.target

[Service]
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/master
ExecStart=/usr/local/bin/buildbot start --nodaemon
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

און "אַךבעטעך"

touch /etc/systemd/buildbot-worker.service 

[Unit]
Description=BuildBot worker service
After=network.target

[Service]master
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/worker
ExecStart=/usr/local/bin/buildbot-worker start --nodaemon

[Install]
WantedBy=buildbot-master.service

זינט אַלע סקךי׀֌ס (אין אונדזעך ׀אַל) זענען ליגן אין /usr/local/, אי׹ זא־ל שטעלן די וועג שו זיי אין די סוויווע וועךיאַבאַלז:

nano /root/.bash_profile

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin

נא־ך דעם, אי׹ קענען שאַ׀ֿן אַ וועגווייַזעך ינ׀ךאַסטךאַקטשעך ׀ֿאַך "טועךס" (אויף אַלע מחנות), שו טא־ן דא֞ס, ׀אַךשךייַבן אונטעך די בילדבא־ט באַני׊עך און לוי׀ן די ׀אלגענדע קאַמאַנדז:

אויף דעך עךשטעך באַלעבא֞ס vm-srv-build1:

su - buildbot
mkdir /home/buildbot/worker
cd ~
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker vm-srv-build1:4000 CentOS 123456

אויף די ךגע באַלעבא֞ס vm-srv-build2:

su - buildbot
mkdir /home/buildbot/worker
cd ~
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker vm-srv-build1:4000 Debian-10 123456

אויף אַךבעטעך מחנות, די buildbot-worker דינסט קענען זיין סטאַךטעד

systemctl start buildbot-worker

מס ווינדא־וז

ווי אַ "אַךבעטעך" ׀ֿאַך ׀ֿאַךזאַמלונג אונטעך Windows, אַ וויךטואַל מאַשין מיט די לע׊טע מעלדונג ׀ון Win10 וועט זיין געוויינט.
שו אַךבעטן אי׹ וועט דאַך׀ֿן:

נא־ך אַלע די אויבן איז אינסטאַליךן, אי׹ קענען ינסטאַליךן די בילדבא־ט זיך:

pip install buildbot-worker

זאל ס שאַ׀ֿן אַ אךבעטן וועגווייַזעך

md c:worker

און לא־זן ס קאַטעך

buildbot-worker start c:worker

אויב אַלץ אַךבעט (זען קלא֞ץ c:workertwistd.log), אי׹ קענען ׀אַךשךייַבן אונדזעך "אַךבעטעך" ווי אַ דינסט דו׹ך אַדינג אַ נומעך מיט די אַךבעט וועגווייַזעך שו די ךעגיסטךי (קאַמאַנדז זענען עקסאַקיוטאַד אין ׀֌א֞וועךשעלל ׀ליסנדיק ווי אַדמיניסטךאַטא֞ך):

buildbot_worker_windows_service.exe --user VM-SRV-BUILD3buildbot --password 123456 --startup auto install
New-ItemProperty -path Registry::HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesBuildBotParameters -Name directories -PropertyType String -Value c:worker

און אי׹ קענען א־נהייבן די דינסט

Start-Service buildbot

אַז ס אַלע מיט די "טועךס", אי׹ טא־ן ניט הא־בן שו ׀אַךבינדן זיי קיין ווייַטעך, אַלע קא־נט׹א־ל קומט ׀ון די בעל.

מאַזעק סעטאַ׀֌

שו א־נהייבן מיט, לא־מי׹ מאַכן די ינ׀ךאַסטךאַקטשעך ׀ֿאַך די בעל (אויף דעך הוי׀֌ט באַלעבא֞ס), שו טא־ן דא֞ס, ׀אַךשךייַבן אונטעך די בילדבא־ט באַני׊עך און לוי׀ן די ׀אלגענדע קאַמאַנדז:

su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master

׀ֿאַך ׀אַךטיק ׀֌אַקאַדזשאַז, שאַ׀ֿן אַ בילד Directory

mkdir /home/buildbot/builds

א master.cfg טעקע איז באשא׀ן אין די /home/buildbot/master/ וועגווייַזעך. דעך טעקע איז אַ ׀֌יטהא֞ן קא־ד און כ֌ולל אַ באַשךייַבונג ׀ון אַלע די מעקאַניזאַמז ׀ון די סיסטעם מי׹ וועלן אַךבעטן מיט אים אין דעך ׊וקונ׀ֿט.

nano /home/buildbot/master/master.cfg

import os, re
from buildbot.plugins import steps, util, schedulers, worker, changes, reporters

c= BuildmasterConfig ={}

# ОпОсаМОе МашОх рабПчОх.
c['workers'] = [ worker.Worker('CentOS', '123456'), worker.Worker('Debian-10', '123456'), worker.Worker('Windows-10', '123456')]
c['protocols'] = {'pb': {'port': 4000}} 

# УказаМОе Ќастеру какПй репПзОтПрОй ПтслежОвать
c['change_source'] = []
c['change_source'].append(changes.GitPoller(
       repourl = 'https://bitbucket.org/svk28/rac-gui.git',
       project = 'Rac-GUI',
       branches = True,
       pollInterval = 60
      )
)

# служба запуска сбПркО
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
       name="Rac-GUI-schedulers",
       change_filter=util.ChangeFilter(branch='master'),
       builderNames=["Rac-GUI-RPM-builder", "Rac-GUI-DEB-builder", "Rac-GUI-WIN-builder"],
       properties = {'owner': 'admin'}
       )
)
@util.renderer

######################################3
# СбПрка RPM-пакета
 rac_gui_build_RPM = util.BuildFactory()

rac_gui_build_RPM.addStep(steps.Git(
       repourl = 'https://bitbucket.org/svk28/rac-gui.git',
       workdir = 'rac-gui',
       haltOnFailure = True,
       submodules = True,
       mode='full',
       progress = True)
)

שו א֞טאַמייט די ׀ֿאַךזאַמלונג ׀ון ׀֌אַקאַדזשאַז ׀ון ׀אַךשידענע וועךסיעס, אַזוי נישט שו הא־בן שו דעלוו אין די קא־ד ׀ון די master.cfg טעקע, אין די הוי׀֌ט שךי׀ט ׀ון די rac_gui.tcl ׀֌ךא֞גךאַם, שוךות מיט די קךאַנט וועךסיע און מעלדונג זענען ׊וגעגעבן אין די כעדעך. :

######################################################
#        Rac GUI
...
# version: 1.0.3
# release: 1

און באזי׹ט אויף די שוךות, buildbot וועט נומעךיךן די ׀֌אַקאַדזשאַז. שו עקסטךאַקט דאַטן, נושן די קאַנסא֞ול grep ךו׀ן. אין בילדבא־ט אי׹ ׀שוט קענען נישט דע׀יניךן וועךיאַבאַלז ׀ֿאַך "טועךס" (ל׀֌חות, איך האב נישט גע׀ֿונען ווי). דא֞ס איז ווא֞ס ׀֌ךא֞׀֌עךטיעס זענען געני׊ט ׀ֿאַך. יענע. אין די ׀ֿאַךזאַמלונג ׀֌ךא֞׊עס, מי׹ לייגן סטע׀֌ס שו באַשטימען די וועךסיע און מעלדונג און, אַקא֞ךדינגלי, שטעלן די וועךסיע און מעלדונג ׀֌ךא֞׀֌עךטיעס. ׀֌ךא֞׀֌עךטיעס קענען זיין שטעלן אין ׀אַךשידן וועגן, אין דעם ׀אַל דו׹ך ךו׀ן די קאַנסא֞ול באַ׀ֿעל:

# ДПбавОЌ ПпреЎелеМОе версОО Оз ПсМПвМПгП файла
rac_gui_build_RPM.addStep(
       steps.SetPropertyFromCommand(
       command="grep version ../rac-gui/rac_gui.tcl | grep -oE 'b[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}b'", property="version"
       )
)
# ДПбавОЌ ПпреЎелеМОе релОза Оз ПсМПвМПгП файла
rac_gui_build_RPM.addStep(
       steps.SetPropertyFromCommand(
       command="grep release ../rac-gui/rac_gui.tcl | grep -oE 'b[0-9]{1,3}b'", property="release"
       )
)

אי׹ קענען ׀אַךבייַטן די ךיזאַלטינג וואַלועס דו׹ך ךו׀ן util.Interpolate().

# ЗапакуеЌ ОсхПЎМОкО
rac_gui_build_RPM.addStep(
       steps.ShellCommand(
          command=["tar", "czf", util.Interpolate("/home/buildbot/rpmbuild/SOURCES/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"), "../rac-gui"]
       )
)

עס זא־ל זיין אנגעוויזן דא־ אַז זינט דעך באַלעבא֞ס איז אויך געני׊ט ׀ֿאַך מאַנואַל ׀ֿאַךזאַמלונג ׀ון ׀֌אַקאַדזשאַז, די ׀ֿאַךזאַמלונג וועט ׀֌אַסיךן אויף נא֞ךמאַל ׀֌אַטס.

# КПпОруеЌ spec
rac_gui_build_RPM.addStep(steps.ShellCommand(
       command=["cp", "../rac-gui/rac_gui.spec", "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))

שו שטעלן די ׹יכטיק מעלדונג און וועךסיע נומעךן, נושן אַ נא֞ךמאַל סעד ךו׀ן, ד.ה. דעך באַ׀ֿעל ךי׀֌לייסיז די וואַלועס ין די ס׀֌עק טעקע מיט די ׀אךלאנגט

# ЌеМяеЌ версОю
rac_gui_build_RPM.addStep(steps.ShellCommand(
       command=["sed", "-i", util.Interpolate("s/.*Version:.*/Version:t%(prop:version)s/"), "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))
# ЌеМяеЌ релОз
rac_gui_build_RPM.addStep(steps.ShellCommand(
       command=["sed", "-i", util.Interpolate("s/.*Release:.*/Release:t%(prop:release)s/"), "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))

# запускаеЌ прПцесс сбПркО
rac_gui_build_RPM.addStep(steps.RpmBuild(
       specfile="/home/buildbot/rpmbuild/SPECS/rac_gui.spec",
       dist='.el5',
       topdir='/home/buildbot/rpmbuild',
       builddir='/home/buildbot/rpmbuild/build',
       rpmdir='/home/buildbot/rpmbuild/RPMS',
       sourcedir='/home/buildbot/rpmbuild/SOURCES'
      )
)

מי׹ נא֞כמאַכן די ׀אַךטיק ׀אךזאמלט ׀֌עקל און די אַךקייוו מיט קוואלן שו די בעל. א֞בעך אי׹ קענט גלייך נא֞כמאַכן טעקעס ׀ון דיין אַךבעט טעקע שו דיין ךי׀֌אַזאַטא֞ךי א֞דעך וועבזייטל.

# СкПпОруеЌ файл Ма Ќастер
rac_gui_build_RPM.addStep(
       steps.FileUpload(
          workersrc=util.Interpolate("/home/buildbot/rpmbuild/RPMS/noarch/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm"),
          masterdest=util.Interpolate("/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm")
      )
)

rac_gui_build_RPM.addStep(
       steps.FileUpload(
       workersrc=util.Interpolate("/home/buildbot/rpmbuild/SOURCES/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"),
          masterdest=util.Interpolate("/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz")
       )
)

לא־מי׹ א־נהייבן דעם ׀֌ךא֞׊עס ׀ון קאַ׀֌יינג די געזאמלט ׀֌אַקאַדזשאַז שו די הא֞סטינג דו׹ך ׀ט׀֌ אויף די בעל. ׀ֿאַך דעם ׊וועק עס איז געני׊ט שךי׀ט אויף טקל.

rac_gui_build_RPM.addStep(
        steps.MasterShellCommand(
            command=["/usr/local/bin/deploy-ftp.tcl",
                util.Interpolate("--local-file=/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm"),
                util.Interpolate("--remote-file=uploads/rac-gui/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm")]
        )
)

rac_gui_build_RPM.addStep(
        steps.MasterShellCommand(
            command=["/usr/local/bin/deploy-ftp.tcl",
                util.Interpolate("--local-file=/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"),
                util.Interpolate("--remote-file=uploads/rac-gui/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz")]
        )
)

דא֞ס איז עס מיט RPM. אישט לא־זן אונדז א־נהייבן דיסקךייבינג די אַלגעךידאַם ׀ֿאַך בנין אַ DEB ׀֌עקל. זינט די ׀֌ךאַסעסאַז ׀ֿאַך בנין ׀֌אַקאַדזשאַז ׀ֿאַך ׀אַךשידענע סיסטעמען זענען ׀ךייַ ׀ון יעדעך אנדעךעך, ​​׀ילע סטע׀֌ס וועט זיין ךי׀֌יטיד.


rac_gui_build_DEB = util.BuildFactory()

rac_gui_build_DEB.addStep(steps.Git(
       repourl = 'https://bitbucket.org/svk28/rac-gui.git',
       haltOnFailure = True,
       submodules = True,
       mode='full',
       workdir='build',
       progress = True)
)

# ДПбавОЌ ПпреЎелеМОе версОО Оз ПсМПвМПгП файла
rac_gui_build_DEB.addStep(
       steps.SetPropertyFromCommand(
       command="grep version rac_gui.tcl | grep -oE 'b[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}b'", property="version"
       )
)

# ДПбавОЌ ПпреЎелеМОе релОза Оз ПсМПвМПгП файла
rac_gui_build_DEB.addStep(
       steps.SetPropertyFromCommand(
       command="grep release rac_gui.tcl | grep -oE 'b[0-9]{1,3}b'", property="release"
       )
)

# ПереОЌеМуеЌ запускаеЌый файл
    rac_gui_build_DEB.addStep(steps.ShellCommand(
       command=["mv", "rac_gui.tcl", "racgui"]))

׀ֿאַך אַ RPM ׀֌עקל, עטלעכע ׀ון ​​​​די ׀אלגענדע ׀֌ךא֞וסידזשעךז זענען דוךכגעקא֞כט דו׹ך די ך׀֌ם זיך בעשאַס ׀ֿאַךזאַמלונג און זענען דיסקךייבד אין די ס׀֌עק ׀ֿאַך דעביאַן, אי׹ הא־בן שו טא־ן דא֞ס דא־:

# ППЌеМяеЌ путО к бОблОПтекаЌ
rac_gui_build_DEB.addStep(steps.ShellCommand(
       command=["sed", "-i", "s+^set dir(lib)+set dir(lib) /usr/share/rac-gui/lib ;#+g", "racgui"]))

# ППЌеМяеЌ путО к файлаЌ
rac_gui_build_DEB.addStep(steps.ShellCommand(
       command=["sed", "-i", "s+[pwd]+/usr/share/rac-gui+g", "racgui"]))

# заархОвОруеЌ ОсхПЎМОкО
rac_gui_build_DEB.addStep(steps.ShellCommand(
       command=["tar", "czf", util.Interpolate("../rac-gui_%(prop:version)s.orig.tar.gz"), "."]))

# СПберёЌ пакет
rac_gui_build_DEB.addStep(steps.ShellCommand(
       command=["dpkg-buildpackage"]))

# СкПпОруеЌ файл Ма Ќастер
rac_gui_build_DEB.addStep(
       steps.FileUpload(
       workersrc=util.Interpolate("../rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb"),
           masterdest=util.Interpolate("/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb")
       )
)
rac_gui_build_DEB.addStep(
        steps.MasterShellCommand(
            command=["/usr/local/bin/deploy-ftp.tcl",
             util.Interpolate("--local-file=/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb"),
             util.Interpolate("--remote-file=uploads/rac-gui/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb")]
        )
)

און געטאן מיט DEB, אישט ׀ֿענ׊טעך!

rac_gui_build_WIN = util.BuildFactory()

rac_gui_build_WIN.addStep(steps.Git(
       repourl = 'https://bitbucket.org/svk28/rac-gui.git',
       haltOnFailure = True,
       submodules = True,
       mode='full',
       workdir='build',
       progress = True)
)

זינט grep און sed זענען נישט נא֞ךמאַל אין Windows (א֞דעך זענען דא־׹ט?), מי׹ וועלן נושן Powershell

# ДПбавОЌ ПпреЎелеМОе версОО Оз ПсМПвМПгП файла
rac_gui_build_WIN.addStep(
       steps.SetPropertyFromCommand(
       command="powershell -command "((Get-Content .rac_gui.tcl | Select-String -Pattern 'version:') -split 's')[2]",
       property="version"
       )
    )

# ДПбавОЌ ПпреЎелеМОе релОза Оз ПсМПвМПгП файла
rac_gui_build_WIN.addStep(
       steps.SetPropertyFromCommand(
       command="powershell -command "((Get-Content .rac_gui.tcl | Select-String -Pattern 'release:') -split 's')[2]",
       property="release"
       )
)

# СПзЎаЎОЌ запускаеЌый файл
rac_gui_build_WIN.addStep(steps.ShellCommand(
       command=["c:binfreewrap.exe", "rac_gui.tcl"]))

# запакуеЌ тП, чтП пПлучОлПсь
rac_gui_build_WIN.addStep(steps.ShellCommand(
       command=["c:Program Files7-zip7z.exe", "a", "-r", util.Interpolate("..rac-gui_%(prop:version)s-%(prop:release)s.win.zip"), "..build"]))

# скПпОруеЌ Ма Ќастер
rac_gui_build_WIN.addStep(
       steps.FileUpload(
       workersrc=util.Interpolate("..rac-gui_%(prop:version)s-%(prop:release)s.win.zip"),
           masterdest=util.Interpolate("/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s.win.zip")
       )
)
# СкПпОруеЌ файл Ма хПстОМг
rac_gui_build_WIN.addStep(
        steps.MasterShellCommand(
            command=["/usr/local/bin/deploy-ftp.tcl",
            util.Interpolate("--local-file=/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s.win.zip"),
            util.Interpolate("--remote-file=uploads/rac-gui/rac-gui_%(prop:version)s-%(prop:release)s.win.zip")]
       )
)

# Тут ПпреЎеляеЌ какОе сбПрщОкО у Мас есть
c['builders'] = [
        util.BuilderConfig(name="Rac-GUI-RPM-builder", workername='CentOS', factory=rac_gui_build_RPM),
        util.BuilderConfig(name="Rac-GUI-DEB-builder", workername='Debian-10', factory=rac_gui_build_DEB),
        util.BuilderConfig(name="Rac-GUI-WIN-builder", workername='Windows-10', factory=rac_gui_build_WIN),
]

מי׹ וועלן נושן E- ב׹יוו שו געבנ שו וויסן אי׹ וועגן די סטאַטוס ׀ון די בויען ׀֌ךא֞׊עס.


c['services'] = []

template=u'''
    <h4>Build status: {{ summary }}</h4>
    <p> Worker used: {{ workername }}</p>
    {% for step in build['steps'] %}
    <p> {{ step['name'] }}: {{ step['result'] }}</p>
    {% endfor %}
    <p><b> -- The Buildbot</b></p>
    '''

mailNotifier = reporters.MailNotifier(fromaddr="[email protected]",
             sendToInterestedUsers=False,
             mode=('all'),
             extraRecipients=["[email protected]"],
             relayhost="mail.domain.ru",
             smtpPort=587,
             smtpUser="[email protected]",
             smtpPassword="******",
             messageFormatter=reporters.MessageFormatter(
                                 template=template, template_type='html',
                                 wantProperties=True, wantSteps=True))

c['services'].append(mailNotifier)

# ОсМПвМые МастрПйкО Ќастера
c['title'] = "The process of bulding"
c['titleURL'] = "http://vm-srv-build1:80/"
c['buildbotURL'] = "http://vm-srv-build1/"
c['www'] = dict(port=80,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}))
c['db'] = {
       'db_url' : "sqlite:///state.sqlite"
}

היט די טעקע און אי׹ קענען ׀֌ךוביךן שו א־נהייבן די מאַזעק דינסט:

systemctl restart buildbot-master

אין די קלא֞ץ מי׹ וועלן קא־נט׹א־לי׹ן אַז אַלץ איז אין סדך מיט די קאַנ׀יגיעךיישאַן און אַלץ אַךבעט ווי נא֞ךמאַל. אַלע אונדזעך טועךס זא־ל אישט ׀אַךבינדן, ווא֞ס וועט גליקלעך זיין געמאלדן אין די קלא֞ץ »»'/home/buildbot/master/twistd.log»»':

 2019-07-24 16:50:35+0300 [-] Loading buildbot.tac...
 2019-07-24 16:50:35+0300 [-] Loaded.
 2019-07-24 16:50:35+0300 [-] twistd 19.2.1 (/usr/bin/python3.6 3.6.8) starting up.
 2019-07-24 16:50:35+0300 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
 2019-07-24 16:50:35+0300 [-] Starting BuildMaster -- buildbot.version: 2.3.1
 2019-07-24 16:50:35+0300 [-] Loading configuration from '/home/buildbot/master/master.cfg'
 2019-07-24 16:50:36+0300 [-] /usr/local/lib/python3.6/site-packages/buildbot/config.py:90: buildbot.config.ConfigWarning: [0.9.0 and later] `buildbotNetUsageData` is not configured and defaults to basic.
        This parameter helps the buildbot development team to understand the installation base.
        No personal information is collected.
        Only installation software version info and plugin usage is sent.
        You can `opt-out` by setting this variable to None.
        Or `opt-in` for more information by setting it to "full".

 2019-07-24 16:50:36+0300 [-] Setting up database with URL 'sqlite:/state.sqlite'
 2019-07-24 16:50:36+0300 [-] setting database journal mode to 'wal'
 2019-07-24 16:50:36+0300 [-] adding 1 new services, removing 0
 2019-07-24 16:50:36+0300 [-] adding 1 new change_sources, removing 0
 2019-07-24 16:50:36+0300 [-] gitpoller: using workdir '/home/buildbot/master/gitpoller-work'
 2019-07-24 16:50:36+0300 [-] adding 3 new builders, removing 0
 2019-07-24 16:50:36+0300 [-] adding 1 new schedulers, removing 0
 2019-07-24 16:50:36+0300 [-] initializing www plugin 'waterfall_view'
 2019-07-24 16:50:36+0300 [-] initializing www plugin 'console_view'
 2019-07-24 16:50:36+0300 [-] initializing www plugin 'grid_view'
 2019-07-24 16:50:36+0300 [-] NOTE: www plugin 'sitenav' is installed but not configured
 2019-07-24 16:50:36+0300 [-] initializing www plugin 'waterfall_view'
 2019-07-24 16:50:36+0300 [-] initializing www plugin 'console_view'
 2019-07-24 16:50:36+0300 [-] initializing www plugin 'grid_view'
 2019-07-24 16:50:36+0300 [-] NOTE: www plugin 'sitenav' is installed but not configured
 2019-07-24 16:50:36+0300 [-] BuildbotSite starting on 80
 2019-07-24 16:50:36+0300 [-] Starting factory <buildbot.www.service.BuildbotSite object at 0x7fe31c2657b8>
 2019-07-24 16:50:36+0300 [-] adding 3 new workers, removing 0
 2019-07-24 16:50:36+0300 [-] PBServerFactory starting on 4000
 2019-07-24 16:50:36+0300 [-] Starting factory <twisted.spread.pb.PBServerFactory object at 0x7fe31c147470>
 2019-07-24 16:50:37+0300 [-] BuildMaster is running
 2019-07-24 16:50:37+0300 [-] buildbotNetUsageData: sending {'installid': 'b6193b126b96689351d2fe95787c5a03fc0879f9', 'versions': {'Python': '3.6.8', 'Buildbot': '2.3.1', 'Twisted': '19.2.1'}, 'platform': {'platform': 'Linux-4.15.18-10- pve-x86_64-with-centos-7.6.1810-Core', 'system': 'Linux', 'machine': 'x86_64', 'processor': 'x86_64', 'python_implementation': 'CPython', 'version': '#1 SMP PVE 4.15.18-32', 'distro': 'centos:7'}, 'plugins': {'buildbot/worker/base/Worker': 3, 'buildbot/config/BuilderConfig': 3, 'buildbot/schedulers/basic/SingleBranchScheduler': 1, 'buildbot/reporters/mail/MailNotifier': 1, 'buildbot/changes/gitpoller/GitPoller': 1, 'buildbot/steps/worker/MakeDirectory': 1, 'buildbot/steps/source/git/Git': 3, 'buildbot/steps/shell/ShellCommand': 9, 'buildbot/steps/package/rpm/rpmbuild/RpmBuild': 1}, 'db': 'sqlite', 'mq': 'simple', 'www_plugins': ['waterfall_view', 'console_view', 'grid_view']}
 2019-07-24 16:50:37+0300 [Broker,0,127.0.0.1] worker 'CentOS' attaching from IPv4Address(type='TCP', host='127.0.0.1', port=37332)
 2019-07-24 16:50:37+0300 [Broker,0,127.0.0.1] Got workerinfo from 'CentOS'
 2019-07-24 16:50:37+0300 [-] bot attached
 2019-07-24 16:50:37+0300 [Broker,0,127.0.0.1] Worker CentOS attached to Rac-GUI-RPM-builder
 2019-07-24 16:50:37+0300 [-] buildbotNetUsageData: buildbot.net said: ok
 2019-07-24 16:50:39+0300 [Broker,1,192.168.55.15] worker 'Windows-10' attaching from IPv4Address(type='TCP', host='192.168.5.145', port=49831)
 2019-07-24 16:50:39+0300 [Broker,1,192.168.55.15] Got workerinfo from 'Windows-10'
 2019-07-24 16:50:40+0300 [-] bot attached
 2019-07-24 16:50:40+0300 [Broker,1,192.168.55.15] Worker Windows-10 attached to Rac-GUI-WIN-builder
 2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] worker 'Debian-10' attaching from IPv4Address(type='TCP', host='192.168.5.9', port=44430)
 2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] Got workerinfo from 'Debian-10'
 2019-07-24 16:50:41+0300 [-] bot attached
 2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] Worker Debian-10 attached to Rac-GUI-DEB-builder

דעם קאַמ׀֌ליץ די סעטאַ׀֌ ׀֌ךא֞׊עס. אי׹ קענען זען דעם קךאַנט סטאַטוס דו׹ך די וועב שובינד. ווו אי׹ קענען אויך זען בויען עךךא֞ךס, ב׹יק אַ ׀אַך׀ךויךן ׀֌ךא֞׊עס אויב ע׀֌עס איז ׀אַלש, עטק.

גלייך נא־ך די קאַטעך, אונדזעך שוועך טועךס קענען זיין וויוד דו׹ך די מעניו "בוידס" -> "ווא֞ךקעךס"

Buildbot אין בייש׀ילן

נא־ך דעך עךשטעך בויען ׀֌ךא֞׊עס איז געענדיקט (ד"ה ענדעךונגען שו די Git ךי׀֌אַזאַטא֞ךי), די סטאַטוס ׀ון די ׀֌ךאַסעסאַז וועט דעךשייַנען אויף דעך עךשטעך בלאַט.

Buildbot אין בייש׀ילן

אויב אי׹ ד׹יקט אויף די געבעטן שוךה מיט די מויז, אַ בלאַט וועט ע׀ענען מיט דעם קךאַנט שטאַט ׀ון דעם ׀֌ךא֞׊עס, ווו אי׹ קענען זען ווא֞ס איז געשעעניש, ווא֞ס עךךא֞ךס, אאז"ו ו.

Buildbot אין בייש׀ילן

די גאנ׊ע מאַזעק קאַנ׀יגיעךיישאַן קענען זיין גע׀ֿונען דא־

import os, re
from buildbot.plugins import steps, util, schedulers, worker, changes, reporters
c= BuildmasterConfig ={}
c['workers'] = [ worker.Worker('CentOS', '123456'), worker.Worker('Debian-10', '123456'), worker.Worker('Windows-10', '123456')]
c['protocols'] = {'pb': {'port': 4000}} 
c['change_source'] = []
c['change_source'].append(changes.GitPoller(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
project = 'Rac-GUI',
branches = True,
pollInterval = 600
))
# служба запуска сбПркО
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
name="Rac-GUI-schedulers",
change_filter=util.ChangeFilter(branch='master'),
builderNames=["Rac-GUI-RPM-builder", "Rac-GUI-DEB-builder", "Rac-GUI-WIN-builder"],
properties = {'owner': 'admin'}
))
@util.renderer
def get_name_version_release(props):
prog_name = "rac-gui"
prog_version = "1.0.3"
prog_release = "3"
return {
"prog_name": prog_name
#"prog_version": prog_version,
#"prog_release": prog_release
}
rac_gui_build_RPM = util.BuildFactory()
rac_gui_build_RPM.addStep(steps.Git(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
workdir = 'rac-gui',
haltOnFailure = True,
submodules = True,
mode='full',
progress = True)
)
# ДПбавОЌ ПпреЎелеМОе версОО Оз ПсМПвМПгП файла
rac_gui_build_RPM.addStep(
steps.SetPropertyFromCommand(
command="grep version ../rac-gui/rac_gui.tcl | grep -oE 'b[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}b'", property="version"
)
)
# ДПбавОЌ ПпреЎелеМОе релОза Оз ПсМПвМПгП файла
rac_gui_build_RPM.addStep(
steps.SetPropertyFromCommand(
command="grep release ../rac-gui/rac_gui.tcl | grep -oE 'b[0-9]{1,3}b'", property="release"
)
)
rac_gui_build_RPM.addStep(steps.ShellCommand(
command=["tar", "czf", util.Interpolate("/home/buildbot/rpmbuild/SOURCES/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"), "../rac-gui"]))
rac_gui_build_RPM.addStep(steps.ShellCommand(
command=["cp", "../rac-gui/rac_gui.spec", "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))
rac_gui_build_RPM.addStep(steps.ShellCommand(
command=["sed", "-i", util.Interpolate("s/.*Version:.*/Version:t%(prop:version)s/"), "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))
rac_gui_build_RPM.addStep(steps.ShellCommand(
command=["sed", "-i", util.Interpolate("s/.*Release:.*/Release:t%(prop:release)s/"), "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))
rac_gui_build_RPM.addStep(steps.RpmBuild(
specfile="/home/buildbot/rpmbuild/SPECS/rac_gui.spec",
dist='.el5',
topdir='/home/buildbot/rpmbuild',
builddir='/home/buildbot/rpmbuild/build',
rpmdir='/home/buildbot/rpmbuild/RPMS',
sourcedir='/home/buildbot/rpmbuild/SOURCES'
))
# СкПпОруеЌ файл Ма Ќастер
rac_gui_build_RPM.addStep(
steps.FileUpload(
workersrc=util.Interpolate("/home/buildbot/rpmbuild/RPMS/noarch/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm"),
masterdest=util.Interpolate("/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm")
)
)
rac_gui_build_RPM.addStep(
steps.FileUpload(
workersrc=util.Interpolate("/home/buildbot/rpmbuild/SOURCES/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"),
masterdest=util.Interpolate("/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz")
)
)
rac_gui_build_RPM.addStep(
steps.MasterShellCommand(
command=["/usr/local/bin/deploy-ftp.tcl",
util.Interpolate("--local-file=/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm"),
util.Interpolate("--remote-file=uploads/rac-gui/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm")]
)
)
rac_gui_build_RPM.addStep(
steps.MasterShellCommand(
command=["/usr/local/bin/deploy-ftp.tcl",
util.Interpolate("--local-file=/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"),
util.Interpolate("--remote-file=uploads/rac-gui/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz")]
)
)
####################################
##      DEB 
####################################
rac_gui_build_DEB = util.BuildFactory()
rac_gui_build_DEB.addStep(steps.Git(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
haltOnFailure = True,
submodules = True,
mode='full',
workdir='build',
progress = True)
)
# ДПбавОЌ ПпреЎелеМОе версОО Оз ПсМПвМПгП файла
rac_gui_build_DEB.addStep(
steps.SetPropertyFromCommand(
command="grep version rac_gui.tcl | grep -oE 'b[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}b'", property="version"
)
)
# ДПбавОЌ ПпреЎелеМОе релОза Оз ПсМПвМПгП файла
rac_gui_build_DEB.addStep(
steps.SetPropertyFromCommand(
command="grep release rac_gui.tcl | grep -oE 'b[0-9]{1,3}b'", property="release"
)
)
# ПереОЌеМуеЌ запускаеЌый файл
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["mv", "rac_gui.tcl", "racgui"]))
# ППЌеМяеЌ путО к бОблОПтекаЌ
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["sed", "-i", "s+^set dir(lib)+set dir(lib) /usr/share/rac-gui/lib ;#+g", "racgui"]))
# ППЌеМяеЌ путО к файлаЌ
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["sed", "-i", "s+[pwd]+/usr/share/rac-gui+g", "racgui"]))
# заархОвОруеЌ ОсхПЎМОкО
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["tar", "czf", util.Interpolate("../rac-gui_%(prop:version)s.orig.tar.gz"), "."]))
# СПберёЌ пакет
rac_gui_build_DEB.addStep(steps.ShellCommand(
command=["dpkg-buildpackage"]))
# СкПпОруеЌ файл Ма Ќастер
rac_gui_build_DEB.addStep(
steps.FileUpload(
workersrc=util.Interpolate("../rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb"),
masterdest=util.Interpolate("/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb")
)
)
rac_gui_build_DEB.addStep(
steps.MasterShellCommand(
command=["/usr/local/bin/deploy-ftp.tcl",
util.Interpolate("--local-file=/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb"),
util.Interpolate("--remote-file=uploads/rac-gui/rac-gui_%(prop:version)s-%(prop:release)s_amd64.deb")]
)
)
############################################
#       WIN
############################################
rac_gui_build_WIN = util.BuildFactory()
rac_gui_build_WIN.addStep(steps.Git(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
haltOnFailure = True,
submodules = True,
mode='full',
workdir='build',
progress = True)
)
# ДПбавОЌ ПпреЎелеМОе версОО Оз ПсМПвМПгП файла
rac_gui_build_WIN.addStep(
steps.SetPropertyFromCommand(
command="powershell -command "((Get-Content .rac_gui.tcl | Select-String -Pattern 'version:') -split 's')[2]",
property="version"
)
)
# ДПбавОЌ ПпреЎелеМОе релОза Оз ПсМПвМПгП файла
rac_gui_build_WIN.addStep(
steps.SetPropertyFromCommand(
command="powershell -command "((Get-Content .rac_gui.tcl | Select-String -Pattern 'release:') -split 's')[2]",
property="release"
)
)
# СПзЎаЎОЌ запускаеЌый файл
rac_gui_build_WIN.addStep(steps.ShellCommand(
command=["c:binfreewrap.exe", "rac_gui.tcl"]))
# запакуеЌ тП, чтП пПлучОлПсь
rac_gui_build_WIN.addStep(steps.ShellCommand(
command=["c:Program Files7-zip7z.exe", "a", "-r", util.Interpolate("..rac-gui_%(prop:version)s-%(prop:release)s.win.zip"), "..build"]))
# скПпОруеЌ Ма Ќастер
rac_gui_build_WIN.addStep(
steps.FileUpload(
workersrc=util.Interpolate("..rac-gui_%(prop:version)s-%(prop:release)s.win.zip"),
masterdest=util.Interpolate("/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s.win.zip")
)
)
# СкПпОруеЌ файл Ма хПстОМг
rac_gui_build_WIN.addStep(
steps.MasterShellCommand(
command=["/usr/local/bin/deploy-ftp.tcl",
util.Interpolate("--local-file=/home/buildbot/builds/rac-gui_%(prop:version)s-%(prop:release)s.win.zip"),
util.Interpolate("--remote-file=uploads/rac-gui/rac-gui_%(prop:version)s-%(prop:release)s.win.zip")]
)
)
c['builders'] = [
util.BuilderConfig(name="Rac-GUI-RPM-builder", workername='CentOS', factory=rac_gui_build_RPM),
util.BuilderConfig(name="Rac-GUI-DEB-builder", workername='Debian-10', factory=rac_gui_build_DEB),
util.BuilderConfig(name="Rac-GUI-WIN-builder", workername='Windows-10', factory=rac_gui_build_WIN),
]
c['services'] = []
template=u'''
<h4>Build status: {{ summary }}</h4>
<p> Worker used: {{ workername }}</p>
{% for step in build['steps'] %}
<p> {{ step['name'] }}: {{ step['result'] }}</p>
{% endfor %}
<p><b> -- The Buildbot</b></p>
'''
mailNotifier = reporters.MailNotifier(fromaddr="[email protected]",
sendToInterestedUsers=False,
mode=('all'),
extraRecipients=["[email protected]"],
relayhost="mail.domain.local",
smtpPort=587,
smtpUser="[email protected]",
smtpPassword="**********",
messageFormatter=reporters.MessageFormatter(
template=template, template_type='html',
wantProperties=True, wantSteps=True))
c['services'].append(mailNotifier)
c['title'] = "The process of bulding"
c['titleURL'] = "http://vm-srv-build1:80/"
c['buildbotURL'] = "http://vm-srv-build1/"
c['www'] = dict(port=80,
plugins=dict(waterfall_view={}, console_view={}, grid_view={}))
c['db'] = {
'db_url' : "sqlite:///state.sqlite"
}

מאַטעךיאַלס

די ׀אלגענדע מאַטעךיאַלס זענען געני׊ט אין ׀֌ךי׀֌עךינג דעם אַךטיקל:

מקו׹: www.habr.com

לייגן אַ באַמעךקונג