Маған Git репозиторийінен сайтқа бағдарламалық пакеттерді жинау және жеткізу процесін орнату керек болды. Жақында мен Habré сайтында buildbot туралы мақаланы (соңындағы сілтеме) көргенде, мен оны қолданып көруді шештім.
buildbot бөлінген жүйе болғандықтан, әрбір архитектура мен операциялық жүйе үшін бөлек құрастыру хостын жасау қисынды болар еді. Біздің жағдайда бұл LXC контейнерлері (Linux жағдайында) және qemu (Windows жағдайында):
vm-srv-build1 - centos 7, онда buildbot шебері және жұмысшылардың бірі болады
vm-srv-build2 - debian 10, DEB пакеттерін құруға арналған
vm-srv-build3 - Windows 10, құрастыру үшін, сіз не үшін екенін білесіз
Біз жинаймыз Rac GUI — серверлер кластерін басқаруға арналған 1C rac графикалық интерфейсі. Linux үшін әрбір ОЖ үшін стандартты құралдар пайдаланылады; tcl сценарийінен Windows үшін exe файлын құру үшін пайдаланыңыз еркін орау.
параметр
GNU / Linux
Интернетте орнату үшін жеткілікті құжаттама бар 1,2. Иә, және ол ешқандай ерекше проблемаларды тудырмайды:
Мастер үшін:
Әрине, әрбір ОЖ үшін пакеттерді жинау дұрысырақ болар еді, бірақ бұл мақаланың аясынан тыс. Біз сондай-ақ жұмыс үшін контейнерлерді орнату сипаттамасын өткізбейміз, мен ProxMox VE пайдаланатынымды ғана ескертемін. Сондай-ақ құрастыруға қажетті әрбір ось үшін пакеттерді орнату қажет (centos: rpmdevtools, т.б.; debian: build-essential, dh-make, pbuilder, т.б.)
Жобаларды құру және buildbot қызметтері артықшылықсыз пайдаланушы ретінде іске қосылады, сондықтан процеске қатысатын барлық хосттарда біреуін жасау керек:
adduser buildbot
Әрі қарай, біз хосттардың (контейнерлердің) әрқайсысында сәйкесінше қызметтерді автоматты түрде іске қосуды конфигурациялаймыз:
Осыдан кейін сіз «жұмысшылар» үшін (барлық хосттарда) каталог инфрақұрылымын жасай аласыз, ол үшін buildbot пайдаланушысы астында тіркеліп, келесі пәрмендерді орындаңыз:
Бірінші хост 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
Жұмысшы хосттарында buildbot-worker қызметін бастауға болады
systemctl start buildbot-worker
MS Windows
Windows жүйесінде құрастыру үшін «жұмысшы» ретінде Win10 соңғы шығарылымы бар виртуалды машина пайдаланылады.
Жұмыс істеу үшін сізге қажет:
Жоғарыда айтылғандардың барлығын орнатқаннан кейін, құрастыру ботының өзін орнатуға болады:
pip install buildbot-worker
Жұмыс каталогын жасайық
md c:worker
Ал іске қосайық
buildbot-worker start c:worker
Егер бәрі жұмыс істеп тұрса (c:workertwistd.log журналын қараңыз), онда тізілімге жұмыс каталогы бар элементті қосу арқылы біздің «жұмысшыны» қызмет ретінде тіркеуге болады (пәрмендер әкімші ретінде іске қосылған powershell бағдарламасында орындалады):
Мұның бәрі «жұмысшылар» үшін, оларға әрі қарай қол тигізудің қажеті жоқ, барлық бақылау шеберден келеді.
Шеберді орнату
Бастау үшін шеберге (негізгі хостта) инфрақұрылымды жасайық, ол үшін buildbot пайдаланушысы астында тіркеліп, келесі пәрмендерді орындаңыз:
su - buildbot
mkdir /home/buildbot/master
cd ~
buildbot create-master master
Дайын пакеттер үшін құрастыру каталогын жасаңыз
mkdir /home/buildbot/builds
/home/buildbot/master/ каталогында master.cfg файлы жасалды. Бұл файл питон коды және жүйенің барлық механизмдерінің сипаттамасын қамтиды, біз онымен болашақта жұмыс істейтін боламыз.
Мастер.cfg файлының кодын тереңдетудің қажеті болмас үшін әртүрлі нұсқалардың бумаларын құрастыруды автоматтандыру үшін rac_gui.tcl бағдарламасының негізгі сценарийінде тақырыпта ағымдағы нұсқасы мен шығарылымы бар жолдар қосылды. :
Осы жолдардың негізінде buildbot пакеттерді нөмірлейді. Деректерді шығару үшін консоль grep қоңырауын пайдаланыңыз. Buildbot бағдарламасында сіз «жұмысшылар» үшін айнымалы мәндерді анықтай алмайсыз (кем дегенде, мен қалай екенін таппадым). Міне, осы қасиеттер үшін пайдаланылады. Анау. Құрастыру процесінде біз нұсқаны және шығарылымды анықтау үшін қадамдарды қосамыз және сәйкесінше нұсқа мен шығарылым сипаттарын орнатамыз. Сипаттар әртүрлі жолдармен орнатылуы мүмкін, бұл жағдайда консоль пәрменін шақыру арқылы:
# Добавим определение версии из основного файла
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() шақыру арқылы ауыстыруға болады.
Дұрыс шығарылым мен нұсқа нөмірлерін орнату үшін стандартты sed қоңырауын пайдаланыңыз, яғни. пәрмен арнайы файлдың ішіндегі мәндерді қажеттімен ауыстырады
Дайын жинақталған буманы және дереккөздері бар мұрағатты шеберге көшіреміз. Бірақ файлдарды жұмыс файлынан репозиторийге немесе веб-сайтқа бірден көшіруге болады.
# Скопируем файл на мастер
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.
Міне, 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 бумасы үшін келесі процедуралардың кейбірі құрастыру кезінде айналымның өзі арқылы орындалады және спецификацияда сипатталған; Debian үшін мұны осы жерде орындау керек:
# Поменяем пути к библиотекам
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")]
)
)
Файлды сақтаңыз және шебер қызметін іске қосып көріңіз:
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 репозиторийіне енгізілген өзгерістер), процестердің күйі бірінші бетте пайда болады.
Тінтуірдің көмегімен қажетті жолды бассаңыз, осы процестің ағымдағы күйі бар бет ашылады, онда не болып жатқанын, қандай қателер барын және т.б.
Шебердің толық конфигурациясын осы жерден табуға болады