āĻāĻŽāĻžāĻ° āĻāĻāĻāĻŋ āĻāĻŋāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§āĻā§ āĻ¸āĻžāĻāĻā§ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻŦāĻ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻŦāĻ āĻ¯āĻāĻ¨ āĻāĻŽāĻŋ āĻĻā§āĻāĻ˛āĻžāĻŽ, āĻāĻ¤āĻĻāĻŋāĻ¨ āĻāĻā§, āĻāĻāĻžāĻ¨ā§ HabrÊ-āĻ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ (āĻļā§āĻˇā§ āĻ˛āĻŋāĻā§āĻ), āĻāĻŽāĻŋ āĻāĻāĻŋ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻžāĻ° āĻāĻŦāĻ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻ¯ā§āĻšā§āĻ¤ā§ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻāĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ, āĻ¤āĻžāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻāĻŦāĻ āĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻŦāĻŋāĻ˛ā§āĻĄ āĻšā§āĻ¸ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¯ā§āĻā§āĻ¤āĻŋāĻ āĻšāĻŦā§āĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻā§āĻ˛āĻŋ āĻšāĻŦā§ LXC āĻĒāĻžāĻ¤ā§āĻ°ā§ (āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§) āĻāĻŦāĻ qemu (āĻāĻāĻ¨ā§āĻĄā§āĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§):
- vm-srv-build1 - centos 7, āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻāĻāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻŦāĻ āĻāĻāĻāĻ¨ āĻāĻ°ā§āĻŽā§ āĻĨāĻžāĻāĻŦā§āĻ¨
- vm-srv-build2 - debian 10, DEB āĻĒā§āĻ¯āĻžāĻā§āĻ āĻ¤ā§āĻ°āĻŋāĻ° āĻāĻ¨ā§āĻ¯
- vm-srv-build3 - āĻāĻāĻ¨ā§āĻĄā§āĻ 10, āĻ¸āĻŽāĻžāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻŋ āĻāĻŋ āĻāĻžāĻ¨ā§āĻ¨
āĻāĻŽāĻ°āĻž āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻŦ
āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸
āĻāĻŋāĻāĻ¨āĻāĻ / āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸
āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻā§ āĻ¯āĻĨā§āĻˇā§āĻ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻāĻā§
āĻŽāĻžāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯:
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 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸āĻŽāĻžāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ āĻā§āĻˇā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ (āĻ¸ā§āĻ¨ā§āĻā§āĻ¸: rpmdevtools, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ; āĻĄā§āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨: āĻŦāĻŋāĻ˛ā§āĻĄ-āĻāĻ¸ā§āĻ¨āĻļāĻŋāĻ¯āĻŧāĻžāĻ˛, āĻĄāĻŋāĻāĻāĻ-āĻŽā§āĻ, āĻĒāĻŋāĻŦāĻŋāĻ˛ā§āĻĄāĻžāĻ°, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ)
āĻŦāĻŋāĻ˛ā§āĻĄ āĻĒā§āĻ°ā§āĻā§āĻā§āĻ āĻāĻŦāĻ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻŦāĻŋāĻšā§āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻŦā§, āĻ¤āĻžāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋāĻ¤ā§ āĻ āĻāĻļāĻā§āĻ°āĻšāĻŖāĻāĻžāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻšā§āĻ¸ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
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 āĻāĻ° āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨:
āĻĒāĻžāĻāĻĨāĻ¨ āĻĒāĻžāĻāĻāĻāĻ¨ git - āĻĒāĻžāĻāĻĨāĻ¨ā§ āĻ¸āĻŦ āĻ§āĻ°āĻŖā§āĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
āĻāĻŋāĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ˛ āĻ¸ā§āĻā§āĻĄāĻŋāĻ 2019 āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ - 7Zip
āĻāĻĒāĻ°ā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤āĻāĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻā§āĻ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
pip install buildbot-worker
āĻāĻ˛ā§āĻ¨ āĻāĻāĻāĻŋ āĻāĻžāĻā§āĻ° āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ
md c:worker
āĻāĻŦāĻ āĻāĻ° āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ
buildbot-worker start c:worker
āĻ¯āĻĻāĻŋ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻžāĻ āĻāĻ°ā§ (āĻ˛āĻ 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
āĻāĻŦāĻ āĻāĻ āĻ˛āĻžāĻāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§, āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻ āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋāĻā§ āĻ¨āĻŽā§āĻŦāĻ° āĻĻā§āĻŦā§āĨ¤ āĻĄā§āĻāĻž āĻŦā§āĻ° āĻāĻ°āĻ¤ā§, āĻāĻ¨āĻ¸ā§āĻ˛ āĻā§āĻ°ā§āĻĒ āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻā§ āĻāĻĒāĻ¨āĻŋ āĻā§āĻŦāĻ˛ "āĻļā§āĻ°āĻŽāĻŋāĻāĻĻā§āĻ°" āĻāĻ¨ā§āĻ¯ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¨āĻž (āĻ āĻ¨ā§āĻ¤āĻ¤, āĻāĻŽāĻŋ āĻā§āĻāĻžāĻŦā§ āĻā§āĻāĻā§ āĻĒāĻžāĻāĻ¨āĻŋ)āĨ¤ āĻāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŋ. āĻ¸ā§āĻā§āĻ˛ā§. āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ, āĻāĻŽāĻ°āĻž āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻžāĻļ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋ āĻ¯ā§āĻ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¸ā§āĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§, āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻžāĻļā§āĻ° āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻ¸ā§āĻ āĻāĻ°āĻŋāĨ¤ āĻāĻ¨āĻ¸ā§āĻ˛ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻ˛ āĻāĻ°ā§ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻĒāĻžāĻ¯āĻŧā§ āĻ¸ā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
# ĐОйавиĐŧ ĐžĐŋŅĐĩĐ´ĐĩĐģĐĩĐŊиĐĩ вĐĩŅŅии иС ĐžŅĐŊОвĐŊĐžĐŗĐž ŅĐ°ĐšĐģĐ°
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"]))
āĻ¸āĻ āĻŋāĻ āĻ°āĻŋāĻ˛āĻŋāĻ āĻāĻŦāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¨āĻŽā§āĻŦāĻ° āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§, āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ¸ā§āĻĄ āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨, āĻ¯ā§āĻŽāĻ¨ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻāĻŋāĻ¤āĻ°ā§āĻ° āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§
# ĐŧĐĩĐŊŅĐĩĐŧ вĐĩŅŅиŅ
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)
)
āĻ¯ā§āĻšā§āĻ¤ā§ āĻā§āĻ°ā§āĻĒ āĻāĻŦāĻ āĻ¸ā§āĻĄ āĻāĻāĻ¨ā§āĻĄā§āĻā§ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ¨āĻ¯āĻŧ (āĻ¨āĻžāĻāĻŋ āĻāĻā§?), āĻāĻŽāĻ°āĻž āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ
# ĐОйавиĐŧ ĐžĐŋŅĐĩĐ´ĐĩĐģĐĩĐŊиĐĩ вĐĩŅŅии иС ĐžŅĐŊОвĐŊĐžĐŗĐž ŅĐ°ĐšĐģĐ°
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
āĻāĻāĻŋ āĻ¸ā§āĻāĻāĻĒ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°ā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻ¯āĻŧā§āĻŦ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ āĻŦāĻ¸ā§āĻĨāĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋāĻ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻŋāĻā§ āĻā§āĻ˛ āĻšāĻ˛ā§ āĻāĻāĻāĻŋ āĻšāĻŋāĻŽāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§ āĻ˛āĻžāĻĨāĻŋ āĻĻāĻŋāĻ¨ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤
āĻ˛āĻā§āĻā§āĻ° āĻĒāĻ°āĻĒāĻ°āĻ, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ ā§āĻ° āĻāĻ°ā§āĻŽā§āĻĻā§āĻ° "āĻŦāĻŋāĻ˛ā§āĻĄāĻ¸" -> "āĻļā§āĻ°āĻŽāĻŋāĻ" āĻŽā§āĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĻā§āĻāĻž āĻ¯āĻžāĻŦā§
āĻĒā§āĻ°āĻĨāĻŽ āĻŦāĻŋāĻ˛ā§āĻĄ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§ (āĻ āĻ°ā§āĻĨāĻžā§ āĻāĻŋāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨), āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻˇā§āĻ āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻŦā§āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻŽāĻžāĻāĻ¸ āĻĻāĻŋāĻ¯āĻŧā§ āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻ˛āĻžāĻāĻ¨ā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°āĻ˛ā§, āĻāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋāĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ āĻŦāĻ¸ā§āĻĨāĻž āĻ¸āĻš āĻāĻāĻāĻŋ āĻĒā§āĻˇā§āĻ āĻž āĻā§āĻ˛āĻŦā§, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻā§ āĻāĻāĻā§, āĻā§ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨āĨ¤
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻāĻāĻžāĻ°ā§āĻĄ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻāĻāĻžāĻ¨ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
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 āĻāĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻāĻā§āĻāĻ°āĻŖā§āĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻ: āĻāĻ°ā§āĻāĻāĻŋ āĻ§āĻžāĻ°āĻžāĻŦāĻžāĻšāĻŋāĻ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻ˛ā§āĻĒ āĻāĻŦā§āĻ¨ā§āĻā§ 16.04 āĻ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻā§ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻšāĻā§āĻā§ - āĻāĻžāĻ˛, āĻĒāĻŖā§āĻ¯ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨
āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻ āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛
āĻāĻ¤ā§āĻ¸: www.habr.com