ಉದಾಹರಣೆಗಳಲ್ಲಿ ಬಿಲ್ಡ್ಬಾಟ್

Git ರೆಪೊಸಿಟರಿಯಿಂದ ಸೈಟ್‌ಗೆ ಸಾಫ್ಟ್‌ವೇರ್ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಜೋಡಿಸುವ ಮತ್ತು ತಲುಪಿಸುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ನಾನು ಹೊಂದಿಸಬೇಕಾಗಿದೆ. ಮತ್ತು ನಾನು ಬಹಳ ಹಿಂದೆಯೇ ಅಲ್ಲ, ಬಿಲ್ಡ್‌ಬಾಟ್‌ನಲ್ಲಿನ ಲೇಖನವನ್ನು (ಕೊನೆಯಲ್ಲಿ ಲಿಂಕ್) ನೋಡಿದಾಗ, ನಾನು ಅದನ್ನು ಪ್ರಯತ್ನಿಸಲು ಮತ್ತು ಅನ್ವಯಿಸಲು ನಿರ್ಧರಿಸಿದೆ.

ಬಿಲ್ಡ್‌ಬಾಟ್ ವಿತರಣಾ ವ್ಯವಸ್ಥೆಯಾಗಿರುವುದರಿಂದ, ಪ್ರತಿ ಆರ್ಕಿಟೆಕ್ಚರ್ ಮತ್ತು ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್‌ಗೆ ಪ್ರತ್ಯೇಕ ಬಿಲ್ಡ್ ಹೋಸ್ಟ್ ಅನ್ನು ರಚಿಸುವುದು ತಾರ್ಕಿಕವಾಗಿರುತ್ತದೆ. ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ, ಇವುಗಳು LXC ಕಂಟೈನರ್‌ಗಳು (ಲಿನಕ್ಸ್‌ನ ಸಂದರ್ಭದಲ್ಲಿ) ಮತ್ತು qemu (ವಿಂಡೋಸ್‌ನ ಸಂದರ್ಭದಲ್ಲಿ):

  • vm-srv-build1 - centos 7, ಬಿಲ್ಡ್‌ಬಾಟ್ ಮಾಸ್ಟರ್ ಮತ್ತು ಕೆಲಸಗಾರರಲ್ಲಿ ಒಬ್ಬರು ಇರುತ್ತಾರೆ
  • vm-srv-build2 - debian 10, DEB ಪ್ಯಾಕೇಜುಗಳನ್ನು ನಿರ್ಮಿಸಲು
  • vm-srv-build3 - ವಿಂಡೋಸ್ 10, ಅಸೆಂಬ್ಲಿಗಾಗಿ, ಏನು ಎಂದು ನಿಮಗೆ ತಿಳಿದಿದೆ

ನಾವು ಸಂಗ್ರಹಿಸುತ್ತೇವೆ ರಾಕ್ GUI - ಸರ್ವರ್‌ಗಳ ಸಮೂಹವನ್ನು ನಿರ್ವಹಿಸಲು 1C rac ಗಾಗಿ ಚಿತ್ರಾತ್ಮಕ ಇಂಟರ್ಫೇಸ್. Linux ಗಾಗಿ, ಪ್ರತಿ OS ಗೆ ಪ್ರಮಾಣಿತ ಪರಿಕರಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ; tcl ಸ್ಕ್ರಿಪ್ಟ್‌ನಿಂದ ವಿಂಡೋಸ್‌ಗಾಗಿ exe ಫೈಲ್ ಅನ್ನು ನಿರ್ಮಿಸಲು, ಬಳಸಿ ಮುಕ್ತ ಸುತ್ತು.

ಸೆಟ್ಟಿಂಗ್

ಗ್ನೂ / ಲಿನಕ್ಸ್

ಅನುಸ್ಥಾಪನೆಗೆ ಅಂತರ್ಜಾಲದಲ್ಲಿ ಸಾಕಷ್ಟು ದಾಖಲೆಗಳಿವೆ 1,2. ಹೌದು, ಮತ್ತು ಇದು ಯಾವುದೇ ವಿಶೇಷ ಸಮಸ್ಯೆಗಳನ್ನು ಉಂಟುಮಾಡುವುದಿಲ್ಲ:
ಮಾಸ್ಟರ್ಗಾಗಿ:

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: ಬಿಲ್ಡ್-ಎಸೆನ್ಷಿಯಲ್, dh-make, pbuilder, ಇತ್ಯಾದಿ.)

ಬಿಲ್ಡ್ ಪ್ರಾಜೆಕ್ಟ್‌ಗಳು ಮತ್ತು ಬಿಲ್ಡ್‌ಬಾಟ್ ಸೇವೆಗಳನ್ನು ಸವಲತ್ತು ಇಲ್ಲದ ಬಳಕೆದಾರರಂತೆ ಪ್ರಾರಂಭಿಸಲಾಗುವುದು, ಆದ್ದರಿಂದ ನೀವು ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಭಾಗವಹಿಸುವ ಎಲ್ಲಾ ಹೋಸ್ಟ್‌ಗಳಲ್ಲಿ ಒಂದನ್ನು ರಚಿಸಬೇಕಾಗಿದೆ:


adduser buildbot

ಮುಂದೆ, ನಾವು ಪ್ರತಿಯೊಂದು ಹೋಸ್ಟ್‌ಗಳಲ್ಲಿ (ಕಂಟೇನರ್) ಕ್ರಮವಾಗಿ ಸೇವೆಗಳ ಸ್ವಯಂಚಾಲಿತ ಉಡಾವಣೆಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತೇವೆ:

ಮಾಂತ್ರಿಕವನ್ನು ಚಲಾಯಿಸಲು Systemd ಘಟಕ:

touch /etc/systemd/buildbot-master.service 

[Unit]
Description=BuildBot master service
After=network.target

[Service]
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/master
ExecStart=/usr/local/bin/buildbot start --nodaemon
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

ಮತ್ತು "ಕೆಲಸಗಾರ"

touch /etc/systemd/buildbot-worker.service 

[Unit]
Description=BuildBot worker service
After=network.target

[Service]master
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/worker
ExecStart=/usr/local/bin/buildbot-worker start --nodaemon

[Install]
WantedBy=buildbot-master.service

ಎಲ್ಲಾ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳು (ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ) /usr/local/ ನಲ್ಲಿ ನೆಲೆಗೊಂಡಿರುವುದರಿಂದ, ನೀವು ಪರಿಸರ ವೇರಿಯಬಲ್‌ಗಳಲ್ಲಿ ಅವುಗಳಿಗೆ ಮಾರ್ಗವನ್ನು ಹೊಂದಿಸಬೇಕು:

nano /root/.bash_profile

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin

ಇದರ ನಂತರ, ನೀವು "ಕಾರ್ಮಿಕರು" (ಎಲ್ಲಾ ಹೋಸ್ಟ್‌ಗಳಲ್ಲಿ) ಡೈರೆಕ್ಟರಿ ಮೂಲಸೌಕರ್ಯವನ್ನು ರಚಿಸಬಹುದು, ಇದನ್ನು ಮಾಡಲು, ಬಿಲ್ಡ್‌ಬಾಟ್ ಬಳಕೆದಾರರ ಅಡಿಯಲ್ಲಿ ನೋಂದಾಯಿಸಿ ಮತ್ತು ಈ ಕೆಳಗಿನ ಆಜ್ಞೆಗಳನ್ನು ಚಲಾಯಿಸಿ:

ಮೊದಲ ಹೋಸ್ಟ್ 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

MS ವಿಂಡೋಸ್

ವಿಂಡೋಸ್ ಅಡಿಯಲ್ಲಿ ಅಸೆಂಬ್ಲಿಗಾಗಿ "ವರ್ಕರ್" ಆಗಿ, Win10 ನ ಇತ್ತೀಚಿನ ಬಿಡುಗಡೆಯೊಂದಿಗೆ ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.
ನಿಮಗೆ ಅಗತ್ಯವಿರುವ ಕೆಲಸ:

ಮೇಲಿನ ಎಲ್ಲವನ್ನೂ ಸ್ಥಾಪಿಸಿದ ನಂತರ, ನೀವು ಬಿಲ್ಡ್‌ಬಾಟ್ ಅನ್ನು ಸ್ಥಾಪಿಸಬಹುದು:

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

ಮಾಸ್ಟರ್.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"]))

ಸರಿಯಾದ ಬಿಡುಗಡೆ ಮತ್ತು ಆವೃತ್ತಿ ಸಂಖ್ಯೆಗಳನ್ನು ಹೊಂದಿಸಲು, ಪ್ರಮಾಣಿತ ಸೆಡ್ ಕರೆಯನ್ನು ಬಳಸಿ, ಅಂದರೆ. ಆಜ್ಞೆಯು ಸ್ಪೆಕ್ ಫೈಲ್‌ನೊಳಗಿನ ಮೌಲ್ಯಗಳನ್ನು ಅಗತ್ಯವಿರುವವುಗಳೊಂದಿಗೆ ಬದಲಾಯಿಸುತ್ತದೆ

# меняем версию
rac_gui_build_RPM.addStep(steps.ShellCommand(
       command=["sed", "-i", util.Interpolate("s/.*Version:.*/Version:t%(prop:version)s/"), "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))
# меняем релиз
rac_gui_build_RPM.addStep(steps.ShellCommand(
       command=["sed", "-i", util.Interpolate("s/.*Release:.*/Release:t%(prop:release)s/"), "/home/buildbot/rpmbuild/SPECS/rac_gui.spec"]))

# запускаем процесс сборки
rac_gui_build_RPM.addStep(steps.RpmBuild(
       specfile="/home/buildbot/rpmbuild/SPECS/rac_gui.spec",
       dist='.el5',
       topdir='/home/buildbot/rpmbuild',
       builddir='/home/buildbot/rpmbuild/build',
       rpmdir='/home/buildbot/rpmbuild/RPMS',
       sourcedir='/home/buildbot/rpmbuild/SOURCES'
      )
)

ನಾವು ಸಿದ್ಧಪಡಿಸಿದ ಜೋಡಿಸಲಾದ ಪ್ಯಾಕೇಜ್ ಮತ್ತು ಆರ್ಕೈವ್ ಅನ್ನು ಮೂಲಗಳೊಂದಿಗೆ ಮಾಸ್ಟರ್ಗೆ ನಕಲಿಸುತ್ತೇವೆ. ಆದರೆ ನೀವು ತಕ್ಷಣ ನಿಮ್ಮ ಕೆಲಸದ ಫೈಲ್‌ನಿಂದ ನಿಮ್ಮ ರೆಪೊಸಿಟರಿ ಅಥವಾ ವೆಬ್‌ಸೈಟ್‌ಗೆ ಫೈಲ್‌ಗಳನ್ನು ನಕಲಿಸಬಹುದು.

# Скопируем файл на мастер
rac_gui_build_RPM.addStep(
       steps.FileUpload(
          workersrc=util.Interpolate("/home/buildbot/rpmbuild/RPMS/noarch/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm"),
          masterdest=util.Interpolate("/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm")
      )
)

rac_gui_build_RPM.addStep(
       steps.FileUpload(
       workersrc=util.Interpolate("/home/buildbot/rpmbuild/SOURCES/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"),
          masterdest=util.Interpolate("/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz")
       )
)

ಮಾಸ್ಟರ್‌ನಲ್ಲಿ FTP ಮೂಲಕ ಹೋಸ್ಟಿಂಗ್‌ಗೆ ಸಂಗ್ರಹಿಸಿದ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ನಕಲಿಸುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸೋಣ. ಈ ಉದ್ದೇಶಕ್ಕಾಗಿ ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಸ್ಕ್ರಿಪ್ಟ್ tcl ನಲ್ಲಿ.

rac_gui_build_RPM.addStep(
        steps.MasterShellCommand(
            command=["/usr/local/bin/deploy-ftp.tcl",
                util.Interpolate("--local-file=/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm"),
                util.Interpolate("--remote-file=uploads/rac-gui/rac-gui-%(prop:version)s-%(prop:release)s.noarch.rpm")]
        )
)

rac_gui_build_RPM.addStep(
        steps.MasterShellCommand(
            command=["/usr/local/bin/deploy-ftp.tcl",
                util.Interpolate("--local-file=/home/buildbot/builds/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz"),
                util.Interpolate("--remote-file=uploads/rac-gui/rac-gui-%(prop:version)s-%(prop:release)s.tar.gz")]
        )
)

RPM ನಲ್ಲಿ ಅಷ್ಟೇ. ಈಗ DEB ಪ್ಯಾಕೇಜ್ ಅನ್ನು ನಿರ್ಮಿಸಲು ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ವಿವರಿಸಲು ಪ್ರಾರಂಭಿಸೋಣ. ವಿಭಿನ್ನ ವ್ಯವಸ್ಥೆಗಳಿಗೆ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುವ ಪ್ರಕ್ರಿಯೆಗಳು ಪರಸ್ಪರ ಸ್ವತಂತ್ರವಾಗಿರುವುದರಿಂದ, ಹಲವು ಹಂತಗಳನ್ನು ಪುನರಾವರ್ತಿಸಲಾಗುತ್ತದೆ.


rac_gui_build_DEB = util.BuildFactory()

rac_gui_build_DEB.addStep(steps.Git(
       repourl = 'https://bitbucket.org/svk28/rac-gui.git',
       haltOnFailure = True,
       submodules = True,
       mode='full',
       workdir='build',
       progress = True)
)

# Добавим определение версии из основного файла
rac_gui_build_DEB.addStep(
       steps.SetPropertyFromCommand(
       command="grep version rac_gui.tcl | grep -oE 'b[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}b'", property="version"
       )
)

# Добавим определение релиза из основного файла
rac_gui_build_DEB.addStep(
       steps.SetPropertyFromCommand(
       command="grep release rac_gui.tcl | grep -oE 'b[0-9]{1,3}b'", property="release"
       )
)

# Переименуем запускаемый файл
    rac_gui_build_DEB.addStep(steps.ShellCommand(
       command=["mv", "rac_gui.tcl", "racgui"]))

RPM ಪ್ಯಾಕೇಜ್‌ಗಾಗಿ, ಅಸೆಂಬ್ಲಿ ಸಮಯದಲ್ಲಿ ಈ ಕೆಳಗಿನ ಕೆಲವು ಕಾರ್ಯವಿಧಾನಗಳನ್ನು rpm ಮೂಲಕ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಸ್ಪೆಕ್‌ನಲ್ಲಿ ವಿವರಿಸಲಾಗಿದೆ; ಡೆಬಿಯನ್‌ಗಾಗಿ, ನೀವು ಅದನ್ನು ಇಲ್ಲಿ ಮಾಡಬೇಕು:

# Поменяем пути к библиотекам
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"
}

ವಸ್ತುಗಳು

ಲೇಖನವನ್ನು ತಯಾರಿಸಲು ಈ ಕೆಳಗಿನ ವಸ್ತುಗಳನ್ನು ಬಳಸಲಾಗಿದೆ:

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ