Π’ΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π½Π°ΡΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π±ΠΈΠ»Π΄ ΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΡΠΎΡΡΡΠ΅Ρ ΠΎΡ 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 Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΎΡ ΡΡΡΠ²ΡΡΠΈ. ΠΠ»Ρ Linux ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π²ΡΡΠΊΠ° ΠΠ‘, Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° 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]
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.bg",
sendToInterestedUsers=False,
mode=('all'),
extraRecipients=["admin@domain.bg"],
relayhost="mail.domain.bg",
smtpPort=587,
smtpUser="builder@domain.bg",
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 and later] `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
