ΠΠ°Π»ΠΎΠΆΠΈ ΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΡΠ°ΠΉΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΎΡ Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. Π Π·Π°Π±Π΅Π»ΡΠ·Π²Π°ΠΉΠΊΠΈ, Π½Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΡΠ΄Π°Π²Π½Π°, ΡΡΠΊ Π½Π° Π₯Π°Π±ΡΠ° ΡΡΠ°ΡΠΈΡ Π·Π° buildbot (Π»ΠΈΠ½ΠΊ Π² ΠΊΡΠ°Ρ) ΡΠ΅ΡΠΈΡ Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌ Π½Π΅Π³ΠΎ ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ°.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ buildbot Π΅ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΠ΅ Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΡΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π·Π° Π²ΡΡΠΊΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π°Ρ LXC ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ (Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° linux) ΠΈ qemu (Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° windows):
- vm-srv-build1 β centos 7, ΡΡΠΊ ΡΠ΅ Π±ΡΠ΄Π΅ buildbot ΠΌΠ°ΠΉΡΡΠΎΡ (master) ΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈΡΠ΅ (worker)
- vm-srv-build2 β debian 10, Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° DEB ΠΏΠ°ΠΊΠ΅ΡΠΈ
- vm-srv-build3 β windows 10, Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΡΠ°ΠΌΠΈ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅, ΠΏΠΎΠ΄ ΠΊΠ°ΠΊΠ²ΠΎ
Π©Π΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΠΌΠ΅ β Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° 1Π‘ rac Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΎΡ ΡΡΡΠ²ΡΡΠΈ. ΠΠΎΠ΄ Π»ΠΈΠ½ΡΠΊΡ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π²ΡΡΠΊΠ° ΠΠ‘, Π° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° exe ΡΠ°ΠΉΠ» ΠΏΠΎΠ΄ windows ΠΎΡ tcl ΡΠΊΡΠΈΠΏΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ .
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅
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. Π ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° Π²ΡΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ (centos: rpmdevtools ΠΈ Ρ.Π½.; debian: build-essential, dh-make, pbuilder ΠΈ Ρ.Π½.)
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ ΠΈ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π½Π° buildbot ΡΠ΅ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π·Π°ΡΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π³ΠΎ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½Π° Π²ΡΠΈΡΠΊΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅, ΡΡΠ°ΡΡΠ²Π°ΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΠ°:
adduser buildbotΠ‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ Ρ ΠΎΡΡΠΎΠ²Π΅ΡΠ΅ (ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅):
Systemd ΡΠ½ΠΈΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°ΠΉΡΡΠΎΡΠ°:
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-workerMS Windows
ΠΠ°ΡΠΎ βΡΠ°Π±ΠΎΡΠ½ΠΈΠΊβ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΏΠΎΠ΄ Windows ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Win10.
ΠΠ° ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ:
- ΠΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² Python ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ²Π°Π»Ρ
- 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Π ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° /home/buildbot/master/ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΡΠ°ΠΉΠ» master.cfg. Π’ΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΠΊΠΎΠ΄ Π½Π° Python ΠΈ ΡΡΠ΄ΡΡΠΆΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Ρ Π½Π΅Π³ΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠΌ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ.
nano /home/buildbot/master/master.cfgimport 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 ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° βΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈΡΠ΅β (ΠΏΠΎΠ½Π΅ Π°Π· Π½Π΅ Π½Π°ΠΌΠ΅ΡΠΈΡ ΠΊΠ°ΠΊ). ΠΠ° ΡΠΎΠ²Π° ΡΠ»ΡΠΆΠ°Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° (property). Π’.Π΅. Π² ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΡΡΠΏΠΊΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° ΠΈ ΡΠ΅Π»ΠΈΠ·Π° ΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° version ΠΈ release. Π‘Π²ΠΎΠΉΡΡΠ²Π°ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π²Π°Ρ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ, Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
# ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
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, Ρ.Π΅. ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΡΠΎ Π·Π°ΠΌΠ΅Π½Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π² 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. ΠΠ° ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° tcl.
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)
)Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Windows ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅Ρ grep ΠΈ sed (ΠΈΠ»ΠΈ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π΅ΡΡΡ?), Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ 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>Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅: {{ summary }}</h4>
<p> ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ: {{ workername }}</p>
{% for step in build['steps'] %}
<p> {{ step['name'] }}: {{ step['result'] }}</p>
{% endfor %}
<p><b> -- The Buildbot</b></p>
'''
mailNotifier = reporters.MailNotifier(fromaddr="builder@domain.ru",
sendToInterestedUsers=False,
mode=('all'),
extraRecipients=["admin@domain.ru"],
relayhost="mail.domain.ru",
smtpPort=587,
smtpUser="builder@domain.ru",
smtpPassword="******",
messageFormatter=reporters.MessageFormatter(
template=template, template_type='html',
wantProperties=True, wantSteps=True))
c['services'].append(mailNotifier)
# ΠΡΠ½ΠΎΠ²Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π° ΠΌΠ°ΡΡΠ΅ΡΠ°
c['title'] = "ΠΡΠΎΡΠ΅Ρ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅"
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 [-] ΠΠ°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° buildbot.tac...
2019-07-24 16:50:35+0300 [-] ΠΠ°ΡΠ΅Π΄Π΅Π½ΠΎ.
2019-07-24 16:50:35+0300 [-] twistd 19.2.1 (\/usr\/bin\/python3.6 3.6.8) ΡΡΠ°ΡΡΠΈΡΠ°.
2019-07-24 16:50:35+0300 [-] ΠΊΠ»Π°Ρ Π½Π° ΡΠ΅Π°ΠΊΡΠΎΡΠ°: twisted.internet.epollreactor.EPollReactor.
2019-07-24 16:50:35+0300 [-] Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° BuildMaster -- buildbot.version: 2.3.1
2019-07-24 16:50:35+0300 [-] ΠΠ°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΎΡ '\/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 ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ] `buildbotNetUsageData` Π½Π΅ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΎ ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎ.
Π’Π°Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΏΠΎΠΌΠ°Π³Π° Π½Π° Π΅ΠΊΠΈΠΏΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° buildbot Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ Π±Π°Π·Π°ΡΠ° Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ°.
ΠΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π΅ ΡΠ΅ ΡΡΠ±ΠΈΡΠ°Ρ.
ΠΠ·ΠΏΡΠ°ΡΠ° ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΎΡΡΡΠ΅ΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° `ΠΎΡΠΊΠ°ΠΆΠ΅ΡΠ΅` Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½ΡΠ°, Π·Π°Π΄Π°Π²Π°ΠΉΠΊΠΈ ΡΠ°Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° None.
ΠΠ»ΠΈ Π΄Π° `ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅`, ΡΠ΅ ΠΈΡΠΊΠ°ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π·Π°Π΄Π°Π²Π°ΠΉΠΊΠΈ Ρ Π½Π° "full".
2019-07-24 16:50:36+0300 [-] ΠΠ°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Ρ URL 'sqlite:\/state.sqlite'
2019-07-24 16:50:36+0300 [-] Π½Π°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΆΡΡΠ½Π°Π» Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π½Π° 'wal'
2019-07-24 16:50:36+0300 [-] Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° 1 Π½ΠΎΠ²ΠΈ ΡΡΠ»ΡΠ³ΠΈ, ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅ Π½Π° 0
2019-07-24 16:50:36+0300 [-] Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° 1 Π½ΠΎΠ²ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅ Π½Π° 0
2019-07-24 16:50:36+0300 [-] gitpoller: ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ '\/home\/buildbot\/master\/gitpoller-work'
2019-07-24 16:50:36+0300 [-] Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° 3 Π½ΠΎΠ²ΠΈ ΡΡΡΠΎΠΈΡΠ΅Π»ΠΈ, ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅ Π½Π° 0
2019-07-24 16:50:36+0300 [-] Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° 1 Π½ΠΎΠ²ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΡΠΈ, ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅ Π½Π° 0
2019-07-24 16:50:36+0300 [-] ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° www ΠΏΠ»ΡΠ³ΠΈΠ½ 'waterfall_view'
2019-07-24 16:50:36+0300 [-] ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° www ΠΏΠ»ΡΠ³ΠΈΠ½ 'console_view'
2019-07-24 16:50:36+0300 [-] ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° www ΠΏΠ»ΡΠ³ΠΈΠ½ 'grid_view'
2019-07-24 16:50:36+0300 [-] ΠΠΠΠΠΠΠΠΠ: www ΠΏΠ»ΡΠ³ΠΈΠ½ 'sitenav' Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½, Π½ΠΎ Π½Π΅ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½
2019-07-24 16:50:36+0300 [-] ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° www ΠΏΠ»ΡΠ³ΠΈΠ½ 'waterfall_view'
2019-07-24 16:50:36+0300 [-] ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° www ΠΏΠ»ΡΠ³ΠΈΠ½ 'console_view'
2019-07-24 16:50:36+0300 [-] ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° www ΠΏΠ»ΡΠ³ΠΈΠ½ 'grid_view'
2019-07-24 16:50:36+0300 [-] ΠΠΠΠΠΠΠΠΠ: www ΠΏΠ»ΡΠ³ΠΈΠ½ 'sitenav' Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½, Π½ΠΎ Π½Π΅ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½
2019-07-24 16:50:36+0300 [-] BuildbotSite ΡΡΠ°ΡΡΠΈΡΠ° Π½Π° 80
2019-07-24 16:50:36+0300 [-] Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΡΠΈΠΊΠ° <buildbot.www.service.BuildbotSite ΠΎΠ±Π΅ΠΊΡ Π½Π° 0x7fe31c2657b8>
2019-07-24 16:50:36+0300 [-] Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° 3 Π½ΠΎΠ²ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈ, ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅ Π½Π° 0
2019-07-24 16:50:36+0300 [-] PBServerFactory ΡΡΠ°ΡΡΠΈΡΠ° Π½Π° 4000
2019-07-24 16:50:36+0300 [-] Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΡΠΈΠΊΠ° <twisted.spread.pb.PBServerFactory ΠΎΠ±Π΅ΠΊΡ Π½Π° 0x7fe31c147470>
2019-07-24 16:50:37+0300 [-] BuildMaster ΡΠ°Π±ΠΎΡΠΈ
2019-07-24 16:50:37+0300 [-] buildbotNetUsageData: ΠΈΠ·ΠΏΡΠ°ΡΠ° {'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] ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ 'CentOS' ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° ΠΎΡ IPv4Address(type='TCP', host='127.0.0.1', port=37332)
2019-07-24 16:50:37+0300 [Broker,0,127.0.0.1] ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ workerinfo ΠΎΡ 'CentOS'
2019-07-24 16:50:37+0300 [-] Π±ΠΎΡ ΡΠ²ΡΡΠ·Π°Π½
2019-07-24 16:50:37+0300 [Broker,0,127.0.0.1] Π Π°Π±ΠΎΡΠ½ΠΈΠΊ CentOS ΡΠ²ΡΡΠ·Π°Π½ Ρ Rac-GUI-RPM-builder
2019-07-24 16:50:37+0300 [-] buildbotNetUsageData: buildbot.net ΠΊΠ°Π·Π°: ok
2019-07-24 16:50:39+0300 [Broker,1,192.168.55.15] ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ 'Windows-10' ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° ΠΎΡ IPv4Address(type='TCP', host='192.168.5.145', port=49831)
2019-07-24 16:50:39+0300 [Broker,1,192.168.55.15] ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ workerinfo ΠΎΡ 'Windows-10'
2019-07-24 16:50:40+0300 [-] Π±ΠΎΡ ΡΠ²ΡΡΠ·Π°Π½
2019-07-24 16:50:40+0300 [Broker,1,192.168.55.15] Π Π°Π±ΠΎΡΠ½ΠΈΠΊ Windows-10 ΡΠ²ΡΡΠ·Π°Π½ Ρ Rac-GUI-WIN-builder
2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ 'Debian-10' ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° ΠΎΡ IPv4Address(type='TCP', host='192.168.5.9', port=44430)
2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ workerinfo ΠΎΡ 'Debian-10'
2019-07-24 16:50:41+0300 [-] Π±ΠΎΡ ΡΠ²ΡΡΠ·Π°Π½
2019-07-24 16:50:41+0300 [Broker,2,192.168.55.99] Π Π°Π±ΠΎΡΠ½ΠΈΠΊ Debian-10 ΡΠ²ΡΡΠ·Π°Π½ Ρ 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>Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅: {{ summary }}</h4>
<p> ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ: {{ workername }}</p>
{% for step in build['steps'] %}
<p> {{ step['name'] }}: {{ step['result'] }}</p>
{% endfor %}
<p><b> -- The Buildbot</b></p>
'''
mailNotifier = reporters.MailNotifier(fromaddr="112@icvibor.bg",
sendToInterestedUsers=False,
mode=('all'),
extraRecipients=["my@domain.local"],
relayhost="mail.domain.local",
smtpPort=587,
smtpUser="buildbot@domain.local",
smtpPassword="**********",
messageFormatter=reporters.MessageFormatter(
template=template, template_type='html',
wantProperties=True, wantSteps=True))
c['services'].append(mailNotifier)
c['title'] = "ΠΡΠΎΡΠ΅Ρ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅"
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"
}ΠΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ
ΠΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° Π±ΡΡ Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ:
- Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
