Uploaded by Pavel Klevtsov

Методология DevOps

advertisement
Министерство науки и высшего образования Российской Федерации
Федеральное государственное автономное образовательное
учреждения высшего образования
«Национальный исследовательский технологический университет «МИСиС»
Кафедра бизнес-информатики и систем управления производством
Реферат
по дисциплине
«Системно-архитектурный подход к управлению IT-проектами»
на тему:
«Методология DevOps»
Направление подготовки:
09.03.03 «Прикладная информатика»
38.03.05 «Бизнес-информатика»
Профиль: Экономика
Профиль: Архитектура предприятия
Семестр 5
Выполнил:
Проверил:
Клевцов П.Р.
Куликовский М.А.
(Ф.И.О. студента)
(Ф.И.О преподавателя)
БПИ-21-5
______________
(№ группы)
(оценка)
_______________
______________
(дата сдачи)
(дата проверки)
Подпись:________________
Подпись:_______________
Москва 2023
Оглавление
ВВЕДЕНИЕ ....................................................................................................................................3
СОДЕРЖАНИЕ ..............................................................................................................................4
1
Основные принципы и методологии управления в DevOps ...........................................4
2
CI/CD конвейер ...................................................................................................................9
3
Инструменты реализации CI/CD.....................................................................................15
ВЫВОДЫ .....................................................................................................................................18
Список использованных источников .........................................................................................19
2
ВВЕДЕНИЕ
В современном мире информационных технологий, где быстрота реагирования на
рыночные изменения и эффективность производственных процессов играют ключевую
роль, методология DevOps занимает одно из центральных мест. Эта концепция, возникшая
на стыке разработки (Dev) и операционной деятельности (Ops), стала не просто модным
трендом, а необходимым инструментом в арсенале многих IT-компаний. Она представляет
собой культуру, набор практик и инструментов, которые увеличивают способность
организации доставлять приложения и услуги на высокой скорости: развивать и улучшать
продукты быстрее, чем организации, использующие традиционные процессы разработки
программного обеспечения и управления инфраструктурой. Такая динамика не только
обеспечивает конкурентное преимущество в современной бизнес-среде, но и способствует
лучшему взаимодействию и синергии между различными подразделениями организации.
Целью исследования методологии DevOps в данном реферате является всесторонний
анализ данного подхода как инструмента для повышения эффективности и гибкости
процессов разработки и эксплуатации программного обеспечения. Основное внимание
уделяется выявлению основных принципов, практик и инструментов, лежащих в основе
DevOps, а также рассмотрению того, как эти элементы способствуют улучшению
взаимодействия между разработчиками и операционными командами. Кроме того, целью
исследования является определение эффективности применения DevOps в различных
сферах IT-индустрии, анализ его влияния на ускорение процессов доставки продуктов,
улучшение качества и надежности программного обеспечения, а также оценка
преимуществ и возможных ограничений данного подхода.
В данном реферате будет рассмотрена сущность методологии DevOps, её ключевые
особенности, а также анализируются методологии управления и реализации проектов,
применяемые в рамках этого подхода. Кроме того, будет изучена применимость DevOps в
различных типах проектов и организаций, выявляя сферы, где данный подход является
наиболее эффективным, и ситуации, в которых его применение может быть
нецелесообразно.
3
СОДЕРЖАНИЕ
1
Основные принципы и методологии управления в DevOps
DevOps, сокращение от "Development" (разработка) и "Operations" (операции),
представляет собой культурный и профессиональный подход, который подчеркивает
коммуникацию, сотрудничество и интеграцию между разработчиками программного
обеспечения и IT-специалистами. Основная цель DevOps заключается в сокращении
времени цикла разработки, повышении частоты доставки продуктов и обеспечении более
стабильной и надежной операционной среды. Этот подход стремится автоматизировать и
оптимизировать процессы, традиционно относящиеся как к разработке, так и к
эксплуатации, что в конечном итоге ведет к более быстрой и качественной доставке
продуктов и услуг.
Основные понятия, связанные с DevOps, включают:
Непрерывная интеграция (Continuous Integration, CI): Практика частой интеграции
изменений кода в общую кодовую базу, что позволяет раннее обнаружение и устранение
ошибок, а также снижение конфликтов при слиянии изменений.
Непрерывное
развертывание
(Continuous
Deployment):
Автоматическое
развертывание всех изменений кода в тестовую или производственную среду после
прохождения этапа CI. Это позволяет быстрее получать обратную связь от пользователей и
сокращает время, необходимое для доставки новых функций.
Непрерывное тестирование: Автоматизация тестирования на всех этапах процесса
разработки для обеспечения качества и быстрого обнаружения ошибок.
Инфраструктура как код (Infrastructure as Code, IaC): Управление и настройка
инфраструктуры через код, что обеспечивает большую эффективность, стабильность и
надежность системы.
Автоматизация и мониторинг: Непрерывное наблюдение за производительностью
приложения и инфраструктуры с целью предотвратить проблемы или быстро реагировать
на них.
Культура сотрудничества: Создание среды, где разработчики и операционные
команды тесно сотрудничают, обмениваются знаниями и улучшают рабочие процессы.
DevOps, сокращение от "Development" (разработка) и "Operations" (операции),
представляет собой культурный и профессиональный подход, который подчеркивает
коммуникацию, сотрудничество и интеграцию между разработчиками программного
4
обеспечения и IT-специалистами. Основная цель DevOps заключается в сокращении
времени цикла разработки, повышении частоты доставки продуктов и обеспечении более
стабильной и надежной операционной среды. Этот подход стремится автоматизировать и
оптимизировать процессы, традиционно относящиеся как к разработке, так и к
эксплуатации, что в конечном итоге ведет к более быстрой и качественной доставке
продуктов и услуг. Этапы проекта описаны в таблице 1.
Таблица 1 – Основные этапы методологии DevOps
Этап
Планирование
Разработка и
тестирование
Непрерывная
интеграция и
доставка (CI/CD)
Развертывание и
эксплуатация
Мониторинг и
обратная связь
Описание
На этом этапе происходит определение требований, задач и целей проекта. В
рамках DevOps, планирование обычно более гибкое и адаптивное по сравнению
с традиционными методами. Планы регулярно пересматриваются в ответ на
обратную связь и изменения в требованиях
Разработка в DevOps часто происходит в коротких итерациях, позволяя быстро
интегрировать новые функции и исправления. Непрерывное тестирование на
этом этапе обеспечивает высокое качество кода и предотвращает многие
проблемы на более поздних стадиях.
Это ключевая часть процесса DevOps, включающая автоматическую интеграцию
изменений из разных веток разработки и их непрерывную доставку в тестовую
или производственную среду. Этот процесс позволяет быстро получать
обратную связь и вносить необходимые изменения
На этой стадии проект выходит в производство. Развертывание может быть
полностью автоматизировано, что позволяет ускорить процесс и снизить
вероятность человеческих ошибок. Эксплуатация включает мониторинг работы
системы и оперативное устранение возникающих проблем.
Постоянный мониторинг системы и сбор обратной связи от пользователей
играют важную роль в DevOps. Информация, полученная на этом этапе,
используется для улучшения проекта и планирования следующих итераций.
Теперь поговорим о каждом этапе более подробно для того, чтобы понять специфику
работы по рассматриваемой методологии.
Этап планирования в методологии DevOps имеет свои особенности и отличается от
традиционных подходов к планированию в управлении проектами. В DevOps планирование
не является одноразовым, строго фиксированным процессом; скорее, оно представляет
собой гибкий и динамичный процесс, который адаптируется к постоянно меняющимся
требованиям и условиям. Этот подход отражает основные принципы DevOps, такие как
гибкость, быстрая обратная связь и непрерывное улучшение.
В рамках планирования в DevOps основное внимание уделяется коротким
итеративным циклам разработки, что позволяет быстро реагировать на изменения и
включать новые требования или обратную связь от пользователей. В отличие от
традиционных методологий, где план проекта разрабатывается на начальном этапе и
остается относительно неизменным на протяжении всего проекта, DevOps предполагает
непрерывное планирование и пересмотр целей.
Процесс планирования в DevOps включает в себя не только определение
функциональности и задач, но и планирование процессов тестирования, интеграции,
5
доставки и развертывания. Это требует тесного взаимодействия между разработчиками,
тестировщиками, инженерами по эксплуатации и другими участниками команды. Такой
подход способствует лучшему пониманию и учету всех аспектов жизненного цикла
разработки продукта.
Для эффективного планирования в DevOps часто используются различные
инструменты и платформы, такие как Jira, Trello, Asana, которые позволяют управлять
задачами, отслеживать прогресс и взаимодействовать внутри команды. Эти инструменты
обеспечивают видимость текущего состояния проекта и помогают в координации работы
команды. Ответственность за планирование в DevOps лежит не на одном менеджере
проекта, как в традиционных подходах, а распределяется между всеми членами команды.
Этап разработки и тестирования в методологии DevOps характеризуется сильным
акцентом на автоматизацию, быстроту итераций и непрерывное улучшение. В DevOps
разработка программного обеспечения не происходит в изоляции; она тесно интегрирована
с тестированием и другими аспектами жизненного цикла программного продукта. Это
обеспечивает более высокое качество и надежность продукта, ускоряя при этом процесс
разработки.
Одной из ключевых особенностей разработки в DevOps является применение
практики непрерывной интеграции (CI). Разработчики регулярно и часто сливают свои
изменения в общую кодовую базу, обычно несколько раз в день. Каждое слияние
сопровождается автоматизированными тестами, что позволяет быстро выявлять и
исправлять ошибки, улучшая качество кода и ускоряя процесс разработки. Это
предотвращает накопление проблем и упрощает обнаружение и устранение ошибок на
ранних этапах.
Помимо непрерывной интеграции, большое внимание уделяется непрерывному
тестированию. В DevOps тестирование является не отдельной фазой, а непрерывным
процессом, происходящим параллельно с разработкой. Это включает в себя различные
виды тестирования: от модульного и интеграционного до нагрузочного и безопасности.
Автоматизация тестирования позволяет быстро получать обратную связь о качестве нового
кода и уверенно продвигаться вперед.
Этап развертывания и эксплуатации в рамках методологии DevOps отмечает переход
разработанного продукта из сферы тестирования в реальные условия эксплуатации в
производственной среде. Это время, когда усилия команды разработки и тестирования
воплощаются в жизнь, а продукт начинает своё активное функционирование. Особое
внимание на этом этапе уделяется не только техническому аспекту внедрения, но и
6
последующему управлению и поддержке продукта, обеспечивающим его стабильность и
эффективность в долгосрочной перспективе.
Процесс развертывания в DevOps обычно характеризуется высокой степенью
автоматизации. Это позволяет осуществлять непрерывное и бесперебойное внедрение
новых приложений и обновлений, минимизируя риски, связанные с человеческим
фактором. Такая автоматизация значительно ускоряет процесс доставки новых функций и
изменений конечным пользователям. В этом контексте широко используются инструменты,
такие как Jenkins для автоматизации процессов CI/CD, Ansible для управления
конфигурациями, а также Docker и Kubernetes для оркестрации контейнеров, что
обеспечивает эффективное и гибкое развертывание приложений в разнообразных средах.
После этапа развертывания наступает фаза эксплуатации продукта, когда основной
акцент смещается на управление и поддержку работающей системы. Ключевым моментом
здесь является быстрое реагирование на возникающие вопросы и проблемы, а также
оперативное и эффективное устранение неполадок для обеспечения непрерывной и
стабильной работы приложения.
Работа проектных менеджеров в контексте DevOps имеет свои уникальные задачи и
нюансы, обусловленные особенностями самой методологии. DevOps ориентирован на
гибкость, непрерывное улучшение и тесное взаимодействие между разработкой и
операционной деятельностью, что накладывает особые требования на роль проектного
менеджера.
Во-первых, проектные менеджеры в DevOps должны акцентировать внимание на
культуре сотрудничества. Они играют ключевую роль в обеспечении эффективного
общения между разработчиками, тестировщиками, инженерами по эксплуатации и другими
заинтересованными сторонами. Это необходимо для обеспечения плавности рабочих
процессов и ускорения принятия решений, а также для того, чтобы все участники проекта
имели четкое представление о целях и задачах.
Во-вторых, менеджеры в DevOps должны поддерживать и развивать гибкие
практики управления. В отличие от традиционного подхода к управлению проектами, где
планы и графики часто фиксированы, DevOps требует более адаптивного и гибкого
подхода. Это означает, что менеджеры должны быть готовы к быстрым изменениям в
проекте и способны управлять проектом в условиях неопределенности и изменчивых
требований.
Третья важная задача проектного менеджера в DevOps – это поддержка
непрерывного процесса улучшения продукта. Это включает в себя управление обратной
связью от пользователей и клиентов, а также анализ данных о производительности и
7
использовании продукта. На основе эчтой информации менеджеры должны инициировать
необходимые изменения в продукте и процессах, улучшая тем самым качество и
эффективность.
Кроме того, менеджеры в DevOps должны иметь глубокие знания в области IT и
новейших технологий. Это необходимо для понимания технических аспектов проектов,
которыми они управляют, и для эффективного взаимодействия с техническими командами.
В рамках методологии DevOps руководство проектов использует ряд эффективных
подходов и практик для решения задач, связанных с гибкостью управления, коммуникацией
между командами и непрерывным улучшением продукта. Эти подходы основаны на
реальных
практиках
и
успешных
кейсах
проектов
DevOps,
демонстрирующих
значительные улучшения в процессах разработки и эксплуатации программного
обеспечения.
Прежде всего, важным аспектом управления является применение гибких методик,
таких как Scrum или Канбан, которые позволяют проектным менеджерам эффективно
адаптироваться к изменениям и организовать работу команды в коротких итерациях
Для непрерывного улучшения продукта руководители DevOps-проектов часто
применяют методики Lean и принципы непрерывного улучшения. Это включает в себя
анализ производительности и использования продукта, идентификацию "узких мест" и
проблемных областей, а также разработку планов по их оптимизации. Руководители также
активно вовлекают команды в процесс идентификации возможностей для улучшения, что
способствует культуре инноваций и постоянного развития.
Важной практикой в DevOps является также автоматизация рутинных и
повторяющихся задач. Это уменьшает вероятность ошибок и освобождает время команды
для работы над более сложными и творческими задачами. Автоматизация может
охватывать различные аспекты проекта, включая тестирование, развертывание и
мониторинг.
Наконец, руководство DevOps-проектов уделяет внимание изучению и применению
новых технологий и инструментов, которые могут улучшить эффективность и
результативность работы. Это включает в себя облачные технологии, контейнеризацию,
инструменты для управления конфигурациями и многое другое.
Несмотря на сложность ведения такое гибкой разработки со стороны планирования
и менеджмента, основная роль в таком подходе уделяется технологиях. В следующей главе
мы разберем более детально составляющие конвейера по интеграции и доставке продукта,
эффективность которого как-раз основывается на применении специализированных
технических средств.
8
2
CI/CD конвейер
В контексте инфраструктуры и методологии DevOps, «pipeline» (конвейер)
относится к автоматизированному процессу, через который проходит разработка и
развертывание программного обеспечения. Этот процесс включает в себя различные этапы,
начиная от написания кода и заканчивая его развертыванием в производственной среде.
Pipeline обычно состоит из ряда последовательных шагов, таких как непрерывная
интеграция, автоматизированное тестирование, непрерывное развертывание и мониторинг.
Это позволяет ускорить процесс доставки новых функций и обновлений, сокращает время
выхода продукта на рынок и повышает его качество и надежность.
Для того, чтобы понять, что из себя представляет конвейерная разработки и CI/CD
необходимо разобрать в подходах, которые включает в себя методика непрерывной
интеграции и доставки.
IaC (Infrastructure as Code) в контексте DevOps — это подход к управлению и
провизии инфраструктуры IT, при котором инфраструктура управляется с использованием
кода и программных методов, аналогичных тем, что используются для управления
приложениями. Этот подход позволяет разработчикам и системным администраторам
автоматически управлять, настраивать и развертывать инфраструктуру, используя скрипты,
что значительно упрощает процессы развертывания и обслуживания систем. IaC
обеспечивает более быстрое, надежное и масштабируемое управление инфраструктурой,
снижая риск человеческих ошибок и улучшая консистентность сред.
Performance Monitoring (PM) в контексте DevOps представляет собой процесс
наблюдения и анализа различных аспектов работы системы, чтобы обеспечить её
эффективное функционирование и высокую производительность. Это включает в себя
мониторинг таких параметров, как использование ЦПУ, памяти, производительность сети
и дисковых систем на всех уровнях инфраструктуры - от физических серверов и
гипервизоров до виртуальных машин и контейнеров. Основная задача PM - не просто
отслеживать все системные метрики, а фокусироваться на ключевых показателях, которые
имеют решающее значение для производительности и стабильности системы, особенно в
условиях высоких нагрузок (high-load). Эффективный мониторинг подразумевает не только
сбор данных, но и их анализ, что позволяет оптимизировать работу системы и своевременно
реагировать на возникающие проблемы. Важно также настроить систему оповещений
таким образом, чтобы она информировала только тех ответственных лиц, которые
непосредственно занимаются данным аспектом инфраструктуры, избегая ненужных
оповещений для всей команды.
9
Application Monitoring (AM) в DevOps – это процесс наблюдения и анализа работы
приложений с целью обеспечения их надежности, эффективности и оптимизации
производительности. При таком подходе осуществляется мониторинг различных аспектов
приложений, включая время отклика, ошибки, использование ресурсов (например, ЦПУ и
памяти), а также пользовательский опыт и поведение. Это достигается путем сбора и
анализа данных о работе приложений в реальном времени, что позволяет оперативно
выявлять и устранять проблемы, а также проводить тонкую настройку приложений для
улучшения их работы и удовлетворения потребностей пользователей.
Business Monitoring (BM) в рамках DevOps представляет собой процесс и практику
отслеживания и анализа фактического получения прибыли компании, связанной с её
бизнес-операциями. Этот вид мониторинга не ограничивается лишь техническими
аспектами разработки и эксплуатации программного обеспечения, но сконцентрирован на
более широких бизнес-процессах.
Важность Business Monitoring проявляется в возможности более точного анализа и
прогнозирования количества реальных продаж в будущем. Он позволяет компаниям
следить за своей прибылью не только в текущем времени, но и анализировать данные о
продажах в прошлом (ретроспективный анализ). Благодаря этому, компании могут
принимать более обоснованные стратегические решения и корректировать свои бизнесоперации в соответствии с реальными трендами и результатами.
Кроме того, Business Monitoring включает в себя анализ различных аспектов,
которые могут влиять на продажи с точки зрения пользовательского бизнес-функционала.
Это включает внешних факторов, таких как поведение и потребности клиентов (например,
для интернет-магазина), а также внутренних факторов, связанных с эффективностью
операционистов и другими внутренними процессами (например, для операционных
центров клиентской поддержки).
Управление конфигурациями (Configuration Management, CM) - это практика и
процесс управления настройками и параметрами различных компонентов информационной
системы, включая как аппаратное, так и программное обеспечение. Целью управления
конфигурациями является обеспечение стабильности, надежности и эффективности работы
информационной системы путем контроля и управления её конфигурациями.
Ключевой
аспект
управления
конфигурациями
в
современном
контексте
заключается в автоматизации этого процесса. Это означает, что не только контуры
(инфраструктура), но и сами компоненты программного обеспечения должны иметь свои
конфигурации, которые управляются и обновляются автоматически. Это включает в себя
10
конфигурации
серверов,
настроек
логирования
и
мониторинга,
интеграционных
параметров, настроек авторизации, кеширования и многие другие.
Автоматизация
управления
конфигурациями
позволяет
избежать
ручных
вмешательств в конфигурации системы, что уменьшает риск человеческих ошибок и
облегчает масштабирование системы. Конфигурации могут быть вынесены изнутри
скомпилированных приложений и управляться через систему управления версиями
(репозиторий исходного кода) и с использованием скриптов развертывания.
Важным преимуществом управления конфигурациями через код и автоматизацию
является возможность быстро и гибко адаптировать систему к изменяющимся требованиям
и сценариям использования, а также обеспечивать более надежное и прозрачное управление
конфигурациями в различных средах (разработка, тестирование, продакшн и др.).
Непрерывная интеграция (CI) и непрерывная поставка (CD) в DevOps представляют
собой не только технологические инструменты, но и культуру, а также набор принципов и
практик, которые способствуют частой и надежной доставке изменений в программном
обеспечении. Эти процессы являются ключевыми компонентами DevOps, также тесно
связанными с agile-практиками. Они позволяют разработчикам сфокусироваться на
реализации бизнес-требований, улучшении качества кода и обеспечении его безопасности.
Рисунок 1 – CI/CD конвейер
CI как методология разработки подразумевает внесение небольших изменений в код
с частыми коммитами, что требует эффективного механизма интеграции и тестирования
вносимых изменений. Технически, цель CI заключается в обеспечении последовательного
и автоматизированного способа сборки, упаковки и тестирования приложений. Это
способствует улучшению коммуникации в команде и повышению качества ПО.
CI, или Continuous Integration (непрерывная интеграция), - это ключевой этап в
разработке программного обеспечения, который внедряется в методологии DevOps. Этот
процесс направлен на автоматическое интегрирование кода разработчиков в общий
11
репозиторий и выполнение серии автоматизированных тестов и сборок для обеспечения
качества и стабильности приложения. Вот как это работает в DevOps-пайплайне:
⎯
Разработка кода: Разработчики пишут новый код или вносят изменения в
существующий код для улучшения приложения.
⎯
Контроль версий: Код разработчиков хранится в системе контроля версий, такой как
Git. Это позволяет отслеживать изменения и управлять версиями приложения.
⎯
Непрерывная интеграция: Как только разработчик заканчивает работу над кодом,
этот код интегрируется в общий репозиторий. Это происходит автоматически при помощи
специальных инструментов для CI.
⎯
Сборка: После интеграции кода запускается процесс сборки, который компилирует
и собирает приложение. Это включает в себя компиляцию исходного кода, управление
зависимостями и создание исполняемых файлов или артефактов.
⎯
Тестирование: На этапе CI запускаются автоматизированные тесты, которые
проверяют функциональность и качество приложения. Это может включать юнит-тесты,
интеграционные тесты, тесты безопасности и другие.
⎯
Отчеты: Результаты тестирования и сборки фиксируются в отчетах, которые
предоставляют информацию о состоянии кода и его качестве.
⎯
Уведомления: В случае возникновения ошибок или проблем на этапе CI, система
автоматически уведомляет разработчиков, чтобы они могли оперативно реагировать и
исправить проблемы.
Функции CI в DevOps-пайплайне:
⎯
Обеспечение быстрого и автоматического интегрирования кода.
⎯
Гарантирование качества кода через автоматизированные тесты.
⎯
Оповещение о проблемах и ошибках в коде на ранних этапах разработки.
⎯
Ускорение процесса разработки.
⎯
Улучшение сотрудничества между членами команды разработки.
Повышение стабильности и надежности приложения.
Непрерывная поставка, начинающаяся там, где заканчивается непрерывная
интеграция, автоматизирует процесс развертывания приложений в различных окружениях,
включая как продакшн, так и среды разработки и тестирования.
Функционирование
Continuous
Integration
разнообразных программных средств и
(CI)
достигается
при
помощи
инфраструктуры, которые обеспечивают
автоматизированный процесс интеграции, сборки, тестирования и развертывания кода.
Ключевые компоненты и технологии, используемые в CI-инфраструктуре на проекте:
12
Система контроля версий (Version Control System - VCS): Начиная с этапа
разработки, разработчики используют VCS, такие как Git, для управления исходным кодом.
Git позволяет отслеживать изменения, ветвление кода, а также слияние изменений от
разных разработчиков.
Сервер CI/CD: Это центральное программное средство, которое управляет
процессом CI/CD. Популярные серверы CI/CD включают Jenkins, Travis CI, CircleCI, GitLab
CI/CD, и другие. Они следят за репозиториями кода, запускают сборки и тесты при
обновлениях кода и автоматически развертывают приложение.
Система сборки (Build System): На этом этапе используются инструменты, такие как
Maven, Gradle, или npm (для JavaScript проектов), чтобы автоматически собрать и
скомпилировать код в исполняемые файлы или артефакты.
Среда
тестирования
автоматизированные
(Testing
тесты,
включая
Environment):
юнит-тесты,
Это
место,
где
интеграционные
выполняются
тесты,
тесты
безопасности и другие. Для этого используются фреймворки и инструменты, такие как
JUnit, Selenium, или Postman.
Контейнеризация и оркестрация: Использование контейнеров, таких как Docker, и
оркестраторов, таких как Kubernetes, позволяет упаковать приложение и его зависимости в
изолированные среды, что облегчает развертывание и масштабирование.
Инфраструктура как код (Infrastructure as Code - IaC): Для управления
инфраструктурой используются инструменты IaC, такие как Terraform или AWS
CloudFormation. Они позволяют определять и управлять инфраструктурными ресурсами
через код.
Инфраструктура на проекте для реализации подхода CI включает в себя несколько
серверов и сервисов, взаимодействующих между собой:
⎯
Репозиторий кода: Здесь хранится исходный код проекта, например, на GitHub или
GitLab.
⎯
Сервер CI/CD: Этот сервер постоянно мониторит репозиторий кода на наличие
изменений. При обнаружении изменений, он автоматически запускает процесс CI.
⎯
Система сборки: Задачей этой системы является компиляция и сборка приложения
на основе кода из репозитория.
⎯
Среда тестирования: В этой среде выполняются автоматизированные тесты для
проверки работоспособности и качества приложения.
⎯
Контейнеризация и оркестрация: Контейнеры с приложением могут быть
развернуты в контейнерных оркестраторах для обеспечения масштабируемости и
управления.
13
⎯
Инфраструктура как код: IaC инструменты позволяют определять и управлять
инфраструктурными ресурсами, такими как серверы и базы данных, через код.
⎯
Уведомления и отчетность: Интеграция с системами уведомлений и генерация
отчетов помогают команде быть в курсе статуса сборок и возможных проблем.
В инфраструктуре DevOps компоненты тесно взаимодействуют для обеспечения
эффективного процесса разработки и доставки программного обеспечения. Репозиторий
кода, такой как GitHub или GitLab, хранит исходный код проекта. Сервер CI/CD, например
Jenkins, мониторит этот репозиторий на наличие изменений и автоматически запускает
процесс CI при их обнаружении. Система сборки компилирует и собирает приложение из
этого кода. Далее в среде тестирования выполняются автоматизированные тесты для
проверки приложения.
Контейнеризация и оркестрация, как правило с использованием инструментов вроде
Docker и Kubernetes, позволяют развернуть и масштабировать приложение в различных
средах. Инфраструктура как код (IaC), использующая инструменты вроде Terraform или
Ansible, дает возможность определить и управлять инфраструктурными ресурсами
программным способом.
Continuous Delivery (CD) на практике в методологии DevOps – это процесс, при
котором код автоматически собирается, тестируется и готовится к развертыванию в любую
среду, включая производственную. Этот этап вписывается в pipeline DevOps таким образом,
что после успешного завершения непрерывной интеграции (CI), где код интегрируется и
тестируется, следует фаза CD, в ходе которой происходит автоматизация всех шагов,
необходимых для развертывания приложения. Это позволяет командам быстро и надежно
выпускать новые версии продукта, сокращая время от разработки до доставки конечным
пользователям.
14
3
Инструменты реализации CI/CD
DevOps, отличаясь от многих традиционных подходов к разработке программного
обеспечения, выделяется своим акцентом на экосистему цифровых инструментов и систем.
Эта уникальная особенность не только способствует более тесной интеграции различных
процессов разработки и операций, но и значительно ускоряет циклы разработки, повышая
их эффективность. В DevOps инструменты играют решающую роль в создании бесшовных,
автоматизированных потоков работы, которые упрощают сотрудничество между
разработчиками, тестировщиками и IT-специалистами. Это обеспечивает не только более
быстрый вывод продукта на рынок, но и повышает качество и надежность конечного
продукта. При этом, ключевым элементом становится выбор правильных программных
продуктов для создания эффективного конвейера DevOps, включающего в себя все от
автоматизации тестирования до управления инфраструктурой и мониторинга. На рисунке 2
изображен
стек
технологий,
которые
возможно
использовать
при
реализации
инфраструктуры в рамках DevOps.
Рисунок 2 – Стек технологий DevOps
В этом разделе речь пойдет о тех программных средствах, которые наиболее часто
используются для создания CI/CD конвейера. Мы рассмотрим их роль в интеграции между
подразделения разработки и эксплуатации. Начнем с наиболее значимого и применяемомо
инструмента автоматизации CI/CD процессов – Jenkins.
Jenkins – это автоматизированная open-source система, используемая для
непрерывной интеграции и непрерывной доставки (CI/CD) в контексте методологии
DevOps. Она играет ключевую роль в автоматизации различных стадий разработки ПО,
включая сборку, тестирование и развертывание кода. Jenkins предоставляет интуитивно
понятный интерфейс для создания, тестирования и развертывания кода в различных средах,
15
что способствует ускорению процессов разработки и повышению их эффективности. С
помощью многочисленных плагинов, Jenkins обеспечивает гибкость и масштабируемость,
позволяя интегрировать различные инструменты и сервисы, необходимые в рамках
DevOps.
Git — это распределённая система управления версиями, широко используемая в
разработке программного обеспечения. Она позволяет разработчикам отслеживать
историю изменений кода, возвращаться к предыдущим версиям и эффективно
сотрудничать с другими участниками проекта.
Git позволяет разработчикам работать над разными частями проекта одновременно,
не мешая друг другу. Это достигается благодаря созданию "веток" — параллельных линий
разработки. Разработчики могут создавать, изменять и объединять ветки, не влияя на
основной код, что упрощает эксперименты и разработку новых функций. Он также
обеспечивает синхронизацию работы множества разработчиков. Система учитывает
изменения, внесённые каждым участником, и позволяет сливать эти изменения в основной
кодовой базе, предотвращая конфликты и потерю данных. интегрируется с инструментами
CI, такими как Jenkins, Travis CI и другими. Это позволяет автоматически тестировать код
при каждом коммите, гарантируя, что новые изменения не нарушают функциональность
системы, а также играет важную роль в CD, позволяя автоматически развертывать
проверенный код в производственную среду. Это ускоряет процесс внедрения новых
функций и улучшений, снижая риск ошибок при ручном развёртывании.
Docker — это платформа для разработки, доставки и запуска приложений с
использованием контейнеризации. Контейнеризация — это технология, позволяющая
упаковывать приложение и его зависимости в изолированный контейнер, который может
быть запущен в любой среде. Это устраняет проблему «работает у меня, но не работает у
вас», так как контейнер содержит все необходимое для работы приложения.
При непрерывной интеграции Docker обеспечивает консистентность среды
разработки, тестирования и производства. Поскольку каждый контейнер работает
изолированно и содержит свои зависимости, разработчики могут быть уверены, что
приложение будет работать одинаково в различных средах. Это упрощает интеграцию и
тестирование кода, так как устраняются расхождения между средами.
При
CD
Docker
позволяет
автоматизировать
развертывание
приложений.
Контейнеры можно легко переносить между различными средами и быстро запускать. Это
ускоряет процесс доставки приложений в производство и обеспечивает их надежность и
предсказуемость.
16
Также стоит отметить иные роли и задачи, которым соответствует Docker облегчает
масштабирование приложений. Контейнеры можно быстро размножать и распределять по
различным серверам. Также Docker интегрируется с оркестрационными системами, такими
как
Kubernetes,
что
позволяет
автоматизировать
управление,
развертывание
и
масштабирование контейнеризированных приложений. Каждый контейнер Docker
изолирован от других, что повышает безопасность. Изоляция предотвращает конфликты
между различными приложениями и упрощает управление зависимостями, также он
обеспечивает легкость в управлении версиями контейнеров и возможность быстрого
восстановления предыдущих версий, что является важным аспектом в процессах CI/CD.
Selenium — это мощный инструмент для автоматизации тестирования вебприложений. Он позволяет автоматизировать действия в веб-браузере, что делает его
идеальным инструментом для тестирования пользовательских интерфейсов. Selenium
поддерживает множество языков программирования, включая Java, C#, Python и Ruby, и
совместим со всеми основными веб-браузерами.
Selenium автоматизирует процесс тестирования веб-интерфейсов, что существенно
сокращает время, необходимое для тестирования и устраняет человеческий фактор из
процесса. Это помогает обеспечить, что любые изменения в коде не нарушат
функциональность или пользовательский интерфейс приложения. Selenium легко
интегрируется с инструментами непрерывной интеграции и развертывания, такими как
Jenkins, Travis CI и другими. Это позволяет автоматически запускать тесты при каждом
коммите кода в репозиторий, что обеспечивает быструю обратную связь разработчикам о
качестве кода.
17
ВЫВОДЫ
В рамках реферата мы узнали о том, как методология DevOps трансформирует сферу
информационных технологий, внося скорость и гибкость в процессы разработки и
эксплуатации программного обеспечения. Подход DevOps, объединяющий разработку и
операционную
деятельность,
оказывается
не
только
модным
трендом,
но
и
необходимостью для современных IT-компаний, стремящихся к эффективности и
инновационности. Мы обнаружили, что ключ к успеху DevOps кроется в его способности
улучшать взаимодействие между разработчиками и операционными командами, тем самым
ускоряя процессы доставки продуктов и повышая их качество и надежность.
Исследование выявило, что DevOps не является универсальным решением для всех
сфер IT-индустрии, однако во многих контекстах он предлагает значительные
преимущества. Мы рассмотрели, как различные практики и инструменты DevOps, включая
автоматизацию, мониторинг, непрерывную интеграцию и непрерывное развертывание,
способствуют повышению гибкости и оперативности процессов. Особое внимание было
уделено анализу эффективности DevOps в различных типах проектов и организаций,
выявляя области, где он особенно эффективен, и ситуации, в которых его применение
может быть ограничено.
Выводы этого реферата подчёркивают, что принятие DevOps требует культурных
изменений в организации, а также внедрения новых технологий и процессов. Однако при
правильном подходе и адаптации под конкретные потребности организации, DevOps
обещает значительное ускорение разработки и повышение качества IT-продуктов, что
является ключевым фактором успеха в современном быстро меняющемся мире
информационных технологий.
18
Список использованных источников
1.
Ким Д., Дебуа П., Уиллис Д., Хамбл Д. Руководство по DevOps // Издательство
ООО “Манн, Иванов и Фербер”, 2018
2.
Jeffery D. Smith: Operations, Antipatterns, DevOps Solutions. // Издательство
Manning Publications Co., 2020.
3.
Ким Д., Бер К., Спаффорд Д. Проект «Феникс». Как DevOps устраняет хаос и
ускоряет развитие компании. 5-е издание // Издательство HarperCollins Publishers, 2022
4.
DevOps: методология, принципы, подходы и технологии – habr.com.
[Электронный ресурс]. URL:https://habr.com/ru/articles/745532/
5.
Роль CI/CD в DevOps - https://www.jetbrains.com/. [Электронный ресурс].
URL:https://www.jetbrains.com/ru-ru/teamcity/ci-cd-guide/devops-ci-cd/
6.
Что такое CI/CD? Разбираемся с непрерывной интеграцией и непрерывной
поставкой. habr.ru. [Электронный ресурс]. URL:
https://habr.com/ru/companies/otus/articles/515078/
7.
Инструменты
DevOps.
atlassian.com.
Инструменты для каждого этапа цикла DevOps
19
[Электронный
ресурс].
URL:
Download