Agile и DevOps представляют собой современные практики разработки программного обеспечения. Кроме того, они получают признание и за пределами сферы разработки, адаптированные для использования в управлении проектами в разных компаниях.
DevOps и Agile бывает сложно разграничить, а также они не исключают друг друга. Поэтому сравнивать их, возможно, и не совсем корректно, но любопытно.
На базовом уровне DevOps — это работа в связке двух команд (разработка и ИТ-инфраструктура) для обеспечения более мощного и эффективного процесса разработки программного обеспечения. DevOps — это про изменение культуры, направленное на стимулирование сотрудничества между разработчиками программного обеспечения и ИТ-подразделениями.
Agile — это серия методологий итеративной разработки, предназначенных для повышения управляемости и улучшения совместной работы в реалиях постоянно меняющихся условий и потребностей. Суть гибкой разработки заключается в том, чтобы дать разработчикам общий набор принципов для принятия решений и обеспечения большей скорости реагирования на изменения.
И Agile, и DevOps нацелены на улучшение процессов разработки, хотя и используют разные подходы.
Но каковы более глубокие различия между ними? Возможно ли внедрять их вместе? Постараемся раскрыть тему далее в статье.
Что такое Agile?
Agile — это итеративный подход к разработке программного обеспечения, который ориентирован на совместную работу и быстрые релизы. Это набор ценностей и принципов, которые можно использовать для принятия решений.
Когда дело доходит до Agile, трудно привести более емкое определение, чем приведенное в манифесте, который был написан в 2001 году. В нем говорится:
Занимаясь разработкой и помогая в этом другим, мы открываем лучшие практики. Мы пришли к выводу, что:
— Люди и взаимодействие важнее процессов и инструментов;
— Рабочее программное обеспечение важнее, чем исчерпывающая документация;
— Сотрудничество с клиентами важнее, чем переговоры по договору;
— Гибкое реагирование на изменения важнее, чем следование изначальному плану.
То есть, в то время как вещи справа имеют ценность, вещи слева мы ценим больше.
Манифест сопровождается 12 принципами Agile, которые помогают принимать лучшие решения. В кратком изложении они выглядят так:
- Наивысший приоритет — удовлетворение потребностей заказчика благодаря оперативным поставкам ПО.
- Изменение требований приветствуется даже на поздних стадиях разработки.
- Работающий продукт следует выпускать как можно чаще.
- На протяжении всего проекта разработчики и представители бизнеса должны ежедневно работать вместе.
- Над проектом должны работать мотивированные профессионалы.
- Непосредственное общение является наиболее эффективным способом обмена информацией.
- Работающий продукт — основной показатель прогресса.
- Инвесторы, разработчики и пользователи должны иметь возможность поддерживать постоянный ритм.
- Постоянное внимание к техническому совершенству и качеству проектирования повышает гибкость проекта.
- Простота — искусство минимизации лишней работы — крайне необходима.
- Самые лучшие требования, архитектурные и технические решения рождаются у самоорганизующихся команд.
- Команда должна систематически анализировать процессы и соответственно корректировать стиль работы.
Каковы преимущества Agile-разработки?
- Гибкость — более быстрое реагирование на изменения рынка и обратную связь от клиентов.
- Качество — фокус на тестировании и постоянное вовлечение клиентов в процесс повышает шансы выпуска высококачественного продукта.
- Сотрудничество. Agile — это про людей. Придавая значение в первую очередь именно человеческому взаимодействию, а не формальным процессам и «так принято», организации могут позволить сотрудникам действовать, опираясь на свой опыт и общий набор ценностей.
- Удовлетворенность клиентов. Держа акцент на быстрое обнаружение и устранение проблем и прямую связь между клиентами и разработчиками, клиенты с большей вероятностью будут удовлетворены и вернутся снова.
- Предсказуемость. Отказавшись от крупных планов, высеченных в камне и часто оторванных от реальности, организации могут получить лучшее представление о том, что идет хорошо, а что не работает — сразу, а не через несколько месяцев, когда исправлять все уже слишком поздно.
Что такое DevOps?
Термин происходит от сокращений: software development (dev) и IT operations (Ops). DevOps — это не просто процесс. Это сдвиг в корпоративной культуре в сторону сотрудничества между командами разработки и инфраструктуры. Ведь усилив автоматизацию и установив все необходимое программное обеспечение, в одиночку все равно не справиться. Поэтому как и в Agile, ключевым компонентом здесь являются люди.
AWS предлагают такое определение модели DevOps:
DevOps — это сочетание культурной философии, практики и инструментов, которое повышает шансы организации предоставлять продукты и услуги с высокой скоростью. Это позволяет организациям лучше обслуживать своих клиентов и более эффективно конкурировать на рынке.
Зачем соединять разработку и IT operations?
Как эти две группы объединились в одну? И зачем их совмещать?
Когда-то IT отделы были отделены от команд разработчиков. Затем люди из сообществ разработки и эксплуатации поняли, что есть некоторые проблемы в том, как эти команды были структурированы и как они взаимодействовали (или не взаимодействовали). Какие были препятствия:
- команды преследовали разные цели;
- имели разные показатели эффективности;
- были физически разнесены по разным комнатам, зданиям или офисам.
Наконец, они заговорили. Так родились DevOps и DevOps-инженеры.
Патрик Дебуа, которого часто называют крестным отцом DevOps, собрал эти группы на конференции DevOpsdays в 2009 году, где им удалось обсудить способы преодоления разрыва между двумя областями. Сейчас тысячи предприятий уже адаптировались или работают над внедрением этих практик.
Концепции и ключевые термины DevOps
- Контейнер — легкая автономная исполняемая часть программного обеспечения. Он включает в себя все необходимое для запуска ПО.
- Непрерывная доставка (CD) — непрерывный выпуск программного обеспечения в производство вручную или автоматически. Ориентирован на новые циклы. Некоторые организации выпускают новую версию с любыми изменениями.
- Непрерывная интеграция (CI) — текущее программирование, построение и тестирование кода. Это делается до того, как передать его системе непрерывной доставки (CD) для развертывания. Вместе с CD он составляет CI / CD.
- Инфраструктура как код (IaC) — определение инфраструктуры, которая используется с программным кодом, который может быть понят облачными службами. Затем эти облачные сервисы создают инфраструктуру на основе этого кода. Это позволяет вам определять стандарты и повторно использовать код, что экономит время.
- Микросервисы — архитектура приложения, разбитая на несколько небольших частей. Контейнеры часто используются для развертывания микросервисов.
- Конвейер (pipeline) — набор связанных процессов, где выходные данные одного процесса являются входными данными для следующего.
- Бессерверная система — запуск службы или микросервиса в облачной инфраструктуре, не беспокоясь о серверах, на которых выполняется код. Вы просто предоставляете код, а облачный провайдер запускает его и выдает результаты.
- Модульное тестирование (или юнит-тестирование) — разбиение приложения на мелкие части для проверки работы каждой функции.
Какие есть инструменты DevOps?
Вот некоторые из самых популярных инструментов DevOps CI / CD, которые можно использовать при работе в облачной среде AWS.
- Git — бесплатная система контроля версий с открытым исходным кодом. Она поддерживает ветвление, позволяя работать над функциями отдельно, не позволяя запутываться в коде.
- GitHub — онлайн-сервис для размещения репозиториев Git. GitHub принадлежит Microsoft, которая предлагает аналогичный инструмент под названием Azure DevOps.
- AWS CodeCommit — управляемый сервер для размещения репозиториев Git. Он безопасен и зашифрован, отличается высокой доступностью и легко интегрируется с другими сервисами AWS.
- AWS CodeBuild — управляемый код непрерывной интеграции, который выполняет код, выполняет тесты и создает программные пакеты. Когда разработчики пишут код и помещают его в Git, CodeBuild компилирует этот код и создает программный пакет. Он автоматически масштабируется и может обрабатывать несколько сборок одновременно.
- AWS CodeDeploy — управляемая служба развертывания, которая берет пакет программного обеспечения (или файлы, которые вы обновили и поместили в репозиторий Git) и развертывает на AWS или на локальных серверах. Он хорошо интегрируется с сервисами AWS и вашими собственными серверами. Он полностью автоматизирует развертывание программного обеспечения, исключая ручные операции, связанные с ошибками.
- AWS CodePipeline — управляемая служба непрерывной доставки, которая помогает автоматизировать конвейер выпуска. Он может автоматизировать этапы сборки, тестирования и развертывания разработки программного обеспечения, а также может интегрироваться с CodeCommit и GitHub.
Другие распространенные инструменты DevOps включают: Docker, Jira, Jenkins, Puppet, Chef, Splunk, Ansible, Kubernetes, Bamboo и Nagios.
Развить навыки DevOps-инженера можно на курсах:
- DevOps практики и инструменты
- Экспресс-курс “IaC Ansible”
- Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
- Инфраструктурная платформа на основе Kubernetes
Прокачаться в управлении проектами можно здесь: