Вступление
Buildbot - это система непрерывной интеграции на основе Python для автоматизации процессов сборки, тестирования и выпуска программного обеспечения. Он использует Python Twisted library для обработки асинхронного взаимодействия между мастером сборки и одним или несколькими работниками, чтобы облегчить тестирование сборок на нескольких платформах. Buildbot имеет широкие возможности настройки и делает несколько предположений о том, как должен работать процесс сборки, что делает его пригодным для сложных процессов сборки или проектов, которые требуют, чтобы их инструменты росли в соответствии с уникальными потребностями проекта.
В этом руководстве мы установим и настроим мастера сборки Buildbot и работника на одном компьютере.
Предпосылки
Чтобы следовать этому уроку, вам понадобится:
-
* Сервер Ubuntu 16.04 с не менее 1 ГБ ОЗУ *, настроенный с пользователем root + + sudo + `и межсетевым экраном, как описано в https://www.digitalocean.com/community/tutorials/initial-server- setup-with-ubuntu-16-04 [Руководство по первоначальной настройке сервера Ubuntu 16.04].
Когда сервер настроен, вы готовы следовать за ним.
Шаг 1 - Установка Buildbot
Проект Buildbot рекомендует использовать индекс пакетов Python, pip, для установки Buildbot для получения самой последней версии, которая часто на несколько выпусков опережает то, что доступно в пакетах Ubuntu.
Мы начнем с + sudo
и будем использовать` + apt-get update`, чтобы убедиться, что у нас есть последний список пакетов:
sudo apt-get update
Затем мы установим сам pip:
sudo apt-get install python-pip
Как только pip станет доступен, мы будем использовать его для установки пакета Buildbot, который включает в себя мастер и рабочий, а также другие зависимости, в том числе те, которые требуются для веб-интерфейса. Pip создает файлы + .cache +
в домашнем каталоге пользователя, который его выполняет. Мы будем использовать флаг + sudo +
'`+ -H +`, чтобы поместить эти файлы в нужное место:
sudo -H pip install 'buildbot[bundle]'
В зависимости от скорости вашего сервера, это может занять немного времени. Окончание вывода при успешной установке должно выглядеть примерно так:
Output. . .
Successfully installed Automat-0.6.0 Jinja2-2.10 MarkupSafe-1.0
PyJWT-1.6.0 Tempita-0.5.2 Twisted-17.9.0 attrs-17.4.0 autobahn-18.3.1
buildbot-1.0.0 buildbot-console-view-1.0.0 buildbot-grid-view-1.0.0
buildbot-waterfall-view-1.0.0 buildbot-worker-1.0.0 buildbot-www-1.0.0
constantly-15.1.0 decorator-4.2.1 future-0.16.0 hyperlink-18.0.0 idna-2.6
incremental-17.5.0 pbr-3.1.1 python-dateutil-2.6.1 six-1.11.0 sqlalchemy-1.2.5
sqlalchemy-migrate-0.11.0 sqlparse-0.2.4 txaio-2.9.0 zope.interface-4.4.3
Также может отображаться рекомендация обновить сам пипс:
Output. . .
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.
Хотя это не повлияет на нашу установку Buildbot, мы потратим немного времени на обновление до последней версии pip:
sudo -H pip install --upgrade pip
OutputCollecting 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
OutputBuildbot version: 1.0.0
Twisted version: 17.9.0
В предварительном условии учебника мы настроили брандмауэр UFW для разрешения только трафика SSH. Мы проверим статус:
sudo ufw status
OutputStatus: 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 + create-master +
, за которой следует значение базового каталога:
buildbot create-master ~/master
Outputmkdir /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
Затем мы отредактируем файл, чтобы мы могли подключаться к веб-интерфейсу с локального компьютера.
nano ~/master/master.cfg
Чтобы получить доступ к веб-интерфейсу с рабочего стола или другого устройства, мы изменим + buildbotURL +
с + localhost +
на IP-адрес или доменное имя сервера. Мы также установим политику отчетности об использовании. Другие важные значения конфигурации устанавливаются в + master.cfg +
, но мы пока оставим остальные значения по умолчанию.
В нижней части файла найдите строку + buildbotURL +
и замените + localhost +
на IP-адрес или доменное имя вашего сайта:
~ / Ведущий / master.cfg
c['buildbotURL'] = "http://:8010/"
Затем, в нижней части файла, установите значение директивы + buildbotNetUsageData +
. Это определяет, будет ли Buildbot сообщать разработчикам статистику использования, чтобы помочь улучшить приложение. Вы можете установить это в + None +
, чтобы отказаться от этого. Если вы не против отправить основную информацию о вашем использовании, используйте вместо этого строку " basic "
. + Подробнее об этом параметре вы можете узнать в the глобальной документации по конфигурации Buildbot:
~ / Ведущий / master.cfg
c['buildbotNetUsageData'] = None
# To send back basic information, use this instead:
#c['buildbotNetUsageData'] = 'basic'
Когда вы изменили + 'buildbotURL' +
и добавили строку + buildbotNetUsageData +
, сохраните и выйдите из файла.
Проверьте конфигурацию мастера, набрав:
buildbot checkconfig ~/master
Вы получите вывод, заканчивающийся следующим сообщением, если синтаксис в порядке:
Output. . .
Config file is good!
Если выходные данные указывают на наличие синтаксических ошибок, вернитесь и проверьте файл еще раз. Как только команда + checkconfig +
указывает на успех, запустите мастер:
buildbot start ~/master
После успешного перезапуска вы должны получить следующее подтверждение:
OutputFollowing twistd.log until startup finished..
The buildmaster appears to have (re)started correctly.
Наконец, давайте зайдем на сайт в веб-браузере через порт 8010 на настроенном нами + buildbotURL +
:
+ HTTP: //: 8010 / +
изображение: https: //assets.digitalocean.com/articles/buildbot-install-ubuntu-1604/buildbot-welcome.png [Снимок экрана приветствия Buildbot]
Теперь, когда мастер запущен и проверил, что мы можем получить доступ к веб-интерфейсу, мы создадим пример работника.
Шаг 3 - Настройка работника
Связь между мастером и работником устанавливается, когда имя и пароль работника в файле + master.cfg +
совпадают с именем и паролем работника, настроенного для использования мастера.
На этом этапе мы создадим и настроим работника, вызвав команду + buildbot-worker +
'`` create-worker + `и передав четыре настройки:
-
+ worker +
- это имя каталога, в котором будут храниться настройки работника. -
+ localhost +
- это адрес, на котором работает мастер работника -
+ example-worker +
- это имя работника, которое должно однозначно идентифицировать работника в файле+ ~ / master / master.cfg +
. -
+ pass +
- это пароль рабочего, и этот пароль должен соответствовать значению в+ ~ master / master.cfg +
.
buildbot-worker create-worker ~/worker localhost example-worker pass
Outputmkdir /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 +
мастеру сборки, где он работает. Они будут отображаться в веб-интерфейсе, чтобы предоставить разработчикам больше информации о неудачных тестах.
Мы настроим это сейчас. Сначала откройте файл, содержащий электронную почту администратора, удалите строку примера + Ваше имя здесь <[email protected]> +
и замените его своим именем и адресом электронной почты.
nano ~/worker/info/admin
~ / Рабочий / Информация / администратор
<>
Когда вы закончите, сохраните и выйдите из файла.
Файл + info / host +
, по соглашению, предоставляет ОС, версию, объем памяти, скорость процессора, версии установленных библиотек и, наконец, версию Buildbot, работающую на рабочем месте.
Откройте файл и вставьте соответствующую информацию, обновив образец содержимого по мере необходимости для вашей системы:
nano ~/worker/info/host
Обновите информацию, которую вы используете, чтобы отразить специфику вашей системы:
~ / Рабочий / Информация / хост
Ubuntu 16.04.2 2GB Droplet - Buildbot version: 1.0.0 - Twisted version: 17.1.0
Когда вы закончите, сохраните и выйдите. Наконец, начнем рабочий:
buildbot-worker start ~/worker
OutputFollowing twistd.log until startup finished..
The buildbot-worker appears to have (re)started correctly.
Теперь, когда мастер и работник настроены и работают, мы выполним тестовую сборку.
Шаг 4 - Запуск тестовой сборки
Чтобы запустить тестовую сборку, мы откроем меню «Сборки» в веб-интерфейсе, затем выберите «Рабочие». Рабочий пример и информация, которую мы установили в + info / admin +
и + info / host +
, должны отображаться. Отсюда мы можем нажать на сборщик по умолчанию, «runtests», чтобы вызвать сборку.
изображение: https: //assets.digitalocean.com/articles/buildbot-install-ubuntu-1604/buildbot-workers.png [Снимок экрана рабочего экрана Buildbot]
На экране «runtests» будет мало информации, пока не будет сделан первый запрос на сборку. Теперь мы его нажмем, нажав кнопку «принудительно» в правом верхнем углу экрана:
изображение: https: //assets.digitalocean.com/articles/buildbot-install-ubuntu-1604/buldbot-force.png [Снимок экрана с кнопкой включения]
Это вызовет диалог, который позволяет вам ввести информацию о принудительной сборке. + изображение: https: //assets.digitalocean.com/articles/buildbot-install-ubuntu-1604/buildbot-info.png [Скриншот всплывающего окна с принудительной сборкой Buildbot]
Для этой тестовой сборки мы оставим поля пустыми и нажмем кнопку «Начать сборку» во всплывающем окне. Обратите внимание, что если вы введете значение в поле «Ваше имя», оно должно содержать действительный адрес электронной почты.
Через несколько секунд сборка должна завершиться успешно:
изображение: https: //assets.digitalocean.com/articles/buildbot-install-ubuntu-1604/buildbot-success.png [снимок экрана, показывающий успешную сборку]
Вы можете изучить детали каждого шага в сборке, щелкнув число или стрелку рядом с его именем:
изображение: https: //assets.digitalocean.com/articles/buildbot-install-ubuntu-1604/buildbot-build-details.png [введите описание изображения здесь]
Возможно, вы заметили, что нам не нужно было входить в систему, чтобы выполнить эту сборку. По умолчанию любой может получить доступ к административным функциям, поэтому, прежде чем мы закончим, мы потратим немного времени, чтобы заблокировать его и создать учетную запись пользователя. Вы можете узнать больше о доступных опциях в [Документация авторизации Buildbot]. (Http://docs.buildbot.net/current/developer/authz.html).
Снова откройте файл + master.cfg +
:
nano ~/master/master.cfg
В нижней части файла добавьте следующие строки, изменив имя пользователя и пароль.
Файл: ~ / master / master.cfg
. . .
c['www']['authz'] = util.Authz(
allowRules = [
util.AnyEndpointMatcher(role="admins")
],
roleMatchers = [
util.RolesFromUsername(roles=['admins'], usernames=[''])
]
)
c['www']['auth'] = util.UserPasswordAuth({'': ''})
Когда вы закончите, запустите еще одну проверку синтаксиса для файла:
buildbot checkconfig ~/master
OutputConfig file is good!
Если ошибки не отображаются, перезапустите главную службу:
buildbot restart ~/master
Когда мы перезагружаем веб-интерфейс, в правом верхнем углу должна появиться ссылка «Аноним», и доступ к административным функциям больше не доступен.
изображение: https: //assets.digitalocean.com/articles/buildbot-install-ubuntu-1604/buildbot-anonymous.png [введите описание изображения здесь]
Мы проверим только что добавленные учетные данные, нажав «Аноним», после чего откроется окно входа в систему, в котором мы сможем ввести имя пользователя и пароль, которые мы настроили. Когда мы войдем в систему, мы увидим, что, хотя у «Anonymous» больше нет доступа для запуска сборки, наш пользователь «Sammy» делает это.
изображение: https: //assets.digitalocean.com/articles/buildbot-install-ubuntu-1604/buildbot-sammy.png [введите описание изображения здесь]
На данный момент наша установка Buildbot завершена, и мы предприняли минимальный шаг для защиты интерфейса. Однако имя пользователя и пароль передаются в виде простого текста. В качестве следующего шага мы рекомендуем, прежде чем использовать Buildbot всерьез, чтобы вы обезопасили веб-интерфейс с помощью http://docs.buildbot.net/current/manual/cfg-www.html?highlight=reverse%20proxy#reverse-proxy- Конфигурация [обратный прокси].
Заключение
В этом руководстве мы установили и настроили мастер Buildbot и локального работника Buildbot на одном компьютере. Если вы оцениваете Buildbot, вы можете принять участие в http://docs.buildbot.net/current/tutorial/tour.html[Quick Tour проекта.
В противном случае перейдите к следующему учебному руководству, How для создания файлов системных модулей для Buildbot, чтобы разрешить система инициализации сервера для управления процессами Buildbot.