××× ××ךף ×Š× ×©××¢×× ××¢× ×€ÖŒ×š×֞׊עס ×€×× ×ַסע×××Ö·××× × ××× ××¢××××עך×× × ×××××××××š× ×€ÖŒ×ַק×Ö·××ש×Ö·× ×€Ö¿×× ×Ö· Git ך××€ÖŒ×Ö·××Ö·××Öž×š× ×Š× ××¢× ×€ÖŒ××Ö·×¥. ××× ×××¢× ××× ××¢××¢×, × ××©× ×Ö·××× ××Ö·× × ×Š×ך×ק, ××Öž ××××£ Habré ×Ö·× ×ַך×××§× ××××£ buildbot (××× ×§ ××× ×× ×¡××£), ××× ××ַש××Öž×¡× ×Š× ×€ÖŒ×š××××š× ×¢×¡ ××× ×Š×××××× ×¢×¡.
××× × buildbot ××× ×Ö· ×€×× ×× ×עך××¢××××× ×¡×ס××¢×, עס ×××Öž×× ×××× ××Ö·××ש×ק×Ö·× ×Š× ×©×Ö·×€Ö¿× ×Ö· ××Ö·××× ×עך ××××¢× ××Ö·××¢××֞ס ×€Ö¿×ַך ××¢×עך ×ַךק×Ö·×עק×שעך ××× ×֞׀֌עך××××× × ×¡×ס××¢×. ××× ××× ××עך ×€×Ö·×, ××֞ס ×××¢× ×××× LXC ק×Ö·× ×××× ×¢×š× (××× ×× ×€×Ö·× ×€×× ××× ×קס) ××× ×§×¢×× (××× ××¢× ×€×Ö·× ×€×× Windows):
- vm-srv-build1 - centos 7, עס ×××¢× ×××× ×Ö· ×××××××Öž× ××¢× ××× ×××× ×¢×š ×€×× ×× ××עךס
- vm-srv-build2 - ××¢×××Ö·× 10, ×€Ö¿×ַך ×× ×× ××¢× ×€ÖŒ×ַק×Ö·××ש×Ö·×
- vm-srv-build3 - Windows 10, ×€Ö¿×ַך ×€Ö¿×ַך××Ö·×××× ×, ××ך ××××¡× ×××֞ס ×€Ö¿×ַך
××ך ×××¢×× ×§×××Ö·××
×× ×¡××Ö·××ך×× ×
GNU / Linux
עס ××× ××¢× ×× ××ַק××××¢× ×××ש×Ö·× ××××£ ×× ××× ××¢×š× ×¢× ×€Ö¿×ַך ×× ×¡××Ö·××ך×× ×
×€Ö¿×ַך ×עך ××¢×:
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 ×××¢× ×××× ××¢××××× ×.
×Š× ×ַך××¢×× ××ך ×××¢× ××ַך׀ֿ×:
×€ÖŒ××××Öž× PyWIN ×××× - ×Š× ×× ×¡××Ö·×××š× ×Ö·××¢ ס×֞ךץ ×€×× ×€×ַךש×××¢× ×¢ ××× ×× ××× Python, ××ך ××Ö·×š×€Ö¿× ×Š× ×Öž×€ÖŒ××Öž××ך×
××××¢× ××ש×ך×× ×€Ö¿×ַך ×××ס××Ö·× ×¡×××××Öž 2019 - 7Zip
× ×Öž× ×Ö·××¢ ×× ××××× ××× ××× ×¡××Ö·××ך×, ××ך ×§×¢× ×¢× ×× ×¡××Ö·×××š× ×× ××××××Öž× ×××:
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
××¢× ×§×Ö·××€ÖŒ×××¥ ×× ×¡×¢××Ö·×€ÖŒ ׀֌ך×֞׊עס. ××ך ×§×¢× ×¢× ××¢× ××¢× ×§×š×Ö·× × ×¡××Ö·××ס ×××š× ×× ×××¢× ×Š×××× ×. ××× ××ך ×§×¢× ×¢× ×××× ××¢× ××××¢× ×¢×š×š×֞ךס, ×ך×ק ×Ö· ×€×ַך׀ך×××š× ×€ÖŒ×š×֞׊עס ×××× ×¢×€ÖŒ×¢×¡ ××× ×€×Ö·×ש, ×¢×ק.
××××× × ×Öž× ×× ×§×Ö·×עך, ××× ××עך ש××עך ××עךס ×§×¢× ×¢× ×××× ××××× ×××š× ×× ××¢× ×× "××××ס" -> "×××֞ךקעךס"
× ×Öž× ×עך עךש×עך ××××¢× ×€ÖŒ×š×֞׊עס ××× ××¢×¢× ×××§× (×"× ×¢× ×עך×× ××¢× ×Š× ×× Git ך××€ÖŒ×Ö·××Ö·××֞ך×), ×× ×¡××Ö·××ס ×€×× ×× ×€ÖŒ×š×ַסעס×Ö·× ×××¢× ×עךש××Ö·× ×¢× ××××£ ×עך עךש×עך ×××Ö·×.
×××× ××ך ×ך××§× ××××£ ×× ××¢××¢×× ×©××š× ××× ×× ××××, ×Ö· ×××Ö·× ×××¢× ×¢×€×¢× ×¢× ××× ××¢× ×§×š×Ö·× × ×©××Ö·× ×€×× ××¢× ×€ÖŒ×š×֞׊עס, ××× ××ך ×§×¢× ×¢× ××¢× ×××֞ס ××× ××¢×©×¢×¢× ×ש, ×××֞ס עךך×֞ךס, ×××"× ×.
×× ××× ×Š×¢ ××Ö·×עק ק×Ö·× ×€×××עך××ש×Ö·× ×§×¢× ×¢× ×××× ××¢×€Ö¿×× ×¢× ××Öž
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"
}
××Ö·×עך××Ö·×ס
×× ×€××××¢× ××¢ ××Ö·×עך××Ö·×ס ××¢× ×¢× ××¢× ××Š× ××× ×€ÖŒ×š×׀֌עך×× × ××¢× ×ַך××ק×:
×Ö· ×××ש׀֌×× ×€×× ×××€ÖŒ××Ö·××¢× ×× × ×§×¢×¡×××עך××ק ×× ××¢×ך×Ö·×××Öž× × ××Š× BuildBot Buildbot: ×Ö· ×××ַסע ××× ×××ש׀××× ×××¢×× ×× ×× ×עך קעס×××עך××ק ×× ××Ö·×ך××ש×Ö·× ×¡×ס××¢× ××ַש××¢×××§× ×§×¢×¡×××עך××ק ×× ×Ö·×ך××ש×Ö·× ××× Buildbot ××××£ Ubuntu 16.04 - × ×, ×× ×€ÖŒ×š×Öž×××§× ××ַק××××¢× ×××ש×Ö·×
Buildbot ××××֞ך××Ö·×
×ק×ך: www.habr.com