Рассказываем, как делать успешные проекты еще быстрее
Современный мир диктует высокие требования: компании-разработчики должны создавать сложные продукты и должны создавать их максимально быстро. Действительно, сложность функциональности современного ПО во много раз выше аналогичного 10-летней давности, а первые результаты ожидаются иногда спустя две недели после начала работы над проектом.
В таком сложном режиме перед командой разработки стоит цель поддерживать одновременно в актуальном и правильном состоянии много разных процессов. На помощь приходит автоматизация процессов разработки. Её организует DevOps. DevOps (акроним от англ. development и operations) представляет собой набор операций и задач, которые помогают программному обеспечению быть максимально продуктивным.
Разделение программных окружений
Девопсами в компании называют программистов, которые не только вовлечены в разработку ПО и в курсе всех подробностей проекта. Они также выстраивают процессы взаимодействия, в том числе, сводят к нулю возможности недопониманий зон ответственности разных производственных групп, окружений.
В нашей компании принято создавать минимум 3 рабочих окружения:
- окружение разработки. В нем происходит основной процесс создания функционала. Оно максимально адаптировано для быстрой и удобной работы. А время программиста — один из самых важных и дорогих ресурсов при разработке. Окружение отличается скоростью сборки, разворачивания проектов для быстрого подключения нового специалиста, дополнительной функциональностью в проекте, которая существенно увеличивает скорость работы и незрима для клиента.
- окружение тестирования. В этом окружении работают наши QA-специалисты. Оно разворачивается на тестовых серверах (или, как мы их называем, стендах). QA-специалисты создают обширные коллекции данных с целью проверить максимальное количество возможных кейсов использования проекта. Окружение характеризует возможность быстрой генерации и сброса тестовых записей. Доступ к этим стендам имеют только QA-специалисты, разработчики, а также заказчики по желанию. Это окружение гарантирует качественное и быстрое тестирование проектов.
- продакшн окружение. Самое важное и ответственное в работе DevOps-специалиста - настроить правильно продакшн-окружение. Главная его задача — обеспечение максимальной защиты от взлома и гарантия целостности, консистентности данных. Продакшн-окружение — это то самое место, куда будут “стучаться” реальные пользователи, в котором стабильность работы стремится к бесконечности. Каждый хороший DevOps-специалист знает методы настройки продакшн-окружения на “боевых” серверах.
В зависимости от команды и задач проекта нами могут быть организованы еще несколько окружений: окружение автотестов, окружение стейджинга и т.д.
Почему это важно?
Год назад популярнейший сервис для размещения проектов GitLab фактически из-за плохой настройки окружений потерял продакшн базу проекта. Специалисты восстановили её, но сервис не был доступен несколько часов: огромный удар по репутации проекта.
Что произошло?
Настройка окружений предполагает предоставление соответствующих доступов специалистов к тем или иным файлам, командам или серверам. Логично, что правильная настройка продакшн окружения не должна позволять удалять простой командой базу данных. Этого у GitLab предусмотрено не было. В итоге программист случайно ввёл команду на удаление базы данных и части проекта. В случае, если бы настройка на невозможность удаления БД присутствовала в окружении, введённая программистом команда не привела к таким последствиям.
За многолетний опыт работы мы осознали, что настройка правильных окружений в самом начале проекта менее ресурсозатратна, чем решение проблем, связанных с потерей данных на реальных серверах.
Системы интеграции
Continuous delivery & Continuous integration (CD & CI) — две аббревиатуры, которые могут напугать заказчиков во время обсуждения работы над проектом, а молодых разработчиков-во время собеседования. На самом деле, в них нет ничего страшного.
CI & CD —это инструментарий и зона ответственности DevOps-инженера. Что это такое? Фактически, это среды реализации заранее запланированных задач, выполняемые в фоновом режиме. В рамках каждого стека технологий существует определённый набор действий, который требуется для качественной разработки. CI и CD позволяют автоматизировать эти действия.
CI помогает в ситуациях запуска и анализа автотестов. После обновления данное приложение самостоятельно забирает программный код, проводит проверку, сообщая о выявленных ошибках. В момент работы CI разработчик может заниматься дальнейшей разработкой, а приложение тестируется в фоновом режиме. Также могут быть запущены статические анализаторы кода, проверки интеграций и многое другое.
Приложение CD самостоятельно и в правильном виде выгружает готовый код на различные сервера для каждого окружения: тестирования, продакшена и т.д. Программист в это время продолжает работать над функциональностью, мы экономим ресурс — время разработчика.
Например, чтобы QA-специалист смог проверить работу проекта на тестовых стендах, которые имеют окружение тестирования, обновлённый код проекта следует загрузить на этот стенд и “собрать проект”. С этой задачей самостоятельно справляется CD.
CI&CD позволяют программисту сосредоточиться на быстром и качественном создании ПО. Они берут на себя всю рутину, связанную с разработкой и позволяют существенно сократить время реализации проекта.
DevOps —одно из слагаемых успеха программного продукта. Он делает возможным автоматизировать “ручной труд”, позволяя специалистам сосредоточиться на повышении качества и скорости релиза создаваемого проекта.