Полный разбор 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