แแญแแ แแแแแแ Git-แแก แกแแชแแแแแแ แกแแแขแแ แแ แแแ แแแฃแแ แแแแแขแแแแก แแฌแงแแแแกแ แแ แแแขแแแแก แแ แแชแแกแแก แแแงแแแแแ. แแ แ แแแแกแแช, แแ แช แแกแ แแแแ แฎแแแก แฌแแ, แแฅ แฐแแแ แแแ แแแแฎแ แกแขแแขแแ buildbot-แแก แจแแกแแฎแแ (แแแฃแแ แแแแแก), แแแแแแฌแงแแแขแ แแแชแแแ แแ แแแแแแแงแแแแแแแ.
แแแแแแแแ buildbot แแ แแก แแแแแฌแแแแแฃแแ แกแแกแขแแแ, แแแแแแฃแ แ แแฅแแแแ แแแแแแฃแแ แแ แฅแแขแแฅแขแฃแ แแกแ แแ แแแแ แแชแแฃแแ แกแแกแขแแแแกแแแแก แชแแแแ build แฐแแกแขแแก แจแแฅแแแ. แฉแแแแก แจแแแแฎแแแแแจแ, แแก แแฅแแแแ LXC แแแแขแแแแแ แแแ (Linux-แแก แจแแแแฎแแแแแจแ) แแ qemu (Windows-แแก แจแแแแฎแแแแแจแ):
- vm-srv-build1 - centos 7, แแฅแแแแ buildbot-แแก แแกแขแแขแ แแ แแ แ-แแ แแ แแฃแจแ
- vm-srv-build2 - debian 10, DEB แแแแแขแแแแก แจแแกแแฅแแแแแแ
- 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
แ แ แแฅแแ แฃแแแ, แฃแคแ แ แกแฌแแ แ แแฅแแแแแแ แแแแแขแแแแก แจแแแ แแแแแ แแแแแแฃแแ OS-แกแแแแก, แแแแ แแ แแก แกแชแแแแแแ แกแขแแขแแแก แคแแ แแแแแก. แฉแแแ แแกแแแ แแแแแแขแแแแแ แกแแแฃแจแแแกแแแแก แแแแขแแแแแ แแแแก แแแงแแแแแแก แแฆแฌแแ แแก, แแฎแแแแ แแฆแแแแจแแแ, แ แแ แแ แแแงแแแแ ProxMox VE. แแฅแแแ แแกแแแ แแแแญแแ แแแแแ แแแแแขแแแแก แแแงแแแแแ แแกแแแแแแแกแแแแก แกแแญแแ แ แแแแแแฃแแ แฆแแ แซแแกแแแแก (centos: rpmdevtools แแ แ.แจ.; debian: build-essential, dh-make, pbuilder แแ แ.แจ.)
Build แแ แแแฅแขแแแ แแ 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 Windows
แ แแแแ แช Windows-แแก แฅแแแจ แจแแแ แแแแก โแแฃแจแแแโ, แแแแแงแแแแแฃแแ แแฅแแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแ Win10-แแก แฃแแฎแแแกแ แแแแแจแแแแแ.
แกแแแฃแจแแแ แแญแแ แแแแแ:
Python PyWIN แฌแแกแแแ - แแแแกแแแแแก, แ แแ แแแแแแกแขแแแแ แแ แงแแแแ แกแแฎแแก แกแฎแแแแแกแฎแแ แ แแ Python-แจแ, แแฅแแแ แฃแแแ แฉแแแแขแแแ แแแ
แแแจแแแแ แแแกแขแ แฃแแแแขแแแ Visual Studio 2019-แแกแแแแก - 7Zip
แงแแแแแแแ แแแแแแฅแแฃแแแก แแแแแกแขแแแแ แแแแก แจแแแแแ, แจแแแแซแแแแ แแแแแแกแขแแแแ แแ แแแแแ buildbot:
pip install buildbot-worker
แแแแแ แจแแแฅแแแแ แกแแแฃแจแแ แแแ แแฅแขแแ แแ
md c:worker
แแ แแแแแฌแงแแ
buildbot-worker start c:worker
แแฃ แงแแแแแคแแ แ แแฃแจแแแแก (แแฎแแแแ แแฃแ แแแแ 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
แแแ แแแแแขแแแแกแแแแก แจแแฅแแแแแ builds แแแ แแฅแขแแ แแ
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 แแแ แ. 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 แแแ แ, แ.แ. แแ แซแแแแแ แชแแแแก แกแแแชแแคแแแฃแ แ แคแแแแแก แจแแแแแ แแ แกแแแฃแ แแแแจแแแแแแแแแก แกแแญแแ แแแแแ
# ะผะตะฝัะตะผ ะฒะตััะธั
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-แแก แแแแ แจแแแ แแแแก แแ แแก แแ แแฆแฌแแ แแแแ แกแแแชแแคแแแแชแแแก แจแแแแแ; 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-แจแ Ubuntu 16.04-แแ - แแแ แแแ, แแ แแแฃแฅแขแแก แแแแฃแแแแขแแชแแ
Buildbot-แแก แแแแแแแแแ
แฌแงแแ แ: www.habr.com