Читать первым в Telegram-канале «Код Дурова»
Разработка программного обеспечения требует больших денежных вложений. Чтобы хорошо зарабатывать на продуктах, нужно оперативно выпускать их на рынок и вносить изменения по запросу пользователей. Сделать это поможет автоматизация процессов с помощью DevOps.
Зачем нужна методология DevOps
Прежде чем клиент сможет воспользоваться готовым IT-продуктом, над ним трудится команда специалистов:
- программисты пишут код;
- тестировщики проверяют, насколько правильно код работает;
- администраторы размещают код на сервере, чтобы он стал доступен клиентам.
У этого алгоритма разработки есть проблема: все этапы разделены, поэтому взаимодействие между командами налажено слабо:
- программистам неважно, что будет с кодом, когда они его напишут;
- тестировщики могут проверять старую версию кода и терять время, если программисты забудут передать им новую версию;
- разные настройки программы у тестировщиков и администраторов приводят к тому, что установленный код выдаёт ошибку или делает не то, что надо.
А ещё разработка идёт медленно, потому что задачи между программистами, тестировщиками и администраторами перекидываются группами, а не в потоке. Например, администраторы передают разработчикам жалобы от пользователей не по мере поступления, а сразу пачками. Программисты не отдают код тестировщикам, пока не доработают сразу всё. Из-за этого проходит много времени между моментом, когда баг нашли и когда его исправили.
Чтобы максимально сократить этот срок, придумали DevOps. Согласно этой методологии, программисты, тестировщики и админы — это кросс-функциональная команда. Все её члены при разработке IT-продукта тесно взаимодействуют, а не сосредотачиваются исключительно на своих задачах, как это было раньше.
6 этапов работы по методологии DevOps
1. Сбор требований и проектирование. Менеджер собирает всю необходимую информацию от заказчика и устанавливает ограничения: бюджет, дедлайн, критерии оценки ПО. В проектировании участвует вся команда, т. к. программисты, тестировщики и администраторы лучше понимают время разработки и шаги, на которые её нужно разделить.
2. Разработка. Команда создаёт среду и конвейер CI/CD, в которых будет происходить разработка продукта. Программисты пишут код, скрипты и системы для версирования, управления проектом, мониторинга. Админы и тестировщики настраивают кластеры. Работа над продуктом строится так, чтобы его можно было запускать постепенно, отдельными модулями. Члены команды работают параллельно, поэтому время не тратится впустую.
3. Запуск конвейера CI/CD. После того как программисты написали часть кода, они запускают скрипты, которые подготовили и автоматизировали на прошлом этапе. Благодаря скриптам код становится программой. Также скрипты компилируют код в пакеты, управляют версиями, отсылают его на тестирование и мониторинг.
4. Автоматическое тестирование. Написанный с помощью скриптов код проверяет автотест. Его главное преимущество — код с ошибками не уходит в сборку и не попадает в работающий продукт. Например, в программу добавили новую функцию. Выяснилось, что она конфликтует с другой, которая вроде бы не имеет к первой никакого отношения. Автотестирование не пропустит этот баг.
Если коду нужны незначительные доработки, после устранения ошибок его ещё раз проверяют автотестом и отправляют на рабочие серверы. Если ошибки серьёзные, то исправленный код отдают тестировщикам для ручной проверки.
5. Непрерывное развёртывание. Когда конфигурации протестированы, автоматические скрипты сразу отправляют их развёртываться на «боевых» серверах. Если в коде есть ошибки, их можно постепенно исправлять и постоянно развёртывать мелкие обновления — приложение заработает правильно.
6. Постоянный мониторинг. После того как приложение отправляется на сервер, оно попадает в распоряжение систем мониторинга. Они проверяют, насколько правильно функционирует продукт: записывают ошибки в тестовые файлы, сообщают о проблемах, автоматически перезагружают и выключают функции с неполадками.
Рабочие инструменты DevOps-инженера
Облачные сервисы. В DevOps используют IaaS и PaaS:
- IaaS — это виртуальные серверы, хранилища, сети, с помощью которых можно расширить собственные мощности. Например, увеличить объёмы памяти рабочего сервера на время распродажи.
- PaaS — готовые инструменты для хранения информации, разработки, развёртывания ПО. Например, разработчикам не нужно создавать базу данных — её можно приобрести у провайдера, загрузить туда данные и работать.
Система контроля версий. Например, SVN. Она позволяет хранить и совместно пользоваться файлами проекта и кодом.
CI/CD-системы. Например, TeamCity, CircleCI и Semaphore, которые непрерывно интегрируют и развёртывают ПО во время разработки.
Инструменты для управления инфраструктурой как кодом (IaC). Например, Chef и Puppet. Они автоматизируют развёртывание инфраструктуры, выявляют проблемы в конфигурации, обеспечивают быстрое восстановление после сбоев. За счёт того, что ресурсы всегда развёртываются одинаково, инфраструктура менее уязвима.
Системы оркестрации контейнеров. Например, Nomad и Kubernetes. Оркестраторы позволяют управлять контейнерами, непрерывно доставлять код, оперативно развёртывать конфигурации приложений для теста и запуска на «боевых» серверах.
Запомнить
1. DevOps — это подход к разработке, при котором все этапы работы над продуктом идут не один за другим, а одновременно.
2. Разработка в DevOps делится на 6 этапов: от проектирования до развёртывания и мониторинга.
3. Такой подход позволяет существенно сократить время работы, ускорить релизы, избежать ошибок при тестировании и запуске, сократить расходы на разработку.