Полный разбор DevOps (часть 2)

Сегодня поговорим об основных практиках и инструментах DevOps.

Технологический процесс по DevOps

В рамках DevOps технологический процесс идет рука об руку с автоматизацией и непрерывной работой над качеством продукта. Ниже его основные элементы.

  • Планирование (Planning) — получить требования, подготовить спецификации, спланировать ход совместной работы;
  • Разработка (Development) — создать и проверить архитектуру проекта;
  • Непрерывное тестирование (Continuous Testing) — проверять продукт и искать ошибки с помощью автоматизированных инструментов;
  • Непрерывная интеграция (Continuous Integration) — объединить и протестировать новую функциональность и предыдущую версию кода;
  • Непрерывный выпуск обновлений (Continuous Delivery) — показать проект и готовый к запуску продукт;
  • Непрерывное развертывание (Continuous Deployment) — запустить продукт и проследить, чтобы возможные изменения не ухудшали пользовательский интерфейс или работу сайта;
  • Мониторинг (Monitoring) — постоянно отслеживать ошибки;
  • Обратная связь (Feedback) — собрать отзывы клиентов и целевой аудитории, при необходимости добавить новые функции.

Практики DevOps 

Благодаря практикам DevOps можно автоматизировать множество рабочих процессов. Команды разработки и эксплуатации не связаны с планированием, но полезны на других этапах жизненного цикла проекта. Рассмотрим практики DevOps ниже.

Непрерывная интеграция

Основа гибкой разработки (agile development) — непрерывная интеграция. Разработчики обновляют код в центральном репозитории каждый раз после успешного теста. Непрерывная интеграция позволяет быстрее находить и устранять потенциальные проблемы, повышать качество ПО и быстрее выпускать обновления.

До введения этой практики каждый разработчик писал код отдельно, и результаты объединяли только в самом конце — процесс довольно трудоемкий и длительный.

При непрерывной интеграции разработчики регулярно проводят модульные тесты — они же юнит-тесты (unit tests) —  и загружают изменения в центральный репозиторий. Затем система управления версиями (version control system) автоматически проверяет, возможно ли безопасно интегрировать код в существующий репозиторий. Так постоянное обновление кода облегчает тестирование и снижает риски.

Автоматизированное тестирование

Самый быстрый способ проверки финальных сборок программ — автоматизированные тесты. Для модульного, интеграционного и UX-тестирования нужны разные инструменты, но главное — не нужен человек. Автотесты сразу выдают информацию об ошибках в сборке, и разработчики могут приступить к их исправлению, не дожидаясь результатов ручного тестирования (manual testing).

Непрерывный выпуск обновлений

Непрерывный выпуск обновлений нужен для быстрого развертывания в производственной среде без изменения существующей функциональности. В этом помогает оптимизация на ранних этапах процесса разработки.

Разработчик отправляет новую функцию на тестирование QA-инженерам. Тестировщикам проще работать с небольшими изменениями: тщательно их протестировать и написать тестовые примеры (write test cases). Далее — автотесты и проверка в ветви выпуска в системе управления версиями.

Непрерывное развертывание

Зачастую непрерывное развертывание и непрерывный выпуск обновлений не различают, хотя это разные практики.

Непрерывный выпуск обновлений — пользователи регулярно получают обновления.

Непрерывное развертывание — новые функции после тестирования можно сразу интегрировать в программу, минуя вмешательство DevOps-инженеров.

Для непрерывного развертывания подходит, например, Docker. Инженеры DevOps вносят изменения в контейнеры и вводят их в работу автоматически. Весь процесс занимает всего несколько минут, поэтому способствует непрерывному выпуску обновлений.

Однако постоянное переключение функциональности (feature toggling) может принести больше вреда, чем пользы. В случае с непрерывным развертыванием нужно опираться на потребности бизнеса и процессы внедрения новой функциональности.

Инфраструктура как код

Инфраструктура как код (Infrastructure as a Code (IaC)) или по-другому программируемая инфраструктура — это модель, в которой процесс конфигурации инфраструктуры аналогичен процессу программирования ПО.

Когда появилась эта модель, граница между написанием приложений и созданием сред для них стала размываться. В программах уже заложены скрипты, которые создают и используют виртуальные машины (ВМ). Это основа облачных вычислений и неотъемлемая часть DevOps.

Инфраструктура как код позволяет управлять ВМ на программном уровне без ручной настройки и обновлений для отдельных компонентов оборудования. Так инфраструктуру легко воспроизводить и масштабировать, она становится «эластичной». Один оператор может создавать и обслуживать как одну, так и 1000 машин, используя один набор кода.

Преимущества инфраструктуры как кода — скорость, экономичность и снижение рисков.

Инструменты DevOps

Хотя DevOps обязан своим успехом изменениям общей культуры производственного процесса, инструменты тоже важны. Ниже их краткий список:

  • Репозитории исходного кода (Git, CloudForce, TFS, Subversion);
  • Серверы сборки (SonarQube, Jenkins, Artifactory);
  • Инструменты управления конфигурацией (Puppet, Ansible, Salt, Chef);
  • Инструменты по автоматизации тестирования (Selenium, Water);
  • Облачные платформы (Amazon Web Services, Microsoft Azure, VMware vCloud).

 

Статью перевела: Бедретдинова Диана

Источник: https://dzone.com/articles/what-is-devops-complete-guide