Моя эпопея настройки автодеплоя: ошибки и открытия
С развитием моей веб-студии и ростом количества проектов, мне, как руководителю проектов, задачи стало выполнять сложнее. Сложнее стало и успевать за всем следить: что-то удалось делегировать, но все-таки некоторые задачи остались на мне и требовали вмешательства, а то и непосредственного участия. Например, размещение исходного кода на сервере и загрузка правок все еще за мной.
Вы сейчас закономерно заметите: “А чего ж ты сразу не сделал автодеплой? Там же все просто!”.
Пока было не в напряг, я заливал всё сам, оправдывая это тем, что я слежу за процессом и в случае чего смогу оперативно отреагировать.
Да-да, пайплайны падают - карван (деплой) останавливается, теперь знаю. Да и тогда тоже знал, но что-то меня останавливало... И вот, когда работы, связанной с загрузкой изменений на сервер стало намного больше, чем я мог переварить (у некоторых проектов по 3 окружения), я решился на автоматизацию.
Каков логичный первый шаг, если хочется сделать быстрее и не погружаться в литературу очень глубоко?
Нанять человека (девопса)
Чем, собственно, я и занялся. Мы хоть и гордая студия, но пока не сильно богатая, поэтому пошел чуть ниже середины рынка девопс специалистов. Нашел первого кандидата через знакомых, горящего желанием все сделать. Было маленькое но: он был самоучкой. В итоге он перегорел через недели 2 и перестал отвечать. Показывал результат на виртуалке, поднятой у себя на компе, но дальше не двигалось.
Справедливости ради скажу, что помимо автодеплоя, у него были другие задачи, но приоритетом был мониторинг и автодеплой. На них то он и завалился.
Поэтому я решил искать не столько самоучек, сколько обученных самоучек (то есть тех, кто обучался на курсах).
И нашел! Свежий специалист, только с обучения. Девушка так же горела желанием и показывала результаты на виртуалке, но до сервера толком не добралась. Точнее добралась, но завести там ничего не смогла. Мы с ней вместе читали доки, я скидывал ей видосы, но результата не было. Это не все примеры, но суть отражающие.
Мораль 1: не скупитесь на человеческие ресурсы
(да-да, и ежу понятно, но мы все учимся на ошибках)
Следующий шаг: хочешь, чтобы что-то было сделано хорошо - сделай сам.
В итоге я решил изучать вопрос самостоятельно. Полез в документацию Gitlab, почитал, полез на образовательные порталы, в частности на Udemy.
Там и посмотрел курсы по Куберу. Понравилось, но сложно. Сложно, например, с точки зрения реализации всего этого и настройки.
Надо читать и изучать намного больше чтобы развернуть автодеплой в текущем виде. Кубер это все же уже про оркестрацию, и на него с этой точки зрения тоже есть свои планы (как раз пишем проект, в котором это очень сильно пригодится).
Ну и помимо сложностей в изучении и объеме информации, есть также финансовый вопрос, пока нет проекта, на котором действительно это все нужно, нет смысла тратиться на большую инфраструктуру серверов.
Далее решил идти в воркшопы по настройке автодеплоя и работе с Gitlab. Найти воркшоп было непросто и сделал я это небыстро, но сделал. После долгого гуглежа меня начала догонять реклама и там предлагали посмотреть мастер классы и воркшопы. Я этим не ограничился, и сам на том же Youtube нашел много разных записей.
Кстати, часто воркшопы не заканчиваются успехом, но из каждого можно почерпнуть полезные штуки (хоть в итоге у демонстрирующего ничего и не завелось). Например, посмотрев воркшоп, я отдельно вытащил работы с переменными окружения, осознал разбивку на стадии, открыл для себя, что их можно делать параллельно, хотя раньше такого не встречал (видел только линейные).
Собрав информацию по кусочкам, я решил попробовать самостоятельно. И оказалось, что ничего сложного в этом нет.
Сначала занялся простой загрузкой мастера, потом разбил на окружения.
В ход пошел запуск в докере и отдельные пайплайны на применение миграций, выполнение тестов, в том числе линтер. Переменные окружения мне удалось победить не сразу, но с помощью костылей и какой-то матери (привет фанатам анекдот.ру) у меня получилось. Костыли, конечно, я исправлю, для этого взял отдельный сервер и на нем пишу новые инструкции, отлаживаю деплой.
Мораль 2. все не так уж и страшно и сложно, как кажется на первый взгляд
Теперь наш ПМ может без меня сливать задачи на тестовое окружение, что ускоряет работу команды и освобождает меня от большого количества мелких задач. Автоматизировав этот пласт работы (вернее сказать пластик, но в большом количестве единиц), мы сильно ускорили процессы в команде и цикл прохождения задачи.
Насколько ускорили? Рассказываю.
Например, раньше, чтобы залить решение на сервер, мне нужно было:
Зайти на сервер
Зайти в папку
Активировать окружение
Слить исходники
Применить миграции
Перезапустить необходимые службы.
А еще же ревью. Часть ревью я с себя снял тестами в процессе деплоя, часть проверок на то, что проект запускается и работает, я снял теми же самыми процессами, итого на каждую задачу экономии получилось 15-20 минут.
Исключили фактор человеческой ошибки и отсекли те задачи, которые роняют проект при запуске. Также отсекли этап применения миграций, таким образом разработчик видит, что на миграциях закосячил он. Например, появились конфликты миграций между его и рабочей ветками, и теперь он знает без ревьюера, что и где нужно исправить.
Мораль 3: автоматизация - наше все
Предстоящий шаг: масштабирование. Эпопея еще не закончилась для меня и моей веб-студии :D
Изучая материалы, я почерпнул много интересного, в том числе про масштабирование.
Конкретно сейчас интересно, как можно будет автоматически отмасштабировать новый проект (делаем конструктор обучающих ботов), потому что нагрузка там предполагается довольно большая. Но это уже совсем другая история…
(если зайдет, я и ее расскажу)
Что касается технической части и сухой выжимки
Проекты на django+vuejs (SPA), иногда на чистом django (SSR)
Репозиторий gitlab.com, в совокупности с их gitlab-runner
Сервер Ubuntu 20.04
СУБД PostgreSQL
Переменные окружения хранятся в том же gitlab в переменных, но хочу их перевезти куда-нибудь и как-нибудь, как раз изучаю этот вопрос дополнительно.
Возможно,у вас есть советы и предложения, я с радостью ознакомлюсь.
Экономия времени: величина, стремящаяся к бесконечности :) От начала процесса поиска сотрудников и до успешного деплоя в автоматическом режиме прошло около полутора месяца. Причем месяц ушел на работу с людьми и их попытки все настроить. И остальные полмесяца у меня ушло на то, чтобы самому разобраться.
С учетом того, что задачи заливаются на тест постоянно, то я уже отбил затраченное время несколько раз.
А как у вас с автодеплоем? Расскажите свои истории в комментариях, может быть и тут я узнаю что-то новое.