Непрерывной интеграции и непрерывной доставки и непрерывное развертывание


в чем разница между этими тремя терминами? Мой университет предоставляет следующие определения:

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

Непрерывная Доставка описывается как логическая эволюция непрерывной интеграции: всегда быть в состоянии поставить продукт в производство!

непрерывный Развертывание описывается как логический следующий шаг после непрерывной доставки: автоматическое развертывание продукта в производство всякий раз, когда он проходит QA!

Они также предоставляют предупреждение: иногда термин "непрерывное развертывание" также используется, если вы можете непрерывно развертываться в тестовой системе.

все это оставляет меня в замешательстве. Любое объяснение, которое немного более подробно (или поставляется с примером), ценится!

10 303

10 ответов:

Непрерывная Интеграция

Я согласен с определением вашего вуза. Непрерывная Интеграция это стратегия для того, как разработчик может интегрировать код в магистраль непрерывно - в отличие от часто.

вы можете утверждать, что это просто стратегия ветвления в вашей системе управления версиями.

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

Так что размер имеет значение:

small task = continuous integration
big task   = frequent integration

идеальный размер задачи не больше, чем рабочий день. Таким образом, разработчик, естественно, будет иметь по крайней мере одну интеграцию в день.

Непрерывная Доставка

есть в основном три школы в рамках непрерывной поставки:

непрерывная поставка естественное выдвижение Непрерывная Интеграция

эта школа, смотрит на Аддисон-Уэсли "Мартин Фаулер" подпись серии и делает предположение, что с 2007 года выпуска был назван "Непрерывной Интеграции" и тот, который последовал в 2011 году назывался "Непрерывной Подачи" они, вероятно, том 1+2 той же концептуальной идеи, которая имеет отношение к непрерывному что-то.

непрерывная поставка должна сделайте с гибкой разработкой программного обеспечения

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

принимая смещение в первом принципе в Agile Manifesto где термин "непрерывная поставка" используется в первый раз:

нашим главным приоритетом является удовлетворение заказчика посредством ранней и непрерывной поставки ценного программного обеспечения.

эта школа утверждает, что" непрерывная доставка " является парадигмой, которая охватывает все необходимое для реализации автоматизированной проверки Вашего "определение сделано".

эта школа принимает эту "непрерывную доставку" и модное слово или мегатренд "DevOps" являются оборотными сторонами одной и той же монеты, в том смысле, что они оба пытаются охватить или инкапсулировать эту новую парадигму или подход, а не только технику.

непрерывная доставка является синонимом непрерывного развертывания

третья школа выступает за это Непрерывное Развертывание и Непрерывная Доставка взаимозаменяемы и означают одно и то же.

когда что-то готово в руках разработчиков, оно немедленно доставляется конечным пользователям, которые в в большинстве случаев это означает, что он должен быть развернут в рабочей среде. Следовательно, "развернуть" и "доставить" означает то же самое.

к какой школе присоединиться

ваш университет явно присоединился к первой школе и утверждает, что мы имеем в виду том 1+2 той же серии публикаций. Я считаю, что это неправильное использование термина непрерывная поставка.

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

школа, которая использует доставка как синоним для развернуть в основном пропагандируется поставщиками инструментов, которые создают консоли развертывания, пытаясь получить немного шумихи от более широкого использования термина Непрерывная Доставка.

непрерывный Развертывание

акцент на непрерывном развертывании в основном актуален в доменах, где доступ конечного пользователя к обновлениям программного обеспечения зависит от обновления некоторого централизованного источника для этой информации и где этот централизованный источник не всегда легко обновить, потому что он монолитен или имеет (слишком) высокую когерентность по своей природе (web, SOA, базы данных и т. д.).

для многих доменов, которые производят программное обеспечение, где нет централизованного источника информации (устройства, потребитель продукты, установки клиента etc.) или там, где централизованный источник информации легко обновлять (системы управления артефактами в магазинах приложений, репозитории с открытым исходным кодом и т. д.), почти нет шумихи по поводу термина непрерывное развертывание вообще. Они просто разворачиваются; это не большая вещь - это не боль, которая требует особого внимания.

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

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

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

снова я считаю, что ваш университет ошиблись. Они ошибочно принимают " непрерывное развертывание "за"непрерывный выпуск".

непрерывное развертывание-это просто дисциплина, позволяющая непрерывно перемещать результат процесса разработки в производственная среда, в которой функциональное тестирование может быть выполнено в полном масштабе.

Непрерывная Сюжетная Линия Доставка

на картинке все оживает:

enter image description here

процесс непрерывной интеграции-это первые два действия на диаграмме состояния-перехода. который-в случае успеха-запускает конвейер непрерывной доставки, который реализует определение сделано. Развертывание-это просто одно из многих действий, которые необходимо будет постоянно выполнять в этом конвейере. В идеале, процесс автоматизирован от точки, где разработчик фиксирует VCS до точки, где конвейер подтвердил, что у нас есть действительный кандидат на выпуск.

ни вопрос, ни ответы на самом деле не соответствуют моему простому способу мышления об этом. Я консультант и синхронизировал эти определения с несколькими командами разработчиков и людьми DevOps, но мне любопытно, как это соответствует отрасли в целом:

в основном я думаю о гибкой практике непрерывной доставки, как континуум:

не непрерывный (все руководство) 0% ----> 100% непрерывная поставка стоимости (все автоматизированный)

шаги к непрерывной доставке:

ноль. Ничто не автоматизируется, когда разработчики проверяют код... Вам повезло, если они скомпилировали, запустили или выполнили какое-либо тестирование до регистрации.

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

  2. непрерывная интеграция (CI): автоматизированное построение и выполнение по крайней мере модульных тестов для доказательства интеграции нового кода с существующим кодом, но предпочтительно интеграционные тесты (сквозные).

  3. непрерывное развертывание (CD): автоматическое развертывание, когда код передает CI по крайней мере в тестовую среду, предпочтительно в более высокие среды, когда качество доказано либо через CI, либо путем маркировки более низкой среды, как прошло после ручного тестирования. Т. е., тестирование может быть ручным в некоторых случаях, но продвижение к следующей среде происходит автоматически.

  4. Непрерывная Поставка: автоматизированная публикация и выпуск системы в производство. Это CD в производство плюс любые другие изменения конфигурации, такие как настройка для тестирования A/B, уведомление пользователей о новых функциях, уведомление о поддержке новой версии и заметок об изменениях и т. д.

EDIT: я хотел бы отметить, что есть разница между понятием " непрерывный поставка", как указано в первом принципе гибкого Манифеста (http://agilemanifesto.org/principles.html) и практика непрерывной доставки, на которую, как представляется, ссылается контекст вопроса. Принцип непрерывной доставки заключается в стремлении сократить количество отходов, как описано в Lean thinking (http://www.miconleansixsigma.com/8-wastes.html). практика непрерывной доставки (CD) гибкими командами появилась во многих годы с тех пор, как Agile Manifesto был написан в 2001 году. Эта гибкая практика непосредственно обращается к принципу, хотя они разные вещи и, по-видимому, легко путаются.

Я думаю определение Амазонии прямо и просто понять.

"непрерывная доставка - это методология разработки программного обеспечения, где процесс выпуска автоматизирован. Каждое изменение программного обеспечения автоматически создается, тестируется и развертывается в производство. Перед окончательным толчком к производству человек, автоматизированный тест или бизнес-правило решает, когда должен произойти последний толчок. Хотя каждое успешное изменение программного обеспечения может быть немедленно выпущенный в производство с непрерывной доставкой, не все изменения должны быть выпущены сразу.

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

пожалуйста, проверьте http://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html

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

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

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

Это может привести к проблемам. Плохая организация кода/задачи приводит к ветвлению, ветвление приводит к слиянию, слиянию... ведет к страданиям. Непрерывная интеграция как практика решает эту проблему, поощряя всех работать из одного и того же общего источника. Индивидуальная работа элементы должны быть достаточно дискретными, чтобы быть завершены в короткий промежуток времени (часы максимум).

в основном общая идея заключается в том, что интеграция небольшого изменения в небольшой объем работы. Интеграция больших изменений-это непропорционально большой объем работы. Совокупность интеграционных работ меньше, если они выполняются постоянными небольшими шагами. Это позволяет разработчикам тратить больше времени на работу с бизнес-видимыми функциями вместо накладных расходов на процесс разработки.

непрерывная поставка описывается как логическая эволюция непрерывной интеграции: всегда быть в состоянии поставить продукт в производство!

Это следует той же идее отдельных, четко определенных рабочих элементов. Если есть одна основная кодовая база, которая только когда-либо корректируется с небольшими приращениями полными, проверенными, известными рабочими функциями, то эта кодовая база всегда стабильна. Автоматизированное тестирование является ключевым, чтобы иметь возможность доказать, что стабильность при нажатии кнопка.

чем меньше работы по стабилизации, которая должна быть выполнена (что, опять же, является накладными расходами процесса разработки и должно быть устранено), тем чаще эта кодовая база может быть перенесена в любую заданную среду. Во многих компаниях развертывание может быть довольно изнурительным процессом. Даже через неделю-все-руки-на-палубе операцию. Это дорого и не производит никакой ценности для бизнеса. Используя хорошие определения рабочих элементов, эффективное автоматизированное тестирование и непрерывную интеграцию, команда может быть в состоянии автоматизировать доставку кода в любых условиях.

непрерывное развертывание описывается как логический следующий шаг после непрерывной доставки: автоматическое развертывание продукта в производство всякий раз, когда он проходит QA!

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

исправления дефектов отправляются клиентам быстрее, новые функции быстрее достигают рынка, новые идеи тестируются на рынке с меньшими шагами, чтобы обеспечить перенаправление приоритетов и т. д.

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

  1. потратьте месяцы на разработку всего этого в одной ветке. Потратьте недели на интеграцию его обратно в основную кодовую базу. Потратьте несколько дней на его тестирование. Потратьте день на его развертывание. И только затем начните отслеживать фактический доход в производстве система.
  2. реализовать небольшие части функции, по одному за раз. Каждую неделю выпускайте новую его часть. Каждую неделю получайте больше данных о фактической выручке.

в первом сценарии, если функция не имеет желаемого рыночного эффекта, то большое деньги тратятся на то, что клиенты на самом деле не хотят. Во втором сценарии тот факт, что клиенты не хотят этого, определяется намного раньше, а остальная часть работы лишен приоритета.


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

Atlassian опубликовал хорошее объяснение о непрерывной интеграции и непрерывной доставки и непрерывное развертывание.

ci-vs-ci-vs-cd

в двух словах:

Непрерывная Интеграция - is автоматизация для построения и тестирования приложения при каждом вводе новых коммитов в ветвь.

Непрерывная Доставка - это Непрерывная Интеграция + развернуть приложение в производство, "нажав на кнопку" (релиз для клиентов часто, но по требованию).

Непрерывное Развертывание - is Непрерывная Доставка но без человеческого вмешательства (выпуск для клиентов продолжается).

один график может заменить много слов:

enter image description here

наслаждайтесь... : -)

# я обновил правильный образ...

разница между непрерывной интеграцией, непрерывной доставкой и непрерывным развертыванием

enter image description here

Я думаю, что мы закончили анализ и, возможно, немного усложнили "непрерывный" набор слов. В этом контексте непрерывность означает автоматизацию. Для других слов, прилагаемых к "непрерывному", используйте английский язык в качестве руководства по переводу и, пожалуйста, не пытайтесь усложнить ситуацию! В "непрерывной сборке" мы автоматически создаем (пишем/компилируем/связываем/и т. д.) наше приложение во что-то исполняемое для конкретной платформы/контейнера/среды выполнения/и т. д. "Непрерывная интеграция" означает, что ваш новый функциональные возможности тестируются и выполняются по назначению при взаимодействии с другим объектом. Очевидно, что перед интеграцией должна произойти сборка, и тщательное тестирование также будет использоваться для проверки интеграции. Таким образом, в" непрерывной интеграции " используется автоматизация для добавления ценности к существующему ведру функциональности таким образом, чтобы это не отрицательно нарушало существующую функциональность, а скорее хорошо интегрировалось с ней, добавляя воспринимаемую ценность к целому. Интеграция подразумевает, по своему простое английское определение, что вещи Jive гармонично сочетаются в коде-talk my add компилирует, связывает, тестирует и отлично работает в целом. Вы бы не назвали что-то интегрированным, если бы это не удалось конечному продукту, не так ли?! В нашем контексте "непрерывное развертывание "является синонимом" непрерывной доставки", так как в конце дня мы предоставили функциональность нашим клиентам. Однако, проанализировав это, я мог бы утверждать, что развертывание является подмножеством доставки, потому что развертывание чего-то не делает обязательно имею в виду, что мы доставили. Мы развернули код, но из-за того, что мы не эффективно общались с нашими заинтересованными сторонами, мы не смогли доставить с точки зрения бизнеса! Мы развернули войска, но не доставили обещанную воду и продовольствие в соседний город. Что, если я добавлю термин "непрерывный переход", будет ли он иметь свою собственную заслугу? В конце концов, возможно, это лучше подходит для описания движения кода через среды, так как он имеет коннотацию "от/до" более того чем развертывание или доставка, которые могут подразумевать только одно место, в вечности! Это то, что мы получаем, если не применяем здравый смысл.

В заключение, это простой материал для описания (делать это немного больше ...сложно!), просто используйте здравый смысл, английский язык, и вы будете в порядке.

DevOps-это комбинация 3C -непрерывно,сообщении,сотрудничество и это водит к главному Фокусу в различных индустриях.

в мире устройств, подключенных к IoT, несколько функций scrum, таких как product owner, web, mobile и QA, работают гибко в scrum цикла scrum, чтобы доставить продукт конечному клиенту.

непрерывная интеграция: множественная работа функции scrum одновременно в нескольких конечных точках

непрерывная поставка: С внедрением и развертыванием, поставка продукта к множественным клиентам, котор нужно отрегулировать в тоже время.

непрерывное развертывание: несколько продуктов, развернутых для нескольких клиентов на нескольких платформах.

смотрите это, чтобы узнать, как DevOps позволяет IoT connected world:https://youtu.be/nAfZt2t4HqA

Непрерывная Интеграция: практика слияния разработки с основной веткой постоянно так, что код был протестирован как можно чаще, чтобы поймать проблемы на ранней стадии.

Непрерывная Поставка: непрерывная поставка код в среду после того, как код готов к отправке. Это может быть постановка или производство. Идея продукт поставлена к основанию потребителя, которое может быть QA или клиентами для просмотрения и осмотра.

модульный тест во время фазы непрерывной интеграции не может поймать все ошибки и бизнес-логики, в частности, вопросы проектирования, поэтому нам нужно QA, или промежуточная среда для тестирования.

Непрерывное Развертывание: развертывание или выпуск кода, как только он будет готов. Непрерывное развертывание требует непрерывной интеграции и непрерывной доставки, в противном случае качество кода не будет гарантировано в выпуске.

непрерывный Развертывание ~ ~ Непрерывная Интеграция + Непрерывное Истощение