αααα»αααααΌααααα αααααΎαααΆαααααΆααααααΌααααα»α αα·αα ααα αΆααααα αααααααα·ααΈααΈααααΆαα Git αα ααΆααααα αααααα α αΎααα αααααααααα»αααΆαααΎααα·αααΌαααα»ααααΆααα αα ααΈααααα ααΎHabre α’ααααααα½ααα ααΎ buildbot (αααααααΆαααα α α»ααααα αα) αααα»αααΆααααααα α α·αααααΆαααααααΆ α αΎαα’αα»ααααααΆα
αααααΆα buildbot ααΊααΆααααααααα ααα αΆα ααΆααΉαααα ααα»αααααα»αααΆααααααΎα build host ααΆα ααααα‘αααααααΆααααααΆαααααααα αα·αααααααααααααα·ααααα·ααΆαααΈαα½ααα αααα»αααααΈααααααΎα ααΆαααααααΉαααΆαα»α LXC (αααα»αααααΈ Linux) αα·α qemu (αααα»αααααΈ Windows)α
- vm-srv-build1 - centos 7 ααΉαααΆααα buildbot αα·αααααααααααΆαα
- vm-srv-build2 - debian 10 αααααΆαααααααΎααααα αα DEB
- vm-srv-build3 - windows 10 αααααΆααααΆααα½αααααα»αααααΆ α’αααααΉαααΆαααααΆααα’αααΈ
ααΎαααΉααααααΌα
ααΆαααααα
GNU / ααΈαα»α
ααΆαα―αααΆααααααααααΆαααα
ααΎα’ααΈαααΊαα·ααααααΆααααΆαααα‘αΎα
αααααΆααααα
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
ααΆααΆααα·αααΆαα ααΆααΉαααΆααααααααΉαααααΌααααα»αααΆααααααΌααααα αααααααΆαα OS ααΈαα½αα ααα»αααααααααΊααΎαααΈαα·ααΆαααΆαααα’αααααα ααΎαααααΉααα»αα ααααΆααα·αααααΆα’αααΈααΆαααα‘αΎααα»αααΊααααααααΆααααΆαααΆαααααα αααα»αααΉαα αααΆαααΆαααα»αααααΎ ProxMox VE ααα»αααααα α αΎαα’αααααααΉαααααΌαααα‘αΎααααα αααααααΆααα’ααααααΈαα½αααααααααΌαααΆααααααΆααααΆααα½αααααα»αααααΆ (centos: rpmdevtools, etc.; debian: build-essential, dh-make, pbuilder ααα)
ααααααααΆαααα αα·αααααΆαααα buildbot ααΉαααααΌαααΆαααΎαααααΎαααΆααααα»αααΆαααΆα’αααααααΎααααΆαααααααααΆααα·αααα· ααΌα ααααα’αααααααΌααααααΎαααΆαα ααΎαααΆαααΈαααΆααα’αααααα αΌααα½ααααα»αααααΎαααΆααααα
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
αααααΆααααΈααα α’αααα’αΆα αααααΎαα αααααΆαα ααΆαααααααααααααααΆαα "αααααα" (αα ααΎαααΆαααΈαααΆααα’αα) ααΎααααΈααααΎααΌα αααα ααΌαα α»αααααααα αααααα’αααααααΎααααΆαα buildbot α αΎαααααΎαααΆαααΆααααααααΆααΆααααααα
αα ααΎαααΆαααΈαααααΌα 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
MS ααΈαααΌ
αααα»αααΆαααΆ "αααααα" αααααΆααααΆααα½αααααα»αααααΆαα
αααααααΈαααΌ αααΆαααΈααα·αααα·αααΆαα½αααΉαααΆαα
ααααααΆαα
α»αααααααααα»ααα Win10 ααΉαααααΌαααΆαααααΎα
ααΎααααΈααααΎααΆαα’αααααΉαααααΌαααΆα:
αααααααΆαα ααΈααΈα Git - ααΎααααΈααα‘αΎααααααααααααααα
αααα»α Python α’αααααααΌαααΆααα
αααααΎαα§ααααααααααΆαα Visual Studio 2019 - 7Zip
αααααΆααααΈααα‘αΎααα½α α’αααα’αΆα ααα‘αΎα buildbot ααααααα½αα―αααΆαα
pip install buildbot-worker
ααααααααΎαααααΆαααΆα
md c:worker
α αΎαααΌαααΎαααααΎαααΆα
buildbot-worker start c:worker
ααααα·αααΎα’αααΈαααααΎαααΆαααΆα (ααΌαααΎα log c:workertwistd.log) αααα’αααα’αΆα α α»αααααα "αααααα" ααααααΎαααΆααααΆαααααααααααααααΆαα»ααΆαα½αααΉαααααΆαααΆααα αααααΈααααα (ααΆααααααααΆααααΌαααΆαααααα·ααααα·αααα»α powershell ααααααα»αααααΎαααΆαααΆα’αααααααααααα)α
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
αααα αΎαααΆααΆααα’ααααΆαα½αααΉα "αααααα" α’ααααα·αα αΆαααΆα αααααα½ααααααααααααααααΆααααααααααααΆααα’ααααΊααααΈααα
ααΆαααα‘αΎαα’ααααααα½αααΆα
ααΎααααΈα αΆααααααΎα α αΌαααΎααααααΎαα αααααΆαα ααΆαααααααααααααΆαααα (αα ααΎαααΆαααΈααα) ααΎααααΈααααΎααΌα αααα ααΌαα α»αααααααα αααααα’αααααααΎααααΆαα buildbot α αΎαααααΎαααΆαααΆααααααααΆααΆααααααα
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
αααααΆαααααα αααααααααααα½α ααΆααααα αααααΎαααα―αααΆααααααΎα
mkdir /home/buildbot/builds
α―αααΆα master.cfg ααααΌαααΆααααααΎααα αααα»ααα /home/buildbot/master/ α α―αααΆααααααΊααΆααΌα python αα·αααΆαααΆααα·αααααΆα’αααΈααααααΆαααΆααα’αααααααααααα ααΎαααΉαααααΎααΆαααΆαα½αααΆαα αααα’ααΆααα
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 αα»αααΌαα αα αααα»α buildbot α’αααααααΆαααααα·αα’αΆα αααααα’ααααααααΆαα "αααααα" ααΆααα (αααΆαα αα ααΆαα αααα»ααα·αααΆαααααΎαααΈαααα)α αααααΊααΆα’αααΈααααααααααααααααα·ααααΌαααΆαααααΎα ααΆαααααα αα αααα»αααααΎαααΆαααααΆααα½αααααα»αααααΆ ααΎαααααααααα αΆαααΎααααΈααααααααα αα·αααΆαα ααααααΆα α αΎαααΆαααα ααααααααα αα·αααΆαα ααααααΆααααααααααααααα·α ααααααααααααα·α’αΆα ααααΌαααΆααααααααΆααα·ααΈαααααα αααα»αααααΈααααααα α ααΆααααααααΆαα»αααΌαα
# ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
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"]))
ααΎααααΈαααααααΆαα ααααααΆα αα·ααααααααααααΉαααααΌα ααΌαααααΎααΆαα α sed αααααααΆα i.e. ααΆααααααααΆαααα½αααααααα αααα»αα―αααΆα 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")
)
)
α
αΌαα
αΆααααααΎαααααΎαααΆαα
αααααααα
ααααααααααΌαααΆααα
αααα ααααΆαααα FTP αα
ααΎααα αααααΆααααααααααααααΆααααΌαααΆαααααΎ
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 ααΈαα·αα·ααΈαα½αα ααα½αααΆααααααααααΌαααΆαααααΎααα rpm αααα½αααΆαααα»αα’αα‘α»αααααα½αααααα»αααααΆ α αΎαααααΌαααΆααα·αααααΆαα ααΆααααα»α spec; αααααΆαα Debian α’αααααααΌαααααΎααΆαα ααΈαααα
# ΠΠΎΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΡΡΠΈ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ
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 α₯α‘αΌαααα windows!
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),
]
ααΎαααΉαααααΎα’ααΈαααααΎααααΈααΌαααααΉαα’αααα’αααΈααααΆαααΆαααααααΎαααΆαααΆααααα
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
ααααααα ααααααΎαααΆαααα‘αΎαα α’αααα’αΆα ααΎαααααΆαααΆααα αα α»ααααααααΆααααα ααα»α αααααΆαααααααΆαα αα αααααααααα’αααααα’αΆα ααΎαααα α»ααααα»αααΆααααααΎα α αΆααααααΎαααααΎαααΆααααααααα ααααα·αααΎααΆαα’αααΈαα½ααα»α αα
ααααΆαααααααΆααααΈααΆαααΎαααααΎαααΆα αααααααα·ααΆαααααααΎαα’αΆα ααΎαααΆαααΆαααααααΊαα»α βBuildsβ -> βWorkersβ
αααααΆααααΈααααΎαααΆαααΆααααααααΌαααααΌαααΆααααα αα (α§. ααΆαααααΆααααααΌααα ααααΆαα 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 αα ααΎα’ααΌααα»αααΌ 16.04 - ααΆααΆααααααΎαααΆαα, α―αααΆαααα·ααα
ααΆααααααα Buildbot
ααααα: www.habr.com