Karena buildbot adalah sistem terdistribusi, masuk akal untuk membuat host build terpisah untuk setiap arsitektur dan sistem operasi. Dalam kasus kami, ini adalah 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 membuat paket DEB
vm-srv-build3 - windows 10, untuk perakitan, Anda tahu untuk apa
Kami akan mengumpulkan GUI ras β antarmuka grafis untuk ras 1C untuk mengelola sekelompok server. Untuk Linux, alat standar untuk setiap OS akan digunakan; untuk membuat file exe untuk Windows dari skrip tcl, gunakan bungkus gratis.
Instalasi
GNU / Linux
Ada cukup dokumentasi di Internet untuk instalasi 1,2. Ya, dan itu tidak menimbulkan masalah khusus:
Untuk master:
Tentu saja, akan lebih tepat jika mengumpulkan paket untuk setiap OS, tetapi ini di luar cakupan artikel. Kami juga akan menghilangkan deskripsi pengaturan container untuk bekerja, saya hanya akan mencatat 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.)
Proyek pembangunan dan layanan buildbot akan diluncurkan sebagai pengguna yang tidak memiliki hak istimewa, jadi Anda perlu membuatnya untuk semua host yang berpartisipasi dalam proses tersebut:
adduser buildbot
Selanjutnya, kami akan mengonfigurasi peluncuran otomatis layanan, masing-masing, pada masing-masing host (kontainer):
Setelah ini, Anda dapat membuat infrastruktur direktori untuk "pekerja" (di semua host), untuk melakukan ini, daftar di bawah pengguna buildbot dan jalankan perintah berikut:
Di 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
Di 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
Pada host pekerja, layanan buildbot-worker dapat dimulai
systemctl start buildbot-worker
MS Windows
Sebagai "pekerja" untuk perakitan di Windows, mesin virtual dengan rilis terbaru Win10 akan digunakan.
Untuk bekerja Anda membutuhkan:
Setelah semua hal di atas terinstal, Anda dapat menginstal buildbot itu sendiri:
pip install buildbot-worker
Mari buat direktori kerja
md c:worker
Dan mari kita luncurkan
buildbot-worker start c:worker
Jika semuanya berfungsi (lihat log c:workertwistd.log), maka Anda dapat mendaftarkan "pekerja" kami sebagai layanan dengan menambahkan item dengan direktori kerja ke registri (perintah dijalankan di PowerShell yang dijalankan sebagai administrator):
Itu saja dengan βpekerjaβ, Anda tidak perlu menyentuh mereka lebih jauh, semua kendali datang dari sang master.
Pengaturan penyihir
Untuk memulainya, mari buat infrastruktur untuk master (di host utama), untuk melakukan ini, daftar di bawah pengguna buildbot dan jalankan 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 mengerjakannya di masa mendatang.
Untuk mengotomatiskan perakitan paket versi yang berbeda, agar tidak perlu mempelajari kode file master.cfg, di skrip utama program rac_gui.tcl, baris dengan versi dan rilis saat ini ditambahkan di header :
Dan berdasarkan baris-baris ini, buildbot akan memberi nomor pada paket-paket tersebut. Untuk mengekstrak data, gunakan panggilan konsol grep. Di buildbot Anda tidak bisa mendefinisikan variabel untuk "pekerja" (setidaknya, saya belum menemukan caranya). Untuk itulah properti digunakan. Itu. Dalam proses perakitan, kami menambahkan langkah-langkah untuk menentukan versi dan rilis dan, karenanya, mengatur properti versi dan rilis. Properti dapat diatur dengan berbagai cara, dalam hal ini dengan memanggil perintah konsol:
Untuk mengatur nomor rilis dan versi yang benar, gunakan panggilan sed standar, yaitu. perintahnya menggantikan nilai-nilai di dalam file spesifikasi dengan yang diperlukan
Kami menyalin paket rakitan yang sudah jadi dan arsip dengan sumber ke master. Namun Anda dapat langsung menyalin file dari file pekerjaan Anda ke repositori atau situs web Anda.
Itu saja dengan RPM. Sekarang mari kita mulai menjelaskan algoritma untuk membangun paket DEB. Karena proses pembuatan paket untuk sistem yang berbeda tidak bergantung satu sama lain, banyak langkah yang akan diulang.
Untuk paket RPM, beberapa prosedur berikut dilakukan oleh rpm itu sendiri selama perakitan dan dijelaskan di dalam spesifikasi; untuk Debian, Anda harus melakukannya di sini:
Simpan file dan Anda dapat mencoba memulai layanan wizard:
systemctl restart buildbot-master
Di log kami akan memeriksa apakah semuanya beres dengan konfigurasi dan semuanya berfungsi seperti biasa. Semua pekerja kami sekarang harus terhubung, yang dengan senang hati akan dilaporkan 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 antarmuka web. Di mana Anda juga dapat melihat kesalahan build, menghentikan proses yang terhenti jika terjadi kesalahan, dll.
Segera setelah peluncuran, pekerja keras kami dapat dilihat melalui menu βBuildsβ -> βWorkersβ
Setelah proses build pertama selesai (yaitu perubahan pada repositori Git), status proses akan muncul di halaman pertama.
Jika Anda mengklik baris yang diinginkan dengan mouse, sebuah halaman akan terbuka dengan status proses saat ini, di mana Anda dapat melihat apa yang terjadi, kesalahan apa, dll.
Seluruh konfigurasi wizard dapat ditemukan di sini