DevOps: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м Защитил страницу DevOps: повторяющиеся неконсенсусные правки ([Редактирование=только автоподтверждённые] (истекает 11:19, 28 октября 2024 (UTC)) [Переименование=только автоподтверждённые] (истекает 11:19, 28 октября 2024 (UTC)))
 
(не показано 46 промежуточных версий 26 участников)
Строка 2: Строка 2:
[[Файл:Схема взаимодействия в методологии Devops.svg|альт=Схема взаимодействия в методологии Devops. Разработка + Тестирование + Эксплуатация = DevOps|мини|Иллюстрация, показывающая вариант DevOps как пересечения разработки, эксплуатации и тестирования]]
[[Файл:Схема взаимодействия в методологии Devops.svg|альт=Схема взаимодействия в методологии Devops. Разработка + Тестирование + Эксплуатация = DevOps|мини|Иллюстрация, показывающая вариант DevOps как пересечения разработки, эксплуатации и тестирования]]


'''DevOps''' ([[акроним]] от {{lang-en|development}} и {{lang-en2|operations}}; [[по-русски]] обычно произносится как «дево́пс») — технология (методология) активного взаимодействия специалистов по [[Разработка программного обеспечения|разработке]] со специалистами по [[Техническая поддержка|информационно-технологическому обслуживанию]] и взаимную интеграцию их рабочих процессов друг в друга для [[Обеспечение качества|обеспечения качества продукта]]. Предназначена для эффективной организации создания и обновления программных продуктов и услуг. Основана на идее тесной взаимозависимости создания продукта и эксплуатации программного обеспечения.
'''DevOps''' ([[акроним]] от {{lang-en|development}} & {{lang-en2|operations}}) — методология автоматизации технологических процессов сборки, настройки и развёртывания программного обеспечения. Методология предполагает активное взаимодействие специалистов по [[Разработка программного обеспечения|разработке]] со специалистами по [[Техническая поддержка|информационно-технологическому обслуживанию]] и взаимную интеграцию их технологических процессов друг в друга для [[Обеспечение качества|обеспечения высокого качества программного продукта]]. Предназначена для эффективной организации создания и обновления программных продуктов и услуг. Основана на идее тесной взаимозависимости создания продукта и эксплуатации программного обеспечения, которая прививается команде как культура создания продукта.


Организациям, которым необходимы частые выпуски программного обеспечения, может понадобиться DevOps, т.е. автоматизация технологических процессов сборки, настройки и развёртывания программного обеспечения. Дневной цикл выпусков ПО может быть гораздо более интенсивным у организаций, которые выпускают несколько разнонаправленных приложений.
== Общее обозначение ==
Организациям, которым необходимы частые выпуски программного обеспечения, может понадобиться DevOps. Дневной цикл релизов может быть гораздо более интенсивным у организаций, которые выпускают несколько разнонаправленных приложений.


Методология фокусируется на стандартизации окружений разработки с целью способствования быстрому выпуску версий. В идеале, системы [[Автоматизация сборки|автоматизации сборки и выпуска]] должны быть доступны всем разработчикам в любом окружении, и у разработчиков должен быть контроль над окружением, а информационно-технологическая инфраструктура должна становиться более сфокусированной на приложении.
Методология фокусируется на стандартизации окружений разработки с целью быстрого переноса программного обеспечения через стадии жизненного цикла ПО, способствуя быстрому выпуску версий программного продукта. В идеале, системы [[Автоматизация сборки|автоматизации сборки и выпуска]] должны быть доступны всем разработчикам в любом окружении, и у разработчиков должен быть контроль над окружением разработки, а информационно-технологическая инфраструктура должна становиться более сфокусированной на приложении.


Задача DevOps — сделать процесс разработки и поставки программного обеспечения согласованным с эксплуатацией, часто эти задачи решаются при поддержке автоматических средств.
Задача инженеров автоматизации технологических процессов сборки, настройки и развёртывания программного обеспечения (DevOps engineers) — сделать процессы разработки и поставки программного обеспечения согласованным с эксплуатацией, объединив их в единое целое с помощью инструментов автоматизации.


DevOps-движение возникло в 2009 году и было призвано решить проблемы взаимодействия команд разработки и эксплуатации программных продуктов, в том же году в Бельгии была организована серия конференций «DevOps Days»<ref name = devopsdaysghent>{{cite web|last=Debois|first=Patrick|title=DevOps Days Ghent |url = http://www.devopsdays.org/events/2009-ghent/ |publisher=DevopsDays|accessdate=2019-08-19}}</ref><ref>Один из соавторов DevOps Cookbook, Джон Уиллис, написал [http://itrevolution.com/the-convergence-of-devops/ фантастический пост] об этом событии.</ref>. Затем «DevOps-дни» проходили в различных городах и странах мира.
Движение за автоматизацию технологических процессов сборки, настройки и развёртывания программного обеспечения (DevOps-движение) возникло в 2009 году и было призвано решить проблемы взаимодействия команд разработки и эксплуатации программных продуктов. В том же году в Бельгии была организована серия конференций «DevOps Days»<ref name = devopsdaysghent>{{cite web|last=Debois|first=Patrick|title=DevOps Days Ghent|url=http://www.devopsdays.org/events/2009-ghent/|publisher=DevopsDays|accessdate=2019-08-19|archive-date=2011-03-24|archive-url=https://web.archive.org/web/20110324001757/http://www.devopsdays.org/events/2009-ghent/|deadlink=no}}</ref><ref>Один из соавторов DevOps Cookbook, Джон Уиллис, написал [http://itrevolution.com/the-convergence-of-devops/ фантастический пост] {{Wayback|url=http://itrevolution.com/the-convergence-of-devops/ |date=20190825060050 }} об этом событии.</ref>. Затем «DevOps-дни» проходили в различных городах и странах мира.


== Возникновение ==
== Набор инструментов ==
Истоками того, что стало современным DevOps, включая некоторые стандартные принципы, такие как: [[автоматизация сборки]] и тестирование, [[непрерывная интеграция]] и [[непрерывная доставка]] — возникли в мире [[Agile]], который (неофициально) датируется 1990-ми годами, а формально — 2001 годом. Команды разработчиков, использующие такие методы, как [[экстремальное программирование]], не смогли бы «удовлетворить потребности заказчика, благодаря регулярной и ранней поставке ценного программного обеспечения»<ref>{{Cite web|url=https://agilemanifesto.org/iso/ru/principles.html|title=Основополагающие принципы Agile-манифеста|website=agilemanifesto.org|access-date=2021-11-10|archive-date=2022-01-20|archive-url=https://web.archive.org/web/20220120224001/https://agilemanifesto.org/iso/ru/principles.html|deadlink=no}}</ref>, если бы эти методы не включали в себя обязанности по настройке операций и поддержанию инфраструктуры разрабатываемого приложения (в максимально автоматизированном режиме). Поскольку [[SCRUM|Scrum]] стал доминирующей гибкой структурой в начале 2000-х годов, и в нем отсутствовали инженерные методы, которые были частью многих Agile команд, движение за автоматизацию операций/функций инфраструктуры отделилось от Agile и расширилось до того, что стало современными DevOps. Сегодня DevOps фокусируется на развертывании разработанного программного обеспечения, независимо от того, разработано ли оно с помощью гибких или других методологий.
Поскольку DevOps — это командная работа (между сотрудниками, занимающимися разработкой, операциями и тестированием), нет единого инструмента «DevOps»: это скорее набор (или «инструментальная цепочка DevOps»), состоящий из нескольких инструментов. Как правило, инструменты DevOps вписываются в одну или несколько из этих категорий, что отражает ключевые аспекты разработки и доставки программного обеспечения:<ref>{{статья |заглавие=Gartner Market Trends: DevOps – Not a Market, but Tool-Centric Philosophy That supports a Continuous Delivery Value Chain |издательство=[[Gartner]] |язык=en |тип=journal |число=18 |месяц=2 |год=2015}}</ref>
# Code — разработка и анализ кода, инструменты контроля версий, слияние кода;
# Build — инструменты непрерывной интеграции, статус сборки;
# Test — инструменты непрерывного тестирования, которые обеспечивают обратную связь по бизнес-рискам;
# Пакет — репозиторий артефактов, предварительная установка приложения;
# Release — управление изменениями, официальное утверждение выпуска, автоматизация выпуска;
# Конфигурация — Конфигурация и управление инфраструктурой, Инфраструктура как инструменты кода;
# Мониторинг — мониторинг производительности приложений, опыт работы с конечным пользователем.


Таким образом, косвенно, потребность в DevOps родилась из-за растущей популярности методологии разработки [[Agile]], поскольку это привело к увеличению количества выпускаемых версий.
Несмотря на то, что доступно множество инструментов, некоторые категории из них имеют особо важное значение в настройке инструментальных средств DevOps для использования в организации. Некоторые попытки идентифицировать эти основные инструменты можно найти в существующей литературе<ref>{{cite web| title=DevOps Stack on a Shoestring Budget|last=Theakanath|first=Thomas|url=http://devops.com/2016/02/05/devops-stack-shoestring-budget/|website=devops.com}}</ref>.


== Набор инструментов ==
Такие инструменты, как [[Docker]] (контейнеризация), [[Jenkins]] (непрерывная интеграция), [[Puppet]], [[Ansible]], [[Terraform]] (инфраструктура как код) и [[Vagrant]] (средство для создания и конфигурирования [[Виртуализация|виртуальной]] среды разработки) — и многие другие — часто используются и часто упоминаются в дискуссиях по инструментам DevOps<ref>{{Cite web|title = Stronger DevOps Culture with Puppet and Vagrant|url = https://puppetlabs.com/blog/stronger-devops-culture-with-puppet-and-vagrant|website = Puppet Labs|accessdate = 2015-10-22|archiveurl = https://web.archive.org/web/20160129110938/https://puppetlabs.com/blog/stronger-devops-culture-with-puppet-and-vagrant|archivedate = 2016-01-29|deadlink = yes}}</ref>.
Поскольку DevOps — это командная работа (между сотрудниками, занимающимися разработкой, операциями и тестированием), нет единого инструмента «DevOps»: это скорее набор (или «инструментальная цепочка DevOps»), состоящий из нескольких инструментов. Как правило, инструменты DevOps вписываются в одну или несколько из этих категорий, что отражает ключевые аспекты разработки и доставки программного обеспечения<ref>{{статья |заглавие=Gartner Market Trends: DevOps – Not a Market, but Tool-Centric Philosophy That supports a Continuous Delivery Value Chain |издательство=[[Gartner]] |язык=en |тип=journal |число=18 |месяц=2 |год=2015}}</ref>:
# Кодирование — разработка и анализ кода, инструменты контроля версий, слияние кода;
# Сборка — инструменты непрерывной интеграции, статус сборки;
# Тестирование — инструменты непрерывного тестирования, обеспечивающие быструю и своевременную оценку бизнес-рисков;
# Упаковка — репозиторий артефактов, предварительная установка приложения;
# Релиз — управление изменениями, официальное утверждение выпуска, автоматизация выпуска;
# Настройка — конфигурация и управление инфраструктурой, Инфраструктура как инструменты кода;
# Мониторинг — измерение производительности приложений, взаимодействие с конечным пользователем;
# Непрерывная поставка;
# Непрерывная интеграция.


Несмотря на то, что доступно множество инструментов, некоторые категории из них имеют особо важное значение в настройке инструментальных средств DevOps для использования в организации. Некоторые попытки идентифицировать эти основные инструменты можно найти в существующей литературе<ref>{{cite web|title=DevOps Stack on a Shoestring Budget|last=Theakanath|first=Thomas|url=https://laptrinhx.com/devops-stack-on-a-shoestring-budget-3951133938/|website=laptrinhx.com|accessdate=2016-02-05|archiveurl=https://web.archive.org/web/20220321201516/https://laptrinhx.com/devops-stack-on-a-shoestring-budget-3951133938/|archivedate=2022-03-21|deadlink=no}}</ref>.
== Сравнение с Agile и Continuous delivery ==
[[Agile]] и DevOps похожи, но Agile представляет собой изменение мышления и практики (что должно привести к организационным изменениям), а DevOps уделяет больше внимания внедрению организационных изменений для достижения своих целей.<ref name="Agile Now">{{статья |заглавие=We need more Agile IT Now! |ссылка=http://www.drdobbs.com/architecture-and-design/we-need-more-agile-it-now/240169361?queryText=Release%2Bmanagement |издание=Dr. Dobb’s The world of software Development |место=San Francisco |издательство=UBM |язык=und |автор=Ambler, Scott W. |число=12 |месяц=2 |год=2014}}</ref>


Такие инструменты, как управление контейнеризацией ([[Docker]], [[Kubernetes]]), непрерывной интеграцией ([[Jenkins]], [[GitLab]]), развёртывания сред по шаблону ([[Puppet]], [[Ansible]], [[Terraform]]) и многие другие — часто используются и часто упоминаются в дискуссиях по инструментам DevOps<ref>{{Cite web|title = Stronger DevOps Culture with Puppet and Vagrant|url = https://puppetlabs.com/blog/stronger-devops-culture-with-puppet-and-vagrant|website = Puppet Labs|accessdate = 2015-10-22|archiveurl = https://web.archive.org/web/20160129110938/https://puppetlabs.com/blog/stronger-devops-culture-with-puppet-and-vagrant|archivedate = 2016-01-29|deadlink = yes}}</ref>.
Потребность в DevOps рождалась из-за растущей популярности программного обеспечения Agile, поскольку это приводит к увеличению количества выпускаемых версий.


== Сравнение с Continuous delivery ==
[[Непрерывная доставка|Continuous delivery]] и DevOps похожи по своим значениям (и часто сочетаются), но они представляют собой две разные концепции:
[[Непрерывная доставка|Continuous delivery]] и DevOps похожи по своим значениям (и часто сочетаются), но они представляют собой две разные концепции:


Строка 43: Строка 45:
# Администрирования базы данных;
# Администрирования базы данных;
# Координаторов
# Координаторов
# Автоматизации процессов в поставке программного обеспечения.<ref name="CD_HJ">{{книга |заглавие=Continuous Delivery: reliable software releases through build, test, and deployment automation |издательство={{Нп3|Pearson Education|Pearson Education Inc.|en|Pearson Education}} |isbn=978-0-321-60191-9 |ref=Humble |язык=en |автор=Humble, Jez; Farley, David |год=2011}}</ref>
# Автоматизации процессов в поставке программного обеспечения<ref name="CD_HJ">{{книга |заглавие=Continuous Delivery: reliable software releases through build, test, and deployment automation |ссылка=https://archive.org/details/continuousdelive0000humb |издательство={{iw|Pearson Education}} |isbn=978-0-321-60191-9 |ref=Humble |язык=en |автор=Humble, Jez; Farley, David |год=2011}}</ref>.


Continuous delivery — это подход к автоматизации аспекта поставки, который фокусируется на:
Continuous delivery — это подход к автоматизации аспекта поставки, который фокусируется на:
Строка 60: Строка 62:
Методики DevOps делают простые процессы более программируемыми и динамическими. С помощью DevOps можно максимизировать предсказуемость, эффективность, безопасность и ремонтопригодность операционных процессов.
Методики DevOps делают простые процессы более программируемыми и динамическими. С помощью DevOps можно максимизировать предсказуемость, эффективность, безопасность и ремонтопригодность операционных процессов.


Интеграция DevOps предназначена для доставки продукта, непрерывного тестирования, тестирования качества, разработки функций и обновлений обслуживания для повышения надежности и безопасности и обеспечения более быстрого цикла разработки и развертывания.<ref name="ieeexplore.ieee.org">{{статья |doi=10.1109/MS.2015.27 |ссылка=http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&arnumber=7006384 |заглавие=Continuous Delivery: Huge Benefits, but Challenges Too |издание={{Нп3|IEEE Software}} |том=32 |номер=2 |страницы=50 |язык=en |тип=journal |автор=Chen, Lianping |год=2015}}</ref>
Интеграция DevOps предназначена для доставки продукта, непрерывного тестирования, тестирования качества, разработки функций и обновлений обслуживания для повышения надежности и безопасности и обеспечения более быстрого цикла разработки и развертывания<ref name="ieeexplore.ieee.org">{{статья |doi=10.1109/MS.2015.27 |ссылка=http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&arnumber=7006384 |заглавие=Continuous Delivery: Huge Benefits, but Challenges Too |издание={{iw|IEEE Software}} |том=32 |номер=2 |страницы=50 |язык=en |тип=journal |автор=Chen, Lianping |год=2015 |archivedate=2016-06-09 |archiveurl=https://web.archive.org/web/20160609191706/http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&arnumber=7006384 }}</ref>.


DevOps дает преимущества в управлении выпуском программного обеспечения для организации путем стандартизации среды разработки. События можно более легко отслеживать, а также разрешать документированные процессы управления и подробные отчеты. Подход DevOps предоставляет разработчикам больше контроля над средой, предоставляя инфраструктуре более ориентированное на приложения понимание.
DevOps дает преимущества в управлении выпуском программного обеспечения для организации путем стандартизации среды разработки. События можно более легко отслеживать, а также разрешать документированные процессы управления и подробные отчеты. Подход DevOps предоставляет разработчикам больше контроля над средой, предоставляя инфраструктуре более ориентированное на приложения понимание.


== Преимущества DevOps ==
== Преимущества ==
Компании, которые используют DevOps, сообщили о значительных преимуществах, в том числе: значительно сокращении времени выхода на рынок, улучшении удовлетворенности клиентов, улучшении качества продукции, более надежных выпусках, повышении производительности и эффективности, а также увеличении способности создавать правильный продукт путем быстрого экспериментирования.<ref name="ieeexplore.ieee.org"/>
Компании, которые используют DevOps, сообщили о значительных преимуществах, в том числе: значительно сокращении времени выхода на рынок, улучшении удовлетворенности клиентов, улучшении качества продукции, более надежных выпусках, повышении производительности и эффективности, а также увеличении способности создавать правильный продукт путем быстрого экспериментирования<ref name="ieeexplore.ieee.org"/>.


Однако, исследование, выпущенное в январе 2017 года компанией «F5 Labs», на основе опроса почти 2200 ИТ-руководителей и специалистов отрасли, показало, что только один из пяти опрошенных полагает, что DevOps оказывает стратегическое влияние на их организацию, несмотря на рост использования. В том же исследовании было установлено, что только 17 % определили DevOps как ключевой инструмент.<ref>{{статья |заглавие=New research questions strategic importance of DevOps despite rise in usage |ссылка=http://www.cloudcomputing-news.net/news/2017/jan/23/devops-usage-continues-rise-strategic-importance-needs-more-working-out/ |издание=CloudTech |язык=en |тип=journal |автор=Bourne, James |число=23 |месяц=1 |год=2017}}</ref>
Однако, исследование, выпущенное в январе 2017 года компанией «F5 Labs», на основе опроса почти 2200 ИТ-руководителей и специалистов отрасли, показало, что только один из пяти опрошенных полагает, что DevOps оказывает стратегическое влияние на их организацию, несмотря на рост использования. В том же исследовании было установлено, что только 17 % определили DevOps как ключевой инструмент<ref>{{статья |заглавие=New research questions strategic importance of DevOps despite rise in usage |ссылка=http://www.cloudcomputing-news.net/news/2017/jan/23/devops-usage-continues-rise-strategic-importance-needs-more-working-out/ |издание=CloudTech |язык=en |тип=journal |автор=Bourne, James |число=23 |месяц=1 |год=2017 |archivedate=2017-03-01 |archiveurl=https://web.archive.org/web/20170301060212/http://www.cloudcomputing-news.net/news/2017/jan/23/devops-usage-continues-rise-strategic-importance-needs-more-working-out/ }}</ref>.


== Архитектурные условия ==
== DevOps и архитектура ==
Чтобы эффективно использовать DevOps, прикладные программы должны соответствовать набору архитектурно значимых требований (ASR), таких как: возможность развертывания, изменяемость, тестируемость и возможности мониторинга.
Чтобы эффективно использовать DevOps, прикладные программы должны соответствовать набору архитектурно значимых требований (ASR), таких как: возможность развертывания, изменяемость, тестируемость и возможности мониторинга.


Хотя в принципе можно использовать DevOps с любым архитектурным стилем, архитектурный стиль микросервисов становится стандартом для построения постоянно развернутых систем. Поскольку размер каждой услуги невелик, он позволяет создавать архитектуру отдельного сервиса посредством непрерывного рефакторинга, что уменьшает необходимость в большом предварительном дизайне и позволяет выпускать программное обеспечение на ранней стадии непрерывно.
Хотя в принципе можно использовать DevOps с любым архитектурным стилем, стиль микросервисов становится стандартом для построения постоянно развёрнутых{{уточнить}} систем. Поскольку размер каждого сервиса невелик, появляется возможность изменять каждый отдельный сервис посредством непрерывного рефакторинга, что уменьшает необходимость в большом предварительном дизайне и позволяет выпускать программное обеспечение на ранней стадии непрерывно.


==GitOps==
== Варианты DevOps ==
GitOps эволюционировал из DevOps<ref>{{Cite web|url=https://thenewstack.io/getting-started-with-gitops/|title=Getting Started with GitOps|date=2021-12-13|website=TheNewStack.io|access-date=2022-04-05|archive-date=2022-09-20|archive-url=https://web.archive.org/web/20220920172851/https://thenewstack.io/getting-started-with-gitops/|deadlink=no}}</ref><ref>{{Cite web |access-date=2022-04-05 |website=ContainerJournal.com |url=https://containerjournal.com/features/gitops-workflows-and-principles-for-kubernetes/ |title=GitOps Workflows and Principles for Kubernetes |date=2022-04-01 |archive-date=2022-09-20 |archive-url=https://web.archive.org/web/20220920171447/https://containerjournal.com/features/gitops-workflows-and-principles-for-kubernetes/ |deadlink=no }}</ref><ref>{{Cite web|url=https://thenewstack.io/kubernetes-at-scale-without-gitops-is-a-bad-idea/|title=Kubernetes at Scale without GitOps Is a Bad Idea|date=2022-03-07|website=TheNewStack.io|access-date=2022-04-05|archive-date=2022-09-20|archive-url=https://web.archive.org/web/20220920171715/https://thenewstack.io/kubernetes-at-scale-without-gitops-is-a-bad-idea/|deadlink=no}}</ref>. В рамках этого подхода, специфическое состояние конфигурации [[Система_управления_версиями | коммитится]] в [[Git]], давшего имя подходу. В теории, вместо Git может использоваться другая [[Система_управления_версиями|система контроля версий]], но на практике это почти всегда Git. Использование [[Система_управления_версиями|системы контроля версий]] позволяет применять практики [[Просмотр_кода|код ревью]], и откатывать конфигурацию назад.
По скольку DevOps это про проход к культуре в командах, а команды разные и разные продукты, то он сильно адаптируется. Так появляются различные его варианты: DevSecOps, [[DataOps|DataOps]].


== Ссылки ==
== Примечания ==
{{примечания}}
{{примечания}}
{{ВС}}

{{rq|style}}

[[Категория:Разработка программного обеспечения]]
[[Категория:Разработка программного обеспечения]]

Текущая версия от 11:19, 21 октября 2024

Разработка программного обеспечения
Ключевые процессы
Парадигмы и модели
Методологии
Инструменты
Схема взаимодействия в методологии Devops. Разработка + Тестирование + Эксплуатация = DevOps
Иллюстрация, показывающая вариант DevOps как пересечения разработки, эксплуатации и тестирования

DevOps (акроним от англ. development & operations) — методология автоматизации технологических процессов сборки, настройки и развёртывания программного обеспечения. Методология предполагает активное взаимодействие специалистов по разработке со специалистами по информационно-технологическому обслуживанию и взаимную интеграцию их технологических процессов друг в друга для обеспечения высокого качества программного продукта. Предназначена для эффективной организации создания и обновления программных продуктов и услуг. Основана на идее тесной взаимозависимости создания продукта и эксплуатации программного обеспечения, которая прививается команде как культура создания продукта.

Организациям, которым необходимы частые выпуски программного обеспечения, может понадобиться DevOps, т.е. автоматизация технологических процессов сборки, настройки и развёртывания программного обеспечения. Дневной цикл выпусков ПО может быть гораздо более интенсивным у организаций, которые выпускают несколько разнонаправленных приложений.

Методология фокусируется на стандартизации окружений разработки с целью быстрого переноса программного обеспечения через стадии жизненного цикла ПО, способствуя быстрому выпуску версий программного продукта. В идеале, системы автоматизации сборки и выпуска должны быть доступны всем разработчикам в любом окружении, и у разработчиков должен быть контроль над окружением разработки, а информационно-технологическая инфраструктура должна становиться более сфокусированной на приложении.

Задача инженеров автоматизации технологических процессов сборки, настройки и развёртывания программного обеспечения (DevOps engineers) — сделать процессы разработки и поставки программного обеспечения согласованным с эксплуатацией, объединив их в единое целое с помощью инструментов автоматизации.

Движение за автоматизацию технологических процессов сборки, настройки и развёртывания программного обеспечения (DevOps-движение) возникло в 2009 году и было призвано решить проблемы взаимодействия команд разработки и эксплуатации программных продуктов. В том же году в Бельгии была организована серия конференций «DevOps Days»[1][2]. Затем «DevOps-дни» проходили в различных городах и странах мира.

Возникновение

[править | править код]

Истоками того, что стало современным DevOps, включая некоторые стандартные принципы, такие как: автоматизация сборки и тестирование, непрерывная интеграция и непрерывная доставка — возникли в мире Agile, который (неофициально) датируется 1990-ми годами, а формально — 2001 годом. Команды разработчиков, использующие такие методы, как экстремальное программирование, не смогли бы «удовлетворить потребности заказчика, благодаря регулярной и ранней поставке ценного программного обеспечения»[3], если бы эти методы не включали в себя обязанности по настройке операций и поддержанию инфраструктуры разрабатываемого приложения (в максимально автоматизированном режиме). Поскольку Scrum стал доминирующей гибкой структурой в начале 2000-х годов, и в нем отсутствовали инженерные методы, которые были частью многих Agile команд, движение за автоматизацию операций/функций инфраструктуры отделилось от Agile и расширилось до того, что стало современными DevOps. Сегодня DevOps фокусируется на развертывании разработанного программного обеспечения, независимо от того, разработано ли оно с помощью гибких или других методологий.

Таким образом, косвенно, потребность в DevOps родилась из-за растущей популярности методологии разработки Agile, поскольку это привело к увеличению количества выпускаемых версий.

Набор инструментов

[править | править код]

Поскольку DevOps — это командная работа (между сотрудниками, занимающимися разработкой, операциями и тестированием), нет единого инструмента «DevOps»: это скорее набор (или «инструментальная цепочка DevOps»), состоящий из нескольких инструментов. Как правило, инструменты DevOps вписываются в одну или несколько из этих категорий, что отражает ключевые аспекты разработки и доставки программного обеспечения[4]:

  1. Кодирование — разработка и анализ кода, инструменты контроля версий, слияние кода;
  2. Сборка — инструменты непрерывной интеграции, статус сборки;
  3. Тестирование — инструменты непрерывного тестирования, обеспечивающие быструю и своевременную оценку бизнес-рисков;
  4. Упаковка — репозиторий артефактов, предварительная установка приложения;
  5. Релиз — управление изменениями, официальное утверждение выпуска, автоматизация выпуска;
  6. Настройка — конфигурация и управление инфраструктурой, Инфраструктура как инструменты кода;
  7. Мониторинг — измерение производительности приложений, взаимодействие с конечным пользователем;
  8. Непрерывная поставка;
  9. Непрерывная интеграция.

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

Такие инструменты, как управление контейнеризацией (Docker, Kubernetes), непрерывной интеграцией (Jenkins, GitLab), развёртывания сред по шаблону (Puppet, Ansible, Terraform) и многие другие — часто используются и часто упоминаются в дискуссиях по инструментам DevOps[6].

Сравнение с Continuous delivery

[править | править код]

Continuous delivery и DevOps похожи по своим значениям (и часто сочетаются), но они представляют собой две разные концепции:

DevOps применяется в более широких аспектах и сосредоточен вокруг:

  1. Организационных изменений: в частности, для поддержки более тесного сотрудничества между различными типами работников, занимающихся поставкой программного обеспечения;
  2. Разработчиков;
  3. Операций;
  4. Гарантии качества;
  5. Управления;
  6. Системного администрирования;
  7. Администрирования базы данных;
  8. Координаторов
  9. Автоматизации процессов в поставке программного обеспечения[7].

Continuous delivery — это подход к автоматизации аспекта поставки, который фокусируется на:

  1. Объединении различных процессов;
  2. Выполнении их быстрее и чаще.

Они имеют общие конечные цели и часто используются вместе для их достижения. DevOps и Continuous delivery используют гибкие методы: небольшие и быстрые изменения с целенаправленным результатом для конечного клиента.

Конкретные цели DevOps охватывают весь процесс поставки программного обеспечения. Они включают:

  1. Сокращение времени для выхода на рынок;
  2. Снижение частоты отказов новых релизов;
  3. Сокращение времени выполнения исправлений;
  4. Уменьшение количества времени на восстановления (в случае сбоя новой версии или иного отключения текущей системы).

Методики DevOps делают простые процессы более программируемыми и динамическими. С помощью DevOps можно максимизировать предсказуемость, эффективность, безопасность и ремонтопригодность операционных процессов.

Интеграция DevOps предназначена для доставки продукта, непрерывного тестирования, тестирования качества, разработки функций и обновлений обслуживания для повышения надежности и безопасности и обеспечения более быстрого цикла разработки и развертывания[8].

DevOps дает преимущества в управлении выпуском программного обеспечения для организации путем стандартизации среды разработки. События можно более легко отслеживать, а также разрешать документированные процессы управления и подробные отчеты. Подход DevOps предоставляет разработчикам больше контроля над средой, предоставляя инфраструктуре более ориентированное на приложения понимание.

Преимущества

[править | править код]

Компании, которые используют DevOps, сообщили о значительных преимуществах, в том числе: значительно сокращении времени выхода на рынок, улучшении удовлетворенности клиентов, улучшении качества продукции, более надежных выпусках, повышении производительности и эффективности, а также увеличении способности создавать правильный продукт путем быстрого экспериментирования[8].

Однако, исследование, выпущенное в январе 2017 года компанией «F5 Labs», на основе опроса почти 2200 ИТ-руководителей и специалистов отрасли, показало, что только один из пяти опрошенных полагает, что DevOps оказывает стратегическое влияние на их организацию, несмотря на рост использования. В том же исследовании было установлено, что только 17 % определили DevOps как ключевой инструмент[9].

Архитектурные условия

[править | править код]

Чтобы эффективно использовать DevOps, прикладные программы должны соответствовать набору архитектурно значимых требований (ASR), таких как: возможность развертывания, изменяемость, тестируемость и возможности мониторинга.

Хотя в принципе можно использовать DevOps с любым архитектурным стилем, стиль микросервисов становится стандартом для построения постоянно развёрнутых[уточнить] систем. Поскольку размер каждого сервиса невелик, появляется возможность изменять каждый отдельный сервис посредством непрерывного рефакторинга, что уменьшает необходимость в большом предварительном дизайне и позволяет выпускать программное обеспечение на ранней стадии непрерывно.

GitOps эволюционировал из DevOps[10][11][12]. В рамках этого подхода, специфическое состояние конфигурации коммитится в Git, давшего имя подходу. В теории, вместо Git может использоваться другая система контроля версий, но на практике это почти всегда Git. Использование системы контроля версий позволяет применять практики код ревью, и откатывать конфигурацию назад.

Примечания

[править | править код]
  1. Debois, Patrick DevOps Days Ghent. DevopsDays. Дата обращения: 19 августа 2019. Архивировано 24 марта 2011 года.
  2. Один из соавторов DevOps Cookbook, Джон Уиллис, написал фантастический пост Архивная копия от 25 августа 2019 на Wayback Machine об этом событии.
  3. Основополагающие принципы Agile-манифеста. agilemanifesto.org. Дата обращения: 10 ноября 2021. Архивировано 20 января 2022 года.
  4. Gartner Market Trends: DevOps – Not a Market, but Tool-Centric Philosophy That supports a Continuous Delivery Value Chain (англ.) : journal. — Gartner, 2015. — 18 February.
  5. Theakanath, Thomas DevOps Stack on a Shoestring Budget. laptrinhx.com. Дата обращения: 5 февраля 2016. Архивировано 21 марта 2022 года.
  6. Stronger DevOps Culture with Puppet and Vagrant. Puppet Labs. Дата обращения: 22 октября 2015. Архивировано из оригинала 29 января 2016 года.
  7. Humble, Jez; Farley, David. Continuous Delivery: reliable software releases through build, test, and deployment automation (англ.). — Pearson Education[англ.], 2011. — ISBN 978-0-321-60191-9.
  8. 1 2 Chen, Lianping. Continuous Delivery: Huge Benefits, but Challenges Too (англ.) // IEEE Software[англ.] : journal. — 2015. — Vol. 32, no. 2. — P. 50. — doi:10.1109/MS.2015.27. Архивировано 9 июня 2016 года.
  9. Bourne, James. New research questions strategic importance of DevOps despite rise in usage (англ.) // CloudTech : journal. — 2017. — 23 January. Архивировано 1 марта 2017 года.
  10. Getting Started with GitOps. TheNewStack.io (13 декабря 2021). Дата обращения: 5 апреля 2022. Архивировано 20 сентября 2022 года.
  11. GitOps Workflows and Principles for Kubernetes. ContainerJournal.com (1 апреля 2022). Дата обращения: 5 апреля 2022. Архивировано 20 сентября 2022 года.
  12. Kubernetes at Scale without GitOps Is a Bad Idea. TheNewStack.io (7 марта 2022). Дата обращения: 5 апреля 2022. Архивировано 20 сентября 2022 года.