Saya perlu mengatur proses perakitan dan pengiriman paket perangkat lunak dari repositori Git ke situs. Dan setelah melihat, belum lama ini, di sini di Habr artikel tentang buildbot (tautan di akhir) memutuskan untuk mencobanya dan mengajukan permohonan untuk ini.
Karena buildbot adalah sistem terdistribusi, akan logis untuk setiap arsitektur dan OS untuk membuat host perakitan terpisah. Dalam kasus kami, ini akan menjadi wadah LXC (untuk linux) dan qemu (untuk windows):
- vm-srv-build1 - centos 7, akan ada master buildbot dan salah satu pekerja
- vm-srv-build2 - debian 10, untuk membangun paket DEB
- vm-srv-build3 - windows 10, untuk perakitan, Anda sendiri mengerti apa
Kami akan mengumpulkan Rac GUI - wajah grafis untuk 1C rac untuk mengelola sekelompok server. Untuk Linux, alat standar untuk setiap OS akan digunakan, freewrap digunakan untuk membangun file exe untuk windows dari skrip tcl.
Instalasi
GNU / Linux
Untuk instalasi, dokumentasi pada jaringan sudah cukup 1 , 2 . Dan itu tidak menyebabkan masalah khusus:
Untuk tuan:
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
Untuk "pekerja", ini sudah cukup:
pip3 install buildbot-worker
Tentu saja, akan lebih tepat untuk mengumpulkan paket untuk setiap OS, tetapi ini tidak termasuk dalam ruang lingkup artikel. Kami juga menghilangkan deskripsi mengkonfigurasi wadah untuk pekerjaan, saya hanya perhatikan bahwa saya menggunakan ProxMox VE. Dan Anda juga perlu menginstal paket untuk setiap sumbu yang diperlukan untuk perakitan (centos: rpmdevtools, dll.; Debian: build-essential, dh-make, pbuilder, dll.)
Layanan perakitan dan buildbot proyek akan diluncurkan atas nama pengguna yang tidak terjangkau, jadi Anda harus membuatnya di semua host yang terlibat dalam proses:
adduser buildbot
Selanjutnya, konfigurasikan peluncuran layanan secara otomatis, masing-masing, pada masing-masing host (wadah):
Unit Systemd untuk menjalankan wizard:
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
dan "pekerja"
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
Karena semua skrip (dalam kasus kami) berada di / usr / local /, Anda harus menulis path ke mereka dalam variabel lingkungan:
nano /root/.bash_profile PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin
Setelah itu, Anda dapat membuat infrastruktur direktori untuk "pekerja" (pada semua host), untuk ini, daftar di bawah pengguna buildbot dan jalankan perintah berikut:
Pada host pertama, 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
Pada host kedua, 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
Di host yang bekerja, layanan buildbot-pekerja dapat dimulai
systemctl start buildbot-worker
MS Windows
Sebagai "berfungsi" membangun untuk windows, mesin virtual dengan rilis Win10 terbaru akan digunakan.
Untuk bekerja, Anda perlu:
Setelah semua hal di atas diinstal, Anda dapat menginstal buildbot sendiri:
pip install buildbot-worker
Buat direktori yang berfungsi
md c:\worker
Dan lari
buildbot-worker start c:\worker
Jika semuanya berfungsi (lihat c: \ worker \ twistd.log log), maka Anda dapat mendaftarkan "pekerja" kami sebagai layanan dengan menambahkan item dengan direktori kerja ke registri (perintah dijalankan di PowerShell yang berjalan sebagai administrator):
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
Dan Anda bisa menjalankan pelayan
Start-Service buildbot
Itu semua dengan "pekerja", maka Anda tidak perlu menyentuh mereka lagi, semua manajemen pergi dari master.
Setup Wizard
Untuk memulainya, kami akan membuat infrastruktur untuk wizard (pada host utama), untuk ini kami mendaftar di bawah pengguna buildbot dan menjalankan perintah berikut:
su - buildbot mkdir /home/buildbot/master cd ~ buildbot create-master master
Untuk paket yang sudah jadi, buat direktori build
mkdir /home/buildbot/builds
File master.cfg dibuat di direktori / home / buildbot / master /. File ini adalah kode python dan berisi deskripsi semua mekanisme sistem, kami akan terus bekerja dengannya.
nano /home/buildbot/master/master.cfg
import os, re from buildbot.plugins import steps, util, schedulers, worker, changes, reporters c= BuildmasterConfig ={}
Untuk mengotomatiskan kumpulan paket versi yang berbeda, sehingga Anda tidak harus masuk ke kode file master.cfg, dalam skrip utama program rac_gui.tcl di header, baris dengan versi dan rilis saat ini telah ditambahkan:
Dan berdasarkan baris-baris ini, buildbot akan memberi nomor pada paket. Untuk menarik data, gunakan panggilan grep konsol. Di buildbot, Anda tidak bisa mendefinisikan variabel untuk "pekerja" (dalam hal apa pun, saya belum menemukan caranya). Untuk melakukan ini, gunakan properti. Yaitu ke dalam proses perakitan, tambahkan langkah-langkah untuk menentukan versi dan rilis, dan karenanya, atur versi dan properti rilis. Properti dapat diatur dengan berbagai cara, dalam hal ini adalah panggilan ke perintah konsol:
Gantikan nilai yang diperoleh dengan memanggil util.Interpolate ().
Perlu dicatat bahwa, karena host juga digunakan untuk perakitan paket secara manual, perakitan akan berlangsung di sepanjang jalur standar.
Untuk mengatur nomor rilis dan versi yang benar, gunakan panggilan standar, mis. perintah menggantikan nilai-nilai di dalam file spesifikasi dengan yang diperlukan
Kami menyalin paket rakitan jadi dan arsip dengan kode sumber ke master. Tetapi Anda dapat segera menyalin file dari desktop Anda ke repositori atau situs web Anda.
Pada panduan, kami memulai proses menyalin paket yang dikumpulkan ke hosting FTP. Untuk melakukan ini, gunakan skrip 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")] ) )
Di atasnya dengan RPM selesai. Sekarang mari kita mulai deskripsi algoritma perakitan untuk paket DEB. Karena proses pembuatan paket untuk sistem yang berbeda tidak tergantung satu sama lain, banyak langkah akan diulang.
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) )
Untuk paket RPM, bagian dari prosedur berikut dilakukan oleh rpm itu sendiri selama perakitan dan dijelaskan di dalam spesifikasi, untuk debian Anda harus melakukannya di sini:
Dan DEB selesai, sekarang windows!
rac_gui_build_WIN = util.BuildFactory() rac_gui_build_WIN.addStep(steps.Git( repourl = 'https://bitbucket.org/svk28/rac-gui.git', haltOnFailure = True, submodules = True, mode='full', workdir='build', progress = True) )
Karena windows tidak memiliki grep dan sed (atau ada?), Kami akan menggunakan PowerShell
Untuk memberi tahu tentang keadaan proses perakitan, kami akan menggunakan email
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)
Kami menyimpan file dan Anda dapat mencoba memulai layanan wizard:
systemctl restart buildbot-master
Dalam log, kami memeriksa bahwa semuanya sesuai dengan konfigurasi dan semuanya berfungsi seperti biasa. Semua karyawan kami sekarang harus terhubung, seperti yang akan dilaporkan dengan senang hati di log '' '' '/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
Ini menyelesaikan proses pengaturan. Anda dapat melihat status saat ini melalui web-face. Di mana Anda juga dapat melihat kesalahan perakitan, menendang proses beku jika terjadi kesalahan, dll.
Segera setelah memulai pekerja keras kami, Anda dapat melihat melalui menu "Membangun" -> "Pekerja"

Setelah proses build pertama selesai (mis. Perubahan ke repositori Git), keadaan proses akan muncul di halaman pertama.

Jika Anda menyodok mouse pada baris yang diinginkan, halaman terbuka dengan kondisi proses saat ini, di mana Anda dapat melihat apa yang terjadi, kesalahan apa, dll.

Anda dapat mengambil seluruh konfigurasi master di sini 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 ))
: