show

39

Drone.io или как мы автоматизировали доставку кода


Три года назад я писал статью на хабре Моя эпопея настройки автодеплоя: ошибки и открытия. Тогда я думал, что разобрался с CI/CD процессами и выстроил все как нужно

На тот момент стек был простой: django, vuejs, postgresql. Периодически добавлялись celery с redis.

Сейчас же стек значительно расширился. Минимальный набор выглядит следующим образом:
- django,
- vuejs/reactjs/nextjs,
- postgresql,
- celery,
- celery beat,
- redis,
- websockets.

Все это доставлялось на сервер с помощью gitlab-ci и спокойно там крутилось. Пока Gitlab не начал блокировать карты, аккаунты и закручивать гайки путем повышения тарифов на использование CI процессов

Оставался прекрасный вариант — установить коробку gitlab на сервер и пользоваться этим. Однако коробка жрет очень много ресурсов. Рекомендуемые параметры: от 8 гигов оперативной памяти (минимум 4, но на этих объемах контейнеры даже не собираются).

Решить эту головоломку мне помог один случай. Как-то я сидел в турецком автосервисе и ждал свою машину из ремонта. Там же сидел турецкий DevOps. У нас завязался разговор, в ходе которого он мне рассказал, что у них в банке все работает через связку из Jenkins + Gitea.

Меня это вдохновило, и я взялся за настройку такой связки. Всё получилось. Но сам по себе Jenkins предназначен для сборки и прогонки тестов, а не для доставки кода на сервер. Да, есть много проверенных плагинов, но все это выглядело очень громоздко.

В поисках решения проблемы с Jenkins я наткнулся на Drone.io. Слышал про него раньше от коллег, но как-то не обращал внимания. Видимо, пришел момент

Поразбиравшись с Drone.io, я понял, что это очень гибкий инструмент, который позволяет настраивать все, что угодно.

Так, с помощью простого синтаксиса и конфигурации yaml файлов у меня получилось настроить:
- сборку проекта,
- тестирование проекта,
- доставку проекта,
- отправку уведомлений в телеграм,
- получение статусов сборки в нашей системе контроля проектами.

Отдельно отмечу очень легкую интеграцию Drone.io с репозиториями. В качестве гит репозитория стали пользоваться Gitea. Максимально простое и отличное решение для использования в качестве коробки на собственном сервере. Иногда бывают проблемы с обновлением версий, но инструкции выкладывают очень быстро.

Я пока еще далеко не во всех тонкостях разобрался, и какие-то решения выглядят как костыли. По сравнению с тем, как все описано в документации. Да и вообще много чего хотелось бы улучшить. Но текущий подход решает все имеющиеся проблемы и работает довольно стабильно. При этом живет на сервере с 4 гигами оперативы и прекрасно себя чувствует при 3-5 сборках в один момент времени.

Из неудобств могу отметить хранение защищенных переменных окружения. Я привык, что в gitlab можно просмотреть, что было сохранено. Здесь же, если ты записал переменную, то она доступна только для публикации на сервере и в интерфейсе самого drone ты ее не можешь посмотреть

Также Drone.io иногда не правильно реагирует на завершение сборки с ошибкой и может отправлять сообщение об успехе. Ну и нет встроенных веб-хуков для отправки сообщений об успехе. Умельцы пишут отдельные плагины, один из таких я и использую.

Есть вопросы?

Хотите обсудить проект?

Напишите нам!