Непрерывная доставка - Continuous delivery

Разработка программного обеспечения
Активность ядер
Парадигмы и модели
Методологии и рамки
Вспомогательные дисциплины
Практики
Инструменты
Стандарты и свод знаний
Глоссарии
Контуры

Непрерывная доставка (CD) это программная инженерия подход, при котором команды производят программное обеспечение в короткие циклы, гарантируя, что программное обеспечение может быть надежно выпущено в любое время, а при выпуске программного обеспечения - делать это вручную.[1][2] Он направлен на создание, тестирование и выпуск программного обеспечения с большей скоростью и частотой. Такой подход помогает снизить стоимость, время и риск внесения изменений за счет дополнительных обновлений приложений в производственной среде. Для непрерывной доставки важен простой и повторяемый процесс развертывания.

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

Отношение к DevOps

Непрерывная доставка и DevOps похожи по своему значению и часто смешиваются, но это два разных понятия.[3] DevOps имеет более широкий охват,[4] и сосредотачивается вокруг культурных изменений, в частности, сотрудничества различных команд, участвующих в поставке программного обеспечения (разработчиков, операций, обеспечения качества, управления и т. д.), а также автоматизации процессов поставки программного обеспечения.[4] С другой стороны, непрерывная доставка - это подход к автоматизации аспекта доставки, который фокусируется на объединении различных процессов и их более быстром и частом выполнении.[5] Таким образом, DevOps может быть продуктом непрерывной доставки, а CD перетекает непосредственно в DevOps.

Связь с непрерывным развертыванием

Непрерывная доставка - это возможность доставлять программное обеспечение, которое можно развернуть в любое время с помощью выпусков вручную; это отличается от непрерывного развертывания, которое использует автоматическое развертывание.[6] В соответствии с Мартин Фаулер, непрерывное развертывание требует непрерывной доставки.[7] В академической литературе эти два подхода различаются в зависимости от метода развертывания; ручное или автоматическое.[2][8]

Принципы

Диаграмма процесса непрерывной доставки .svg

Непрерывная доставка трактует банальное понятие конвейер развертывания[9] как худой Poka-Yoke:[10] набор проверок, через которые часть программного обеспечения должна пройти на пути к релиз. Код компилируется, если необходимо, а затем упаковывается сервером сборки каждый раз, когда изменение фиксируется в репозиторий системы контроля версий, затем протестирован с помощью ряда различных методов (возможно, включая ручное тестирование), прежде чем он будет отмечен как готовый к выпуску.

Разработчикам, привыкшим к длительному циклу, возможно, придется изменить свое мышление при работе в среде компакт-дисков. Важно понимать, что любая фиксация кода может быть передана клиентам в любой момент. Такие шаблоны, как переключатели функций может быть очень полезным для ранней фиксации кода, который еще не готов для использования конечными пользователями. С помощью NoSQL может исключить этап миграции данных и изменения схемы, часто выполняемый вручную или исключения из рабочего процесса непрерывной доставки.[11] Другие полезные методы разработки изолированного кода, такие как ветвление кода не устарели в мире компакт-дисков, но должны быть адаптированы для соответствия принципам компакт-диска - например, запуск нескольких долгоживущих ветвей кода может оказаться непрактичным, поскольку выпускаемый артефакт должен быть построен на ранних этапах процесса компакт-диска из одной ветки кода. если он должен пройти через все фазы трубопровода.[требуется разъяснение ]

Конвейер развертывания

Непрерывная доставка осуществляется через конвейер развертывания. Целью конвейера развертывания является три компонента: видимость, обратная связь и постоянное развертывание.[12]

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

Инструменты / типы инструментов

Непрерывная доставка требует автоматизации от системы управления версиями до производства. Существуют различные инструменты, которые помогают выполнить весь или часть этого процесса.[13] Эти инструменты являются частью конвейера развертывания, который включает непрерывную доставку. Типы инструментов, которые выполняют различные части процесса, включают: непрерывная интеграция, автоматизация выпуска приложений, автоматизация сборки, управление жизненным циклом приложения.[14]

Архитектура для непрерывной доставки

Для эффективной практики непрерывной доставки программные приложения должны соответствовать набору архитектурно значимые требования (ASR), такие как возможность развертывания, модифицируемость и тестируемость.[15] Эти ASR требуют высокого приоритета и не могут быть легко проданы.

Микросервисы часто используются при проектировании непрерывной доставки.[16] Использование микросервисов может повысить возможность развертывания и модификации программной системы. Наблюдаемые улучшения возможности развертывания включают: независимость развертывания, более короткое время развертывания, более простые процедуры развертывания и развертывание с нулевым временем простоя. Наблюдаемые улучшения модифицируемости включают: более короткое время цикла для небольших дополнительных функциональных изменений, более легкие изменения выбора технологии, дополнительные изменения атрибутов качества и более легкое обновление языка и библиотеки.[16]

Реализация и использование

Книга на компакт-диске, написанная Джезом Хамблом и Дэвидом Фарли, популяризировала этот термин, однако с момента его создания определение продолжало развиваться и теперь имеет более развитое значение. Сегодня компании внедряют эти принципы и передовой опыт непрерывной поставки. Разница в доменах, например медицина по сравнению с сетью, по-прежнему важны и влияют на реализацию и использование.[17] Известные компании, использующие такой подход, включают: Yahoo!,[18] Amazon,[19] Facebook,[20] Google,[21] Пэдди Пауэр[1] и Уэлс Фарго.[22]

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

Сообщалось о нескольких преимуществах непрерывной доставки.[1][17]

  • Ускорение вывода на рынок: компакт-диск позволяет организации быстрее предоставлять клиентам бизнес-ценность, присущую новым выпускам программного обеспечения. Эта возможность помогает компании оставаться на шаг впереди конкурентов.
  • Создание правильного продукта: частые выпуски позволяют командам разработчиков приложений быстрее получать отзывы пользователей. Это позволяет им работать только над полезными функциями. Если они обнаруживают, что функция бесполезна, они больше не тратят на нее усилий. Это помогает им создавать правильный продукт.
  • Повышенная производительность и эффективность: значительная экономия времени разработчиков, тестировщиков, инженеров по эксплуатации и т. Д. За счет автоматизации.
  • Надежные выпуски: риски, связанные с выпуском, значительно снизились, а процесс выпуска стал более надежным. При использовании компакт-диска процесс развертывания и сценарии многократно тестируются перед развертыванием в производственной среде. Итак, большинство ошибок в процессе развертывания и скриптах уже обнаружено. С более частыми выпусками количество изменений кода в каждом выпуске уменьшается. Это упрощает поиск и устранение любых возникающих проблем, сокращая время, в течение которого они возникают.
  • Повышение качества продукта: количество открытых ошибок и производственных инцидентов значительно уменьшилось.
  • Повышение уровня удовлетворенности клиентов: достигается более высокий уровень удовлетворенности клиентов.

Также были исследованы препятствия.[17]

  • Предпочтения клиентов: некоторые клиенты не хотят постоянно обновлять свои системы. Это особенно актуально на критических этапах их деятельности.
  • Ограничения домена: в некоторых областях, таких как телекоммуникации и медицина, правила требуют тщательного тестирования, прежде чем новые версии будут допущены к этапу эксплуатации.
  • Отсутствие автоматизации тестирования. Отсутствие автоматизации тестирования приводит к неуверенности разработчиков и может помешать использованию непрерывной доставки.
  • Различия в средах: разные среды, используемые при разработке, тестировании и производстве, могут привести к тому, что необнаруженные проблемы попадут в производственную среду.
  • Тесты, требующие человеческого оракула: не все атрибуты качества можно проверить с помощью автоматизации. Эти атрибуты требуют участия людей в цикле, что замедляет конвейер доставки.

Чен поднял и разработал восемь дополнительных проблем усыновления.[6] Эти проблемы связаны с организационной структурой, процессами, инструментами, инфраструктурой, унаследованными системами, архитектурой для компакт-дисков, непрерывным тестированием нефункциональных требований и оптимизацией выполнения тестов.

Стратегии преодоления проблем усыновления

Сообщалось о нескольких стратегиях преодоления проблем с внедрением непрерывной доставки.[6]

Стратегии преодоления проблем принятия компакт-дисков
СтратегияОписание
Продажа компакт-диска в качестве обезболивающегоОпределите болевые точки каждой заинтересованной стороны, которые КР может решить, и продайте КД как болеутоляющее этому заинтересованному лицу. Эта стратегия помогает заручиться поддержкой широкого круга заинтересованных сторон, необходимого для реализации CD.
Специальная команда с мультидисциплинарными членамиБез специальной команды может быть трудно добиться прогресса, потому что сотрудников часто поручают работать над другими потоками создания ценности. Многопрофильная команда не только обеспечивает широкий спектр навыков, необходимых для внедрения CD, но и упрощает общение с соответствующими командами.
Непрерывная доставка непрерывной доставкиОрганизуйте внедрение CD таким образом, чтобы приносить пользу компании как можно раньше, вводя больше проектов постепенно, небольшими порциями и в конечном итоге развертывая CD по всей организации. Эта стратегия помогает оправдать требуемые инвестиции, делая очевидными конкретные выгоды. Видимые выгоды, в свою очередь, помогают обеспечить устойчивую поддержку компании и инвестиции, необходимые для того, чтобы выжить в долгом и трудном пути к CD.
Начиная с простых, но важных приложенийПри выборе первых нескольких приложений для переноса на компакт-диск выберите те, которые легко перенести, но которые важны для бизнеса. Легкость миграции помогает быстро продемонстрировать преимущества компакт-диска, что может предотвратить гибель инициативы по внедрению. Важность для бизнеса помогает обеспечить необходимые ресурсы, демонстрирует ясную и бесспорную ценность и повышает заметность CD в организации.
Каркас конвейера Visual CDДайте команде визуальный скелет конвейера CD, который имеет полное представление конвейера CD, но с пустыми этапами для тех, которые они еще не могут реализовать. Это помогает сформировать образ мыслей о компакт-дисках и сохранить импульс для принятия компакт-дисков. Каркас конвейера особенно полезен, когда переход команды на компакт-диск требует больших усилий и изменения мышления в течение длительного периода времени.
Падение экспертаНазначьте эксперта по компакт-дискам для участия в сложных проектах в качестве старшего члена команды разработчиков. Наличие эксперта в команде помогает создать мотивацию и импульс для перехода на CD изнутри команды. Это также помогает сохранить импульс, когда миграция требует больших усилий и длительного периода времени.

Смотрите также

дальнейшее чтение

  • Скромный, Джез; Фарли, Дэвид (2010). Непрерывная доставка: надежные выпуски программного обеспечения за счет автоматизации сборки, тестирования и развертывания. Эддисон-Уэсли. ISBN  978-0-321-60191-9.
  • Вольф, Эберхард (2017). Практическое руководство по непрерывной доставке. Эддисон-Уэсли. ISBN  978-0-134-69147-3.

Рекомендации

  1. ^ а б c Чен, Ляньпин (2015). «Непрерывная доставка: огромные преимущества, но и проблемы». Программное обеспечение IEEE. 32 (2): 50–54. Дои:10.1109 / MS.2015.27.
  2. ^ а б Шахин, Моджтаба; Али Бабара, Мухаммед; Чжу, Лиминг (2017). «Непрерывная интеграция, доставка и развертывание: систематический обзор подходов, инструментов, проблем и практик». IEEE доступ. 5: 3909–3943. arXiv:1703.07019. Bibcode:2017arXiv170307019S. Дои:10.1109 / ACCESS.2017.2685629.
  3. ^ Хаммонд, Джеффри (9 сентября 2011 г.). «Взаимосвязь между DevOps и непрерывной доставкой». Forrester Research. Лесник.
  4. ^ а б Скромный, Джез; Фарли, Дэвид (2011). Непрерывная доставка: надежные выпуски программного обеспечения за счет автоматизации сборки, тестирования и развертывания. Pearson Education Inc. ISBN  978-0-321-60191-9.
  5. ^ Свартаут, Пол (2012). Непрерывная доставка и DevOps: краткое руководство. Packt Publishing. ISBN  978-1849693684.
  6. ^ а б c Чен, Ляньпин (2017). «Непрерывная доставка: преодоление трудностей с усыновлением». Журнал систем и программного обеспечения. 128: 72–86. Дои:10.1016 / j.jss.2017.02.013.
  7. ^ "блики: ContinuousDelivery". martinfowler.com. Получено 2015-10-29.
  8. ^ Шахин, Моджтаба; Бабар, Мухаммед Али; Захеди, Мансура; Чжу, Лиминг (2017). «Помимо непрерывной доставки: эмпирическое исследование проблем непрерывного развертывания». 2017 Международный симпозиум ACM / IEEE по эмпирической разработке программного обеспечения и измерениям (ESEM). С. 111–120. Дои:10.1109 / ESEM.2017.18. ISBN  978-1-5090-4039-1.
  9. ^ Humble, J .; Читать, C .; Норт, Д. (2006). «Линия развертывания». Agile 2006 (Agile'06). С. 113–118. Дои:10.1109 / AGILE.2006.53. ISBN  0-7695-2562-8.
  10. ^ Фицджеральд, Брайан (2014-06-03). Непрерывная разработка программного обеспечения и не только: тенденции и проблемы (PDF). 1-й международный семинар по быстрой непрерывной разработке программного обеспечения. Нью-Йорк, штат Нью-Йорк: Ассоциация вычислительной техники. С. 1–9. Дои:10.1145/2593812.2593813. ISBN  978-1-4503-2856-2. Архивировано из оригинал (PDF) 2014-10-25. Получено 2014-10-24.
  11. ^ Клюге, Ларс (12 сентября 2013 г.). «Непрерывное развертывание с MongoDB в Kitchensurfing». slideshare.net. Получено 3 января 2014.
  12. ^ Дюваль, Поль (2012). «Непрерывная доставка: шаблоны и антипаттерны в жизненном цикле программного обеспечения» (PDF). Refcardz. Получено 9 октября, 2015.
  13. ^ Филлипс, Эндрю (29 июля 2014 г.). «Конвейер непрерывной доставки - что это такое и почему это так важно при разработке программного обеспечения». DevOps.com. Архивировано из оригинал 28 сентября 2015 г.. Получено 9 октября, 2015.
  14. ^ Бинсток, Эндрю (16 сентября 2014 г.). «Непрерывная доставка: гибкий преемник». Доктор Добб "Мир разработки программного обеспечения". Сан-Франциско: UBM.
  15. ^ Чен, Ляньпин (2015). К архитектуре для непрерывной доставки. 12-я рабочая конференция IEEE / IFIP по архитектуре программного обеспечения (WICSA 2015). Монреаль, Канада: IEEE. Дои:10.1109 / WICSA.2015.23.
  16. ^ а б Чен, Ляньпин (2018). Микросервисы: проектирование для непрерывной доставки и DevOps. Международная конференция IEEE по архитектуре программного обеспечения (ICSA 2018). IEEE.
  17. ^ а б c Leppänen, M .; Mäkinen, S .; Pagels, M .; Eloranta, V.P .; Itkonen, J .; Mäntylä, M. V .; Мяннистё, Т. (01.03.2015). «Шоссе и проселочные дороги к непрерывному развертыванию». Программное обеспечение IEEE. 32 (2): 64–72. Дои:10.1109 / MS.2015.50. ISSN  0740-7459.
  18. ^ «Внедрение непрерывной доставки в Yahoo!». confreaks.tv. 23 октября 2013 г.
  19. ^ «Скорость 2011: Джон Дженкинс,« Культура скорости »"". youtube.com. 20 июня 2011 г.
  20. ^ «Быстрое высвобождение в больших масштабах». 2017-08-31.
  21. ^ Хамбл, Джез (13 февраля 2014 г.). «Доводы в пользу непрерывной доставки». thinkworks.com. Получено 16 июля 2014.
  22. ^ jFrog (декабрь 2014 г.). "Революция непрерывной интеграции 2014 года".