Три года назад я писал статью на хабре «Моя эпопея настройки автодеплоя: ошибки и открытия». Тогда я думал, что разобрался с 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 иногда не правильно реагирует на завершение сборки с ошибкой и может отправлять сообщение об успехе. Ну и нет встроенных веб-хуков для отправки сообщений об успехе. Умельцы пишут отдельные плагины, один из таких я и использую.
Хотите узнать точную стоимость для вашего проекта? Проведём бесплатный аудит ваших процессов и покажем, как выглядит разработка CRM именно для вашего бизнеса.
Обсудить проект