เจฎเฉเจจเฉเฉฐ เจเฉฑเจ Git เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจคเฉเจ เจธเจพเจเจ 'เจคเฉ เจธเฉเจซเจเจตเฉเจ เจฐ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจ เจธเฉเจเจฌเจฒ เจเจฐเจจ เจ เจคเฉ เจกเจฟเจฒเฉเจตเจฐ เจเจฐเจจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจธเฉเฉฑเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจธเฉเฅค เจ เจคเฉ เจเจฆเฉเจ เจฎเฉเจ เจฆเฉเจเจฟเจ, เจฌเจนเฉเจค เจธเจฎเจพเจ เจชเจนเจฟเจฒเจพเจ, เจเฉฑเจฅเฉ เจนเฉเจฌเจฐเฉ เจเฉฑเจคเฉ เจฌเจฟเจฒเจกเจฌเฉเจ (เจ เฉฐเจค เจตเจฟเฉฑเจ เจฒเจฟเฉฐเจ) 'เจคเฉ เจเฉฑเจ เจฒเฉเจ, เจฎเฉเจ เจเจธเจจเฉเฉฐ เจ เจเจผเจฎเจพเจเจฃ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ.
เจเจฟเจเจเจเจฟ เจฌเจฟเจฒเจกเจฌเฉเจ เจเฉฑเจ เจกเจฟเจธเจเฉเจฐเฉเจฌเจฟเจเจเจฟเจก เจธเจฟเจธเจเจฎ เจนเฉ, เจเจธ เจฒเจ เจนเจฐเฉเจ เจเจฐเจเฉเจเฉเจเจเจฐ เจ เจคเฉ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจฒเจ เจเฉฑเจ เจตเฉฑเจเจฐเจพ เจฌเจฟเจฒเจก เจนเฉเจธเจ เจฌเจฃเจพเจเจฃเจพ เจฒเจพเจเจผเฉเจเจฒ เจนเฉเจตเฉเจเจพเฅค เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจเจน LXC เจเฉฐเจเฉเจจเจฐ (เจฒเฉเจจเจเจธ เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ) เจ เจคเฉ เจเจฟเจฎเฉ (เจตเจฟเฉฐเจกเฉเจเจผ เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ) เจนเฉเจฃเจเฉ:
- vm-srv-build1 - centos 7, เจเฉฑเจฅเฉ เจเฉฑเจ เจฌเจฟเจฒเจกเจฌเฉเจ เจฎเจพเจธเจเจฐ เจ เจคเฉ เจเฉฑเจ เจตเจฐเจเจฐ เจนเฉเจตเฉเจเจพ
- vm-srv-build2 - debian 10, DEB เจชเฉเจเฉเจ เจฌเจฃเจพเจเจฃ เจฒเจ
- vm-srv-build3 - เจตเจฟเฉฐเจกเฉเจเจผ 10, เจ เจธเฉเจเจฌเจฒเฉ เจฒเจ, เจคเฉเจธเฉเจ เจเจพเจฃเจฆเฉ เจนเฉ เจเจฟ เจเจฟเจธ เจฒเจ
เจ
เจธเฉเจ เจเจเฉฑเจ เจพ เจเจฐเจพเจเจเฉ
เจธเฉเจเจฟเฉฐเจ
GNU / เจฒเฉเจจเจเจธ
เจเฉฐเจธเจเจพเจฒเฉเจธเจผเจจ เจฒเจ เจเฉฐเจเจฐเจจเฉเฉฑเจ 'เจคเฉ เจเจพเจซเฉ เจฆเจธเจคเจพเจตเฉเจเจผ เจฎเฉเจเฉเจฆ เจนเจจ
เจฎเจพเจธเจเจฐ เจฒเจ:
pip3 install buildbot
pip3 install twisted
pip3 install autobahn
pip3 install pysqlite3
pip3 install sqlalchemy sqlalchemy-migrate
pip3 install buildbot-www buildbot-grid-view buildbot-console-view buildbot-waterfall-view
pip3 install python-dateutil
"เจเจฐเจฎเจเจพเจฐเฉเจเจ" เจฒเจ, เจเจน เจเจพเจซเจผเฉ เจนเฉ:
pip3 install buildbot-worker
เจฌเฉเจธเจผเฉฑเจ, เจนเจฐเฉเจ OS เจฒเจ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเจจเจพ เจตเจงเฉเจฐเฉ เจธเจนเฉ เจนเฉเจตเฉเจเจพ, เจชเจฐ เจเจน เจฒเฉเจ เจฆเฉ เจฆเจพเจเจฐเฉ เจคเฉเจ เจฌเจพเจนเจฐ เจนเฉ. เจ เจธเฉเจ เจเฉฐเจฎ เจฒเจ เจเฉฐเจเฉเจจเจฐเจพเจ เจฆเฉ เจธเจฅเจพเจชเจจเจพ เจฆเฉ เจตเจฐเจฃเจจ เจจเฉเฉฐ เจตเฉ เจเฉฑเจก เจฆเฉเจตเจพเจเจเฉ, เจฎเฉเจ เจธเจฟเจฐเจซ เจเจน เจจเฉเจ เจเจฐเจพเจเจเจพ เจเจฟ เจฎเฉเจ ProxMox VE เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเจพเจ. เจ เจคเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจ เจธเฉเจเจฌเจฒเฉ เจฒเจ เจฒเฉเฉเฉเจเจฆเฉ เจนเจฐเฉเจ เจงเฉเจฐเฉ เจฒเจ เจชเฉเจเฉเจ เจธเจฅเจพเจชเจค เจเจฐเจจ เจฆเฉ เจตเฉ เจฒเฉเฉ เจนเฉเจตเฉเจเฉ (เจธเฉเจเจเฉเจธ: rpmdevtools, เจเจฆเจฟ; debian: build-essential, dh-make, pbuilder, etc.)
เจฌเจฟเจฒเจก เจชเฉเจฐเฉเจเฉเจเจ เจ เจคเฉ เจฌเจฟเจฒเจกเจฌเฉเจ เจธเฉเจตเจพเจตเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจเฉเจฐ-เจ เจงเจฟเจเจพเจฐเจค เจเจชเจญเฉเจเจคเจพ เจตเจเฉเจ เจฒเจพเจเจ เจเฉเจคเจพ เจเจพเจตเฉเจเจพ, เจเจธ เจฒเจ เจคเฉเจนเจพเจจเฉเฉฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจตเจฟเฉฑเจ เจนเจฟเฉฑเจธเจพ เจฒเฉเจฃ เจตเจพเจฒเฉ เจธเจพเจฐเฉ เจฎเฉเจเจผเจฌเจพเจจเจพเจ 'เจคเฉ เจเฉฑเจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
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
เจเจธ เจคเฉเจ เจฌเจพเจ เจฆ, เจคเฉเจธเฉเจ "เจตเจฐเจเจฐเจพเจ" (เจธเจพเจฐเฉ เจฎเฉเจเจผเจฌเจพเจจเจพเจ 'เจคเฉ) เจฒเจ เจเฉฑเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเจพ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ, เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจฌเจฟเจฒเจกเจฌเฉเจ เจเจชเจญเฉเจเจคเจพ เจฆเฉ เจ เจงเฉเจจ เจฐเจเจฟเจธเจเจฐ เจเจฐเฉ เจ เจคเฉ เจนเฉเจ เจฒเจฟเจเฉเจเจ เจเจฎเจพเจเจกเจพเจ เจเจฒเจพเจ:
เจชเจนเจฟเจฒเฉ เจนเฉเจธเจ 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
เจตเจฐเจเจฐ เจฎเฉเจเจผเจฌเจพเจจเจพเจ 'เจคเฉ, เจฌเจฟเจฒเจกเจฌเฉเจ-เจตเจฐเจเจฐ เจธเฉเจตเจพ เจธเจผเฉเจฐเฉ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเฉ
systemctl start buildbot-worker
เจเจฎเจเจธ เจตเจฟเฉฐเจกเฉเจเจผ
เจตเจฟเฉฐเจกเฉเจเจผ เจฆเฉ เจ
เจงเฉเจจ เจ
เจธเฉเจเจฌเจฒเฉ เจฒเจ เจเฉฑเจ "เจตเจฐเจเจฐ" เจตเจเฉเจ, Win10 เจฆเฉ เจจเจตเฉเจจเจคเจฎ เจฐเฉเจฒเฉเจเจผ เจตเจพเจฒเฉ เจเฉฑเจ เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจพเจตเฉเจเฉเฅค
เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฒเฉเฉ เจนเฉเจตเฉเจเฉ:
เจชเจพเจเจฅเจจ เจชเจพเจเจตเจฟเจจ เจเจฟเฉฑเจ - เจชเจพเจเจฅเจจ เจตเจฟเฉฑเจ เจนเจฐ เจคเจฐเฉเจนเจพเจ เจฆเฉเจเจ เจตเฉฑเจ-เจตเฉฑเจ เจเฉเจเจผเจพเจ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ
เจตเจฟเจเจผเฉเจ เจฒ เจธเจเฉเจกเฉเจ 2019 เจฒเจ เจเฉเจฒ เจฌเจฃเจพเจ - 7Zip
เจเจชเจฐเฉเจเจค เจธเจพเจฐเฉ เจธเจฅเจพเจชเจฟเจค เจนเฉเจฃ เจคเฉเจ เจฌเจพเจ เจฆ, เจคเฉเจธเฉเจ เจฌเจฟเจฒเจกเจฌเฉเจ เจจเฉเฉฐ เจเจชเจฃเฉ เจเจช เจธเจฅเจพเจชเจฟเจค เจเจฐ เจธเจเจฆเฉ เจนเฉ:
pip install buildbot-worker
เจเจฒเฉ เจเฉฑเจ เจตเจฐเจเจฟเฉฐเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฌเจฃเจพเจเจ
md c:worker
เจ เจคเฉ เจเจ เจฒเจพเจเจ เจเจฐเฉเจ
buildbot-worker start c:worker
เจเฉ เจธเจญ เจเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ (เจตเฉเจเฉ log c:workertwistd.log), เจคเจพเจ เจคเฉเจธเฉเจ เจฐเจเจฟเจธเจเจฐเฉ เจตเจฟเฉฑเจ เจเฉฐเจฎ เจเจฐเจจ เจตเจพเจฒเฉ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเจเจเจฎ เจเฉเฉ เจเฉ เจธเจพเจกเฉ "เจตเจฐเจเจฐ" เจจเฉเฉฐ เจเฉฑเจ เจธเฉเจตเจพ เจตเจเฉเจ เจฐเจเจฟเจธเจเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉ (เจชเฉเจฐเจฌเฉฐเจงเจ เจฆเฉ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจฒ เจฐเจนเฉ เจชเจพเจตเจฐเจธเจผเฉเจฒ เจตเจฟเฉฑเจ เจเจฎเจพเจเจกเจพเจ เจเจฒเจพเจเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจ):
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
เจเจน เจธเจญ "เจเจฐเจฎเจเจพเจฐเฉเจเจ" เจฆเฉ เจจเจพเจฒ เจนเฉ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจนเจจเจพเจ เจจเฉเฉฐ เจนเฉเจฐ เจเฉเจนเจฃ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ, เจธเจพเจฐเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจฎเจพเจธเจเจฐ เจคเฉเจ เจเจเจเจฆเจพ เจนเฉเฅค
เจธเจนเจพเจเจ เจธเฉเฉฑเจเจ เฉฑเจช
เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฒเจ, เจเจ เจฎเจพเจธเจเจฐ (เจฎเฉเฉฑเจ เจนเฉเจธเจ 'เจคเฉ) เจฒเจ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเจพ เจฌเจฃเจพเจเจ, เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจฌเจฟเจฒเจกเจฌเฉเจ เจเจชเจญเฉเจเจคเจพ เจฆเฉ เจ เจงเฉเจจ เจฐเจเจฟเจธเจเจฐ เจเจฐเฉ เจ เจคเฉ เจนเฉเจ เจฒเจฟเจเฉเจเจ เจเจฎเจพเจเจกเจพเจ เจเจฒเจพเจ:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
เจคเจฟเจเจฐ เจชเฉเจเฉเจเจพเจ เจฒเจ, เจเฉฑเจ เจฌเจฟเจฒเจก เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฌเจฃเจพเจ
mkdir /home/buildbot/builds
เจเฉฑเจ master.cfg เจซเจพเจเจฒ /home/buildbot/master/ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเฉฑเจ เจฌเจฃเจพเจ เจเจ เจธเฉเฅค เจเจน เจซเจพเจเจฒ เจเฉฑเจ เจชเจพเจเจฅเจจ เจเฉเจก เจนเฉ เจ เจคเฉ เจเจธ เจตเจฟเฉฑเจ เจธเจฟเจธเจเจฎ เจฆเฉเจเจ เจธเจพเจฐเฉเจเจ เจตเจฟเจงเฉเจเจ เจฆเจพ เจตเฉเจฐเจตเจพ เจนเฉ; เจ เจธเฉเจ เจญเจตเจฟเฉฑเจ เจตเจฟเฉฑเจ เจเจธ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจพเจเจเฉเฅค
nano /home/buildbot/master/master.cfg
import os, re
from buildbot.plugins import steps, util, schedulers, worker, changes, reporters
c= BuildmasterConfig ={}
# ะะฟะธัะฐะฝะธะต ะฝะฐัะธั
ัะฐะฑะพัะธั
.
c['workers'] = [ worker.Worker('CentOS', '123456'), worker.Worker('Debian-10', '123456'), worker.Worker('Windows-10', '123456')]
c['protocols'] = {'pb': {'port': 4000}}
# ะฃะบะฐะทะฐะฝะธะต ะผะฐััะตัั ะบะฐะบะพะน ัะตะฟะพะทะธัะพัะธะน ะพััะปะตะถะธะฒะฐัั
c['change_source'] = []
c['change_source'].append(changes.GitPoller(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
project = 'Rac-GUI',
branches = True,
pollInterval = 60
)
)
# ัะปัะถะฑะฐ ะทะฐะฟััะบะฐ ัะฑะพัะบะธ
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
name="Rac-GUI-schedulers",
change_filter=util.ChangeFilter(branch='master'),
builderNames=["Rac-GUI-RPM-builder", "Rac-GUI-DEB-builder", "Rac-GUI-WIN-builder"],
properties = {'owner': 'admin'}
)
)
@util.renderer
######################################3
# ะกะฑะพัะบะฐ RPM-ะฟะฐะบะตัะฐ
rac_gui_build_RPM = util.BuildFactory()
rac_gui_build_RPM.addStep(steps.Git(
repourl = 'https://bitbucket.org/svk28/rac-gui.git',
workdir = 'rac-gui',
haltOnFailure = True,
submodules = True,
mode='full',
progress = True)
)
เจตเฉฑเจ-เจตเฉฑเจ เจธเฉฐเจธเจเจฐเจฃเจพเจ เจฆเฉ เจชเฉเจเฉเจเจพเจ เจฆเฉ เจ เจธเฉเจเจฌเจฒเฉ เจจเฉเฉฐ เจธเจตเฉเจเจฒเจฟเจค เจเจฐเจจ เจฒเจ, เจคเจพเจ เจเจฟ master.cfg เจซเจพเจเจฒ เจฆเฉ เจเฉเจก เจจเฉเฉฐ เจเฉเจเจฃ เจฆเฉ เจฒเฉเฉ เจจเจพ เจชเจตเฉ, rac_gui.tcl เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉ เจฎเฉเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจตเจฟเฉฑเจ, เจนเฉเจกเจฐ เจตเจฟเฉฑเจ เจฎเฉเจเฉเจฆเจพ เจธเฉฐเจธเจเจฐเจฃ เจ เจคเฉ เจฐเฉเจฒเฉเจเจผ เจตเจพเจฒเฉเจเจ เจฒเจพเจเจจเจพเจ เจธเจผเจพเจฎเจฒ เจเฉเจคเฉเจเจ เจเจเจเจ เจธเจจเฅค :
######################################################
# Rac GUI
...
# version: 1.0.3
# release: 1
เจ เจคเฉ เจเจนเจจเจพเจ เจฒเจพเจเจจเจพเจ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ, เจฌเจฟเจฒเจกเจฌเฉเจ เจชเฉเจเฉเจเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ เจเจฐเฉเจเจพ. เจกเจพเจเจพ เจเจเจธเจเจฐเฉเจเจ เจเจฐเจจ เจฒเจ, เจเฉฐเจธเฉเจฒ grep เจเจพเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉเฅค เจฌเจฟเจฒเจกเจฌเฉเจ เจตเจฟเฉฑเจ เจคเฉเจธเฉเจ "เจตเจฐเจเจฐเจพเจ" เจฒเจ เจตเฉเจฐเฉเจเจฌเจฒ เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจค เจจเจนเฉเจ เจเจฐ เจธเจเจฆเฉ (เจเฉฑเจเฉ-เจเฉฑเจ, เจฎเฉเจจเฉเฉฐ เจเจน เจจเจนเฉเจ เจฎเจฟเจฒเจฟเจ เจเจฟ เจเจฟเจตเฉเจ). เจเจน เจเจน เจนเฉ เจเจฟเจธ เจฒเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ. เจเจน. เจ เจธเฉเจเจฌเจฒเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจธเฉฐเจธเจเจฐเจฃ เจ เจคเฉ เจฐเฉเจฒเฉเจเจผ เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฒเจ เจเจฆเจฎ เจเฉเฉเจฆเฉ เจนเจพเจ เจ เจคเฉ, เจเจธเจฆเฉ เจ เจจเฉเจธเจพเจฐ, เจธเฉฐเจธเจเจฐเจฃ เจ เจคเฉ เจฐเฉเจฒเฉเจเจผ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจจเฉเฉฐ เจธเฉเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจจเฉเฉฐ เจเจ เจคเจฐเฉเจเจฟเจเจ เจจเจพเจฒ เจธเฉเฉฑเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจเจธ เจเฉเจธ เจตเจฟเฉฑเจ เจเฉฐเจธเฉเจฒ เจเจฎเจพเจเจก เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจเฉ:
# ะะพะฑะฐะฒะธะผ ะพะฟัะตะดะตะปะตะฝะธะต ะฒะตััะธะธ ะธะท ะพัะฝะพะฒะฝะพะณะพ ัะฐะนะปะฐ
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 เจฆเฉเจเจฐเจพ เจ เจธเฉเจเจฌเจฒเฉ เจฆเฉเจฐเจพเจจ เจเฉเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจ เจ เจคเฉ เจธเจชเฉเจ เจฆเฉ เจ เฉฐเจฆเจฐ เจตเจฐเจฃเจจ เจเฉเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจ; เจกเฉเจฌเฉเจ เจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจน เจเฉฑเจฅเฉ เจเจฐเจจเจพ เจชเจตเฉเจเจพ:
# ะะพะผะตะฝัะตะผ ะฟััะธ ะบ ะฑะธะฑะปะธะพัะตะบะฐะผ
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 เจจเจพเจฒ เจเฉเจคเจพ, เจนเฉเจฃ เจตเจฟเฉฐเจกเฉเจเจผ!
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 เจตเจฟเฉฐเจกเฉเจเจผ เจตเจฟเฉฑเจ เจฎเจฟเจเจฐเฉ เจจเจนเฉเจ เจนเจจ (เจเจพเจ เจเฉฑเจฅเฉ เจนเจจ?), เจ เจธเฉเจ เจชเจพเจตเจฐเจธเจผเฉเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจพเจเจเฉ
# ะะพะฑะฐะฒะธะผ ะพะฟัะตะดะตะปะตะฝะธะต ะฒะตััะธะธ ะธะท ะพัะฝะพะฒะฝะพะณะพ ัะฐะนะปะฐ
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
เจเจน เจธเฉเฉฑเจเจ เฉฑเจช เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจฆเจพ เจนเฉเฅค เจคเฉเจธเฉเจ เจตเฉเฉฑเจฌ เจเฉฐเจเจฐเจซเฉเจธ เจฐเจพเจนเฉเจ เจฎเฉเจเฉเจฆเจพ เจธเจฅเจฟเจคเฉ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉเฅค เจเจฟเฉฑเจฅเฉ เจคเฉเจธเฉเจ เจฌเจฟเจฒเจก เจเจฐเจฐเจเจผ เจตเฉ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ, เจเฉเจเจฐ เจเฉเจ เจเจฒเจค เจนเฉ เจเจฟเจ เจนเฉ เจคเจพเจ เจเฉฑเจ เจเฉฐเจฎเฉ เจนเฉเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจเจฟเฉฑเจ เจเจฐเฉ, เจเจฆเจฟเฅค
เจฒเจพเจเจ เจคเฉเจ เจคเฉเจฐเฉฐเจค เจฌเจพเจ เจฆ, เจธเจพเจกเฉ เจฎเจฟเจนเจจเจคเฉ เจตเจฐเจเจฐเจพเจ เจจเฉเฉฐ เจฎเฉเจจเฉ "เจฌเจฟเจฒเจกเจธ" -> "เจตเจฐเจเจฐเจเจผ" เจฐเจพเจนเฉเจ เจฆเฉเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจชเจนเจฟเจฒเฉ เจฌเจฟเจฒเจก เจชเฉเจฐเจเจฟเจฐเจฟเจ เจชเฉเจฐเฉ เจนเฉเจฃ เจคเฉเจ เจฌเจพเจ เจฆ (เจเจฟเจตเฉเจ เจเจฟ 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"
}
เจธเจฎเฉฑเจเจฐเฉ
เจฒเฉเจ เจจเฉเฉฐ เจคเจฟเจเจฐ เจเจฐเจจ เจฒเจ เจนเฉเจ เจฒเจฟเจเฉเจเจ เจธเจฎเฉฑเจเจฐเฉเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจ เจธเฉ:
เจฌเจฟเจฒเจกเจฌเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจจเจฟเจฐเฉฐเจคเจฐ เจเจเฉเจเจฐเจฃ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฆเฉ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจฌเจฟเจฒเจกเจฌเฉเจ: เจเจ เจนเฉเจฐ เจจเจฟเจฐเฉฐเจคเจฐ เจเจเฉเจเจฐเจฃ เจชเฉเจฐเจฃเจพเจฒเฉ เจฌเจพเจฐเฉ เจเจฆเจพเจนเจฐเจฃเจพเจ เจตเจพเจฒเฉ เจเจนเจพเจฃเฉ เจเจฌเฉฐเจเฉ 16.04 'เจคเฉ เจฌเจฟเจฒเจกเจฌเฉเจ เจตเจฟเฉฑเจ เจจเจฟเจฐเฉฐเจคเจฐ เจเจเฉเจเจฐเจฃ เจธเจฅเจพเจชเจค เจเจฐเจจเจพ - เจเฉเจฐ, เจเจคเจชเจพเจฆ เจฆเจธเจคเจพเจตเฉเจเจผ
เจฌเจฟเจฒเจกเจฌเฉเจ เจเจฟเจเจเฉเจฐเจฟเจ เจฒ
เจธเจฐเฉเจค: www.habr.com