Мне хотелось развернуть систему непрерывной интеграции, кросс компилирующую CMake проект написанный на c++ с OpenGL на Raspberry PI. Заодно я хотел посмотреть, не появились ли удобные серверы автоматической сборки, не содержащие в себе питона и не потребляющие сотни мегабайт ram в простое. Одна из целей написания статьи — узнать, не прошёл ли я мимо более хорошего или простого решения :) TLDR: drone классный, позволяет добавить простенький файл в корень репозитория на github/bitbucket — и получить автоматические билды/тесты/деплой. Прямо как в Travis, но self-hosted. Отправившись в гугл я узнал, что билд серверов удовлетворяющих моим нехитрым требованиям всего два:  Я остановился на drone.io. Выбирал по описанию, объективно сравнивать не могу.  У drone есть две версии, 0.4 и 0.5. 0.5 — это бета, выглядит немного симпатичней, но принципиально новых фичей я для себя не нашёл. Единственный баг в 0.4 исправленный в 0.5 на который я наткнулся — можно случайно через UI лишить себя флажка Administrator.  Документация по ссылке http://readme.drone.io/ — по версии 0.4. Для 0.5 — http://readme.drone.io/0.5/. Из неочевидных нюансов — drone работает с одним из поставщиков репозиториев, таких как github, bitbucket, gogs. Причём один инстанс drone может работать только с одним источником. Это исправляется запуском нескольких независимых серверов drone, благо в простое они не тратят лишние ресурсы.
В моём случае — один drone смотрит в bitbucket, один — в gogs запущенный на том же сервере. Я запускал drone через docker образ, выглядит это так:  Запуск: И всё :)  Так выглядит drone после установки на сервер:
 По нажатию на кнопке drone отправиться за разрешениями в bitbucket, и при успехе покажет все репозитории доступные аккаунту:
 Изначально во вкладке Active будет пусто, все репозитории будут в Available. Вот такая кнопка включения есть для каждого битбакет репозитория:  Теперь самое интересное, сам процесс сборки :)  Процесс сборки в drone настраиваеться крайне просто. В корне активного репозитория должен быть файл .drone.yml, описывающий как же именно собирать и деплоить содержимое репозитория. Задаётся тэг докер образа, в котором будет происходить сборка и команды для сборки. Весь .drone.yml для raspberry выглядит так:  Самым сложным для меня местом было создание докер-образа, могущего в кросскомпиляцию для Raspberry. В интернете есть много готовых, я же сделал свой (в основном что бы поглядеть, что это за докер вообще такой). Выглядит он примерно так:  Это содержимое моего Dockerfile, для того что бы создать полноценный образ, используемый для сборки — нужно положить его в одну директорию к /usr, /lib, /opt взятых с настоящего Raspbian'a и файлом Toolchain-RaspberryPi.cmake после команды docker build . -t notfl3/cross_raspberry_pi drone запущенный на том же сервере сможет воспользоваться этим образом и собирать наши билды.  Сама кросскомпиляция происходит согласно правилам CMake'а, единственный нюанс — я прописал свой Toolchain.cmake файл для gcc из raspberry-tools, выглядит он так:  С помощью этих нехитрых манипуляций я смог получить работающих билд с glfw окном для raspberry, быстро собирающийся на внешнем выделенным сервере.  Собирается, удивительно!