рдмрд┐рд▓реНрдбрдмреЛрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ

рдореБрдЭреЗ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рд╛рдЗрдЯ рдкрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдФрд░ рдбрд┐рд▓реАрд╡рд░ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдФрд░ рджреЗрдЦрд╛ рдЬрд╛рдП, рддреЛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдпрд╣рд╛рдБ рдкрд░ рдмрд┐рд▓реНрдбрдмреЙрдЯ (рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХ) рдкрд░ рдЖрд░реНрдЯрд┐рдХрд▓ рдиреЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред


рдЪреВрдВрдХрд┐ рдмрд┐рд▓реНрдбрдмреЙрдЯ рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЕрд╕реЗрдВрдмрд▓реА рд╣реЛрд╕реНрдЯ рдмрдирд╛рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдПрд▓рдПрдХреНрд╕рд╕реА рдХрдВрдЯреЗрдирд░ (рд▓рд┐рдирдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдФрд░ рдХреНрдпреВрдореВ (рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рд╣реЛрдВрдЧреЗ:


  • vm-srv-build1 - centos 7, рдмрд┐рд▓реНрдбрдмреЙрдЯ рдорд╛рд╕реНрдЯрд░ рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдЧрд╛
  • vm-srv-build2 - рдбреЗрдмрд┐рдпрди 10, DEB рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
  • vm-srv-build3 - рд╡рд┐рдВрдбреЛрдЬрд╝ 10, рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реНрд╡рдпрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛

рд╣рдо рд░реИрд╕ рдЬреАрдпреВрдЖрдИ рдПрдХрддреНрд░ рдХрд░реЗрдВрдЧреЗ - рд╕рд░реНрд╡рд░ рдХреЗ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП 1C рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЪреЗрд╣рд░рд╛ред рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд, рдкреНрд░рддреНрдпреЗрдХ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлреНрд░реАрдХреНрд╡рд╛рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ 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 

рдмреЗрд╢рдХ, рдкреНрд░рддреНрдпреЗрдХ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рд╣рдо рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рднреА рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ ProxMox VE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рдЖрдкрдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╕реЗрдВрдЯреЛрд╕: рдЖрд░рдкреАрдПрдордбрд╛рд╡реЙрдЯреНрд╕, рдЖрджрд┐ред; рдбреЗрдмрд┐рдпрди: рдмрд┐рд▓реНрдб-рдПрд╕реЗрдВрд╢рд┐рдпрд▓, рдбреАрдПрдЪ-рдореЗрдХ, рдкрд╛рдЗрд▓рдбрд░, рдЖрджрд┐)


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдмрд┐рд▓реНрдбрдмреЛрдЯ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рд╣реЛрд╕реНрдЯреЛрдВ рдкрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 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 / рд╕реНрдерд╛рдиреАрдп / рдореЗрдВ рд╣реИрдВ, рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:


 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 рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:



рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реНрд╡рдпрдВ рдмрд┐рд▓реНрдбрдмреЙрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 pip install buildbot-worker 

рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБ


 md c:\worker 

рдФрд░ рджреМрдбрд╝реЛ


 buildbot-worker start c:\worker 

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╕реА: \ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ \ рдЯреНрд╡реАрдбрд▓реЙрдЧ рд▓реЙрдЧ рджреЗрдЦреЗрдВ), рддреЛ рдЖрдк рд╣рдорд╛рд░реЗ "рдХрд╛рд░реНрдпрдХрд░реНрддрд╛" рдХреЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдХрд░ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):


 buildbot_worker_windows_service.exe --user VM-SRV-BUILD3\buildbot --password 123456 --startup auto install New-ItemProperty -path Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BuildBot\Parameters -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) ) 

рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдорд╛рд╕реНрдЯрд░.рдлреЗрд╕ рдлрд╛рдЗрд▓ рдХреЗ рдХреЛрдб рдореЗрдВ рдЪрдврд╝рдирд╛ рди рдкрдбрд╝реЗ, рд╣реЗрдбрд░ рдореЗрдВ 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" ) ) 

рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред 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 рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 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")] ) ) 

рдЙрд╕ рдкрд░ рдЖрд░рдкреАрдПрдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдЕрдм 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:\\bin\\freewrap.exe", "rac_gui.tcl"])) #  ,   rac_gui_build_WIN.addStep(steps.ShellCommand( command=["c:\\Program Files\\7-zip\\7z.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="builder@domain.ru", sendToInterestedUsers=False, mode=('all'), extraRecipients=["admin@domain.ru"], relayhost="mail.domain.ru", smtpPort=587, smtpUser="builder@domain.ru", 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 

рд▓реЙрдЧ рдореЗрдВ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЕрдм рдХрдиреЗрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ '' '' '' '' / '' / '' / '' рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


  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:\\bin\\freewrap.exe", "rac_gui.tcl"])) #  ,   rac_gui_build_WIN.addStep(steps.ShellCommand( command=["c:\\Program Files\\7-zip\\7z.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="112@icvibor.ru", sendToInterestedUsers=False, mode=('all'), extraRecipients=["my@domain.local"], relayhost="mail.domain.local", smtpPort=587, smtpUser="buildbot@domain.local", smtpPassword="**********", messageFormatter=reporters.MessageFormatter( template=template, template_type='html', wantProperties=True, wantSteps=True)) c['services'].append(mailNotifier) c['title'] = "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" } 


:


Source: https://habr.com/ru/post/hi464489/


All Articles