Buildbot – это система непрерывной интеграции на основе Python, предназначенная для автоматизации процессов сборки, тестирования и выпуска программного обеспечения. Она использует библиотеку Twisted для обеспечения асинхронной связи между мастером сборки и одним или несколькими воркерами (для простоты тестирования сборок на нескольких платформах). Система Buildbot простая и гибкая в настройке; кроме того, она предлагает несколько вариантов процесса сборки, благодаря чему её можно использовать в сложных сборках или проектах, которые требуют расширения инструментов с учетом их уникальных потребностей.
Данное руководство поможет установить и настроить мастер и воркер Buildbot на одной машине.
Требования
- Сервер Ubuntu 16.04 (1 Гб RAM минимум).
- Пользователь с доступом к sudo.
- Настроенный брандмауэр.
Все инструкции по настройке можно найти в этом руководстве.
1: Установка Buildbot
Проект Buildbot рекомендует использовать для установки Python Package Index, pip. Это позволит установить последнюю доступную версию (которая, как правило, на несколько релизов свежее той, которая хранится в репозитории Ubuntu).
Войдите как пользователь с доступом к sudo. Обновите индекс пакетов:
sudo apt-get update
Установите утилиту pip:
sudo apt-get install python-pip
Затем установите связку пакетов Buildbot, которая включает в себя пакеты мастера и воркера, а также зависимости программы (включая зависимости веб-интерфейса). Pip создаст файл .cache в домашнем каталоге пользователя, который запустил эту команду. Чтобы поместить файл в правильное место, добавьте в команду флаг –H.
sudo -H pip install 'buildbot[bundle]'
Выполнение команды займёт некоторое время (в зависимости от скорости сервера). Если установка прошла успешно, полученный вывод будет заканчиваться такими строками:
Successfully installed Automat-0.5.0 Jinja2-2.9.6 MarkupSafe-1.0
PyJWT-1.5.0 Tempita-0.5.2 Twisted-17.1.0 attrs-16.3.0 autobahn-17.5.1
buildbot-0.9.6 buildbot-console-view-0.9.6 buildbot-waterfall-view-0.9.6
buildbot-worker-0.9.6 buildbot-www-0.9.6 constantly-15.1.0
decorator-4.0.11 future-0.16.0 incremental-16.10.1 pbr-3.0.0
python-dateutil-2.6.0 six-1.10.0 sqlalchemy-1.1.9
sqlalchemy-migrate-0.11.0 sqlparse-0.2.3 txaio-2.7.1 zope.interface-4.4.0
Также команда может предложить обновить pip:
. . .
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Хотя версия pip не влияет на установку Buildbot, её рекомендуется обновить:
sudo -H pip install --upgrade pip
Collecting pip
Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
100% |████████████████████████████████| 1.3MB 768kB/s
Installing collected packages: pip
Found existing installation: pip 8.1.1
Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr
Successfully installed pip-9.0.1
Чтобы убедиться, что установка прошла успешно, запросите версию Buildbot:
buildbot --version
Buildbot version: 0.9.6
Twisted version: 17.1.0
Если ранее вы настроили брандмауэр UFW, на данный момент он поддерживает только трафик SSH. Запросите состояние брандмауэра:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Интерфейс Buildbot использует порт 8010. На данный момент он заблокирован. Откройте его:
sudo ufw allow 8010
Затем добавьте специального пользователя и группу для запуска Buildbot.
sudo addgroup --system buildbot
sudo adduser buildbot --system --ingroup buildbot --shell /bin/bash
Войдите в систему как новый пользователь и запустите установку Buildbot:
sudo --login --user buildbot
Команда откроет сессию пользователя buildbot и поместит вас в каталог /home/buildbot. Здесь можно настроить мастер и воркер.
2: Настройка мастера Buildbot
Чтобы создать мастер Buildbot, запустите следующую команду (в конце указан базовый каталог).
buildbot create-master master
mkdir /home/buildbot/master
creating /home/buildbot/master/master.cfg.sample
creating database (sqlite:///state.sqlite)
buildmaster configured in /home/buildbot/master
Скопируйте файл master.cfg.sample в master.cfg:
cp ~/master/master.cfg.sample ~/master/master.cfg
Примечание: Исходный файл master.cfg.sample останется на сервере, его можно будет использовать как шаблон для восстановления файла master.cfg.
Откройте файл, чтобы настроить доступ к интерфейсу с локальной машины.
nano ~/master/master.cfg
Чтобы получить доступ к веб-интерфейсу с локальной машины или другого устройства, измените значение buildbotURL: вместо localhost укажите IP-адрес или доменное имя сервера. В файле master.cfg находятся и другие важные параметры конфигурации, но пока эти значения можно оставить по умолчанию.
В конце файла найдите строку buildbotURL и вместо localhost введите IP-адрес или доменное имя сайта.
c['buildbotURL'] = "http://IP_or_site_domain:8010/"
Примечание: Файл master.cfg предопределяет настройки воркеров в разделе Workers.
. . .
####### WORKERS
# The 'workers' list defines the set of recognized workers. Each element is
# a Worker object, specifying a unique worker name and password. The same
# worker name and password must be configured on the worker.
c['workers'] = [worker.Worker("example-worker", "pass")]
. . .
Больше о создании воркера вы узнаете в следующем разделе данного мануала.
Изменив buildbotURL, сохраните и закройте файл. Затем запустите мастер:
buildbot start ~/master
Following twistd.log until startup finished..
The buildmaster appears to have (re)started correctly.
Чтобы просмотреть приветственную страницу, откройте в браузере эту ссылку:
http://IP_or_site_domain:8010/
Welcome to buildbot
0 build running currently
0 recent builds
3: Настройка воркера
Взаимодействие между мастером и воркером устанавливается в том случае, если имя и пароль воркера в файле master.cfg совпадает с именем и паролем, указанным в настройках самого воркера.
Создайте воркер с помощью команды create-worker и следующих параметров.
- worker – имя каталога, в котором должны храниться настройки воркера.
- localhost – адрес мастера текущего воркера.
- example-worker – уникальное имя воркера (с его помощью можно найти этот воркер в файле ~/master/master.cfg).
- pass – пароль воркера (должен совпадать с паролем в файле ~master/master.cfg).
buildbot-worker create-worker worker localhost example-worker pass
mkdir /home/buildbot/worker
mkdir /home/buildbot/worker/info
Creating info/admin, you need to edit it appropriately.
Creating info/host, you need to edit it appropriately.
Not creating info/access_uri - add it if you wish
Please edit the files in /home/buildbot/worker/info appropriately.
worker configured in /home/buildbot/worker
При первом подключении воркер отправит файлы в каталог info мастера. Они будут отображаться в интерфейсе и предоставлять разработчикам дополнительную информацию о сбоях тестирования.
Откройте файл, в котором указан адрес электронной почты администратора, удалите строку Your Name Here <admin@youraddress.invalid> и вместо нее укажите свое имя и электронный адрес.
nano ~/worker/info/admin
8host Blog <8host@8host.com>
Сохраните и закройте файл.
По соглашению файл info/host предоставляет информацию об ОС, версию, размер памяти, скорость процессора, версии установленных библиотек и версию Buildbot, запущенную на воркере.
Откройте этот файл и обновите содержимое по умолчанию, указав в нем соответствующие данные:
nano ~/worker/info/host
Укажите данные о своей системе:
Ubuntu 16.04.2 2GB Server - Buildbot version: 0.9.6 - Twisted version: 17.1.0
Сохраните и закройте файл. Запустите воркер:
buildbot-worker start worker
Following twistd.log until startup finished..
The buildbot-worker appears to have (re)started correctly.
4: Тестовая сборка
Чтобы запустить тестовую сборку, откройте меню Builds и выберите Workers. Вы увидите информацию о воркере, которую указали в файлах info/admin и info/host. Чтобы начать сборку, кликните по сборщику runtests по умолчанию.
До первой сборки экран runtests содержит общие данные. Чтобы запустить сборку, кликните force в верхнем правом углу.
Это откроет форму, в которой нужно указать информацию о новой сборке.
Для этой тестовой сборки можно оставить поля пустыми и просто нажать кнопку Start Build во всплывающем окне. Обратите внимание: поле Your name должно содержать валидный адрес электронной почты (если вы хотите его заполнить).
Через несколько секунд сборка должна завершиться успешно:
Чтобы ознакомиться с подробностями каждого этапа сборки, кликните по числу или стрелке (слева от имени).
Возможно, вы заметили, что для выполнения этой сборки не нужно было входить в систему. По умолчанию доступ к административным функциям может получить любой пользователь. Поэтому прежде чем закончить работу с интерфейсом, нужно заблокировать общий доступ и создать учетную запись пользователя. Узнать больше о доступных параметрах можно в документации Buildbot.
Откройте файл master.cfg:
nano ~/master/master.cfg
Добавьте следующие строки в конец файла (укажите свое имя и пароль).
. . .
c['www']['authz'] = util.Authz(
allowRules = [
util.AnyEndpointMatcher(role="admins")
],
roleMatchers = [
util.RolesFromUsername(roles=['admins'], usernames=['8host'])
]
)
c['www']['auth'] = util.UserPasswordAuth([('8host','Password')])
buildbot restart ~/master
Перезапустите веб-интерфейс. После этого в правом верхнем углу появится ссылка Anonymous. Функции администратора больше не доступны.
Протестируйте только что добавленные учетные данные. Для этого нажмите Anonymous. Вы увидите окно аутентификации, где можно ввести имя пользователя и пароль. При входе в систему у пользователя Anonymous не должно быть доступа для запуска сборки (в отличие от него пользователь 8host имеет такой доступ).
Установка Buildbot завершена и имеет минимальный уровень безопасности. Однако учётные данные всё ещё передаются в виде простого текста. Прежде чем приступить к работе с Buildbot, рекомендуется настроить обратный прокси-сервер.
Читайте также: Создание unit-файла systemd для Buildbot