Π’ΡΠ΅Π±Π°ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²Π°ΠΌ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Π½Π° Git Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°. Π ΠΊΠΎΠ³Π° Π²ΠΈΠ΄ΠΎΠ², Π½Π΅ ΡΠΎΠ»ΠΊΡ ΠΎΠ΄Π°ΠΌΠ½Π°, ΠΎΠ²Π΄Π΅ Π½Π° Π₯Π°Π±ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ° Π·Π° buildbot (Π»ΠΈΠ½ΠΊ Π½Π° ΠΊΡΠ°ΡΠΎΡ), ΡΠ΅ΡΠΈΠ² Π΄Π° ΡΠ° ΠΏΡΠΎΠ±Π°ΠΌ ΠΈ Π΄Π° ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π°ΠΌ.
ΠΠΈΠ΄Π΅ΡΡΠΈ buildbot Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ ΡΠΈΡΡΠ΅ΠΌ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΡΠ΅Π±Π΅Π½ build host Π·Π° ΡΠ΅ΠΊΠΎΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΎΠ²Π° ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ LXC (Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° Linux) ΠΈ qemu (Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° Windows):
- vm-srv-build1 - centos 7, ΡΠ΅ ΠΈΠΌΠ° buildbot master ΠΈ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈΡΠ΅
- 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
Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠΎΠ±Π΅ΡΠ°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΡΠ΅ΠΊΠΎΡ ΠΠ‘, Π½ΠΎ ΠΎΠ²Π° Π΅ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ°. ΠΠ΅ Π³ΠΎ ΠΈΡΠΏΡΡΡΠΈΠΌΠ΅ ΠΈ ΠΎΠΏΠΈΡΠΎΡ Π·Π° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ°, ΡΠ°ΠΌΠΎ ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ°ΠΌ Π΄Π΅ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ProxMox VE. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΡΠ΅ΠΊΠΎΡΠ° ΠΎΡΠΊΠ° ΠΏΠΎΡΡΠ΅Π±Π½Π° Π·Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ (centos: rpmdevtools, ΠΈΡΠ½.; debian: build-essential, dh-make, pbuilder ΠΈΡΠ½.)
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π° ΠΈ buildbot ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π»Π°Π½ΡΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΠΊΠΎ Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠ°Π½ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π΅Π΄Π΅Π½ Π½Π° ΡΠΈΡΠ΅ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΈ ΠΊΠΎΠΈ ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π°Ρ Π²ΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ:
adduser buildbot
Π‘Π»Π΅Π΄Π½ΠΎ, ΡΠ΅ Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎΡΠΎ ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ, Π½Π° ΡΠ΅ΠΊΠΎΡ ΠΎΠ΄ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΈΡΠ΅ (ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅):
Π‘ΠΈΡΡΠ΅ΠΌΡΠΊΠ° Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π·Π° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΈΠΊΠΎΡ:
touch /etc/systemd/buildbot-master.service
[Unit]
Description=BuildBot master service
After=network.target
[Service]
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/master
ExecStart=/usr/local/bin/buildbot start --nodaemon
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
ΠΈ βΡΠ°Π±ΠΎΡΠ½ΠΈΠΊβ
touch /etc/systemd/buildbot-worker.service
[Unit]
Description=BuildBot worker service
After=network.target
[Service]master
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/worker
ExecStart=/usr/local/bin/buildbot-worker start --nodaemon
[Install]
WantedBy=buildbot-master.service
ΠΠΈΠ΄Π΅ΡΡΠΈ ΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΈ (Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ) ΡΠ΅ Π½Π°ΠΎΡΠ°Π°Ρ Π²ΠΎ /usr/local/, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎ Π½ΠΈΠ² Π²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ°:
nano /root/.bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin
ΠΠΎΡΠ»Π΅ ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π·Π° βΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈβ (Π½Π° ΡΠΈΡΠ΅ Ρ ΠΎΡΡΠΎΠ²ΠΈ), Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΡΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ buildbot ΠΈ ΠΈΠ·Π²ΡΡΠ΅ΡΠ΅ Π³ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:
ΠΠ° ΠΏΡΠ²ΠΈΠΎΡ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ vm-srv-build1:
su - buildbot
mkdir /home/buildbot/worker
cd ~
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker vm-srv-build1:4000 CentOS 123456
ΠΠ° Π²ΡΠΎΡΠΈΠΎΡ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ vm-srv-build2:
su - buildbot
mkdir /home/buildbot/worker
cd ~
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker vm-srv-build1:4000 Debian-10 123456
ΠΠ°Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠΈΡΠ΅ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΈ, ΡΡΠ»ΡΠ³Π°ΡΠ° buildbot-worker ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΡΠ²Π°
systemctl start buildbot-worker
MS Windows
ΠΠ°ΠΊΠΎ βΡΠ°Π±ΠΎΡΠ½ΠΈΠΊβ Π·Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ΄ Windows, ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΡΠΎ Π½Π°ΡΠ½ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° Win10.
ΠΠ° ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ Π²ΠΈ ΡΡΠ΅Π±Π°Π°Ρ:
ΠΠ°ΡΡΠΎΠ½ PyWIN ΠΎΠ΄ΠΈ - ΠΠ° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΠΊΠ°ΠΊΠ²ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π²ΠΎ Python, ΡΡΠ΅Π±Π°ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ΅ΡΠ΅
ΠΠ·Π³ΡΠ°Π΄Π±Π° Π½Π° Π°Π»Π°ΡΠΊΠΈ Π·Π° Visual Studio 2019 Π³ΠΎΠ΄ΠΈΠ½Π° - 7Zip
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΡΠ΅ΡΠΎ Π³ΠΎΡΠ΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΈΠΎΡ buildbot:
pip install buildbot-worker
ΠΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π½ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ
md c:worker
Π Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅
buildbot-worker start c:worker
ΠΠΊΠΎ ΡΓ¨ ΡΠ°Π±ΠΎΡΠΈ (Π²ΠΈΠ΄Π΅ΡΠ΅ log c:workertwistd.log), ΡΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΡΠ΅ Π½Π°ΡΠΈΠΎΡ βΡΠ°Π±ΠΎΡΠ½ΠΈΠΊβ ΠΊΠ°ΠΊΠΎ ΡΡΠ»ΡΠ³Π° ΡΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ ΡΡΠ°Π²ΠΊΠ° ΡΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ (Π½Π°ΡΠ΅Π΄Π±ΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π²ΠΎ powershell ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΠΊΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ):
buildbot_worker_windows_service.exe --user VM-SRV-BUILD3buildbot --password 123456 --startup auto install
New-ItemProperty -path Registry::HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesBuildBotParameters -Name directories -PropertyType String -Value c:worker
Π ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ°
Start-Service buildbot
Π’ΠΎΠ° Π΅ ΡΓ¨ ΡΠΎ βΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈΡΠ΅β, Π½Π΅ ΠΌΠΎΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π³ΠΈ Π΄ΠΎΠΏΠΈΡΠ°ΡΠ΅, ΡΠ΅Π»Π°ΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π΄ΠΎΠ°ΡΠ° ΠΎΠ΄ Π³ΠΎΡΠΏΠΎΠ΄Π°ΡΠΎΡ.
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΈΠΊΠΎΡ
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊ, Π°ΡΠ΄Π΅ Π΄Π° ΡΠ° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π·Π° Π³Π»Π°Π²Π½ΠΈΠΎΡ (Π½Π° Π³Π»Π°Π²Π½ΠΈΠΎΡ Ρ ΠΎΡΡ), Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΡΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ buildbot ΠΈ ΠΈΠ·Π²ΡΡΠ΅ΡΠ΅ Π³ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
ΠΠ° Π³ΠΎΡΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°
mkdir /home/buildbot/builds
ΠΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ /home/buildbot/master/ Π±Π΅ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° master.cfg. ΠΠ²Π°Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π΅ python ΠΊΠΎΠ΄ ΠΈ ΡΠΎΠ΄ΡΠΆΠΈ ΠΎΠΏΠΈΡ Π½Π° ΡΠΈΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠΎ ΠΊΠΎΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π°.
nano /home/buildbot/master/master.cfg
import os, re
from buildbot.plugins import steps, util, schedulers, worker, changes, reporters
c= BuildmasterConfig ={}
# ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π°ΡΠΈΡ
ΡΠ°Π±ΠΎΡΠΈΡ
.
c['workers'] = [ worker.Worker('CentOS', '123456'), worker.Worker('Debian-10', '123456'), worker.Worker('Windows-10', '123456')]
c['protocols'] = {'pb': {'port': 4000}}
# Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠ΅ΡΡ ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ
c['change_source'] = []
c['change_source'].append(changes.GitPoller(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
project = 'Rac-GUI',
branches = True,
pollInterval = 60
)
)
# ΡΠ»ΡΠΆΠ±Π° Π·Π°ΠΏΡΡΠΊΠ° ΡΠ±ΠΎΡΠΊΠΈ
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
name="Rac-GUI-schedulers",
change_filter=util.ChangeFilter(branch='master'),
builderNames=["Rac-GUI-RPM-builder", "Rac-GUI-DEB-builder", "Rac-GUI-WIN-builder"],
properties = {'owner': 'admin'}
)
)
@util.renderer
######################################3
# Π‘Π±ΠΎΡΠΊΠ° RPM-ΠΏΠ°ΠΊΠ΅ΡΠ°
rac_gui_build_RPM = util.BuildFactory()
rac_gui_build_RPM.addStep(steps.Git(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
workdir = 'rac-gui',
haltOnFailure = True,
submodules = True,
mode='full',
progress = True)
)
ΠΠ° Π΄Π° ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ° ΠΌΠΎΠ½ΡΠ°ΠΆΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π΅ΡΠ·ΠΈΠΈ, Π·Π° Π΄Π° Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° Π½Π°Π²Π»Π΅Π³ΡΠ²Π°ΠΌΠ΅ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° master.cfg, Π²ΠΎ Π³Π»Π°Π²Π½Π°ΡΠ° ΡΠΊΡΠΈΠΏΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° rac_gui.tcl, Π²ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π»ΠΈΠ½ΠΈΠΈ ΡΠΎ ΡΠ΅ΠΊΠΎΠ²Π½Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° ΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ :
######################################################
# Rac GUI
...
# version: 1.0.3
# release: 1
Π Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΎΠ²ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ, buildbot ΡΠ΅ Π³ΠΈ Π½ΡΠΌΠ΅ΡΠΈΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅. ΠΠ° Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° grep. ΠΠΎ buildbot Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° βΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈβ (Π±Π°ΡΠ΅ΠΌ, ΡΠ°Ρ Π½Π΅ Π½Π°ΡΠ΄ΠΎΠ² ΠΊΠ°ΠΊΠΎ). ΠΠ° ΠΎΠ²Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ²ΠΎΡΡΡΠ²Π°ΡΠ°. ΠΠ½ΠΈΠ΅. ΠΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅, Π΄ΠΎΠ΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΠΊΠΎΡΠΈ Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° ΠΈ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π°ΡΠ΅ΡΠΎ ΠΈ, ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ, Π³ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΠΌΠ΅ ΡΠ²ΠΎΡΡΡΠ²Π°ΡΠ° Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° ΠΈ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π°ΡΠ΅ΡΠΎ. Π‘Π²ΠΎΡΡΡΠ²Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π°Ρ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ, Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ ΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°:
# ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
rac_gui_build_RPM.addStep(
steps.SetPropertyFromCommand(
command="grep version ../rac-gui/rac_gui.tcl | grep -oE 'b[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}b'", property="version"
)
)
# ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π»ΠΈΠ·Π° ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
rac_gui_build_RPM.addStep(
steps.SetPropertyFromCommand(
command="grep release ../rac-gui/rac_gui.tcl | grep -oE 'b[0-9]{1,3}b'", property="release"
)
)
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠ΅ Π½Π° util.Interpolate().
# ΠΠ°ΠΏΠ°ΠΊΡΠ΅ΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ
rac_gui_build_RPM.addStep(
steps.ShellCommand(
command=["tar", "czf", util.Interpolate("/home/buildbot/rpmbuild/SOURCES/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"), "../rac-gui"]
)
)
ΠΠ²Π΄Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π΄Π΅ΠΊΠ° Π±ΠΈΠ΄Π΅ΡΡΠΈ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΈ Π·Π° ΡΠ°ΡΠ½ΠΎ ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΎΠ΄Π²ΠΈΠ²Π° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ ΠΏΠ°ΡΠ΅ΠΊΠΈ.
# ΠΠΎΠΏΠΈΡΡΠ΅ΠΌ spec
rac_gui_build_RPM.addStep(steps.ShellCommand(
command=["cp", "../rac-gui/rac_gui.spec", "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))
ΠΠ° Π΄Π° Π³ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΡΠ½ΠΈΡΠ΅ Π±ΡΠΎΠ΅Π²ΠΈ Π·Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΈ Π²Π΅ΡΠ·ΠΈΡΠ°, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π΅Π½ sed ΠΏΠΎΠ²ΠΈΠΊ, Ρ.Π΅. ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π³ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ²Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π²ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅
# ΠΌΠ΅Π½ΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΡ
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