continuous-integration - разница - continuous integration инструменты




Непрерывная интеграция, непрерывная доставка и непрерывное развертывание. (8)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

Итак, размер имеет значение:

small task = continuous integration
big task   = frequent integration

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

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

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

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

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

Непрерывная доставка связана с Agile Software Development

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

Принятие во внимание первого принципа в Agile Manifesto, где термин «непрерывная доставка» фактически используется впервые:

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

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

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

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

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

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

В какую школу поступить

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

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

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

Непрерывное развертывание

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

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

Тот факт, что непрерывное развертывание не является чем-то интересным для всех, также является аргументом, что школа, которая утверждает, что «доставка» и «развертывание» являются синонимами, все неправильно поняла. Потому что Continuous Delivery на самом деле имеет смысл для всех, даже если вы делаете встроенное программное обеспечение в устройствах или выпускаете плагины с открытым исходным кодом для платформы.

Определение вашего университета, что Непрерывное развертывание является естественным следующим шагом Непрерывной доставки, подразумевает, что каждая поставленная QA поставка должна стать доступной для конечных пользователей немедленно, ближе к определению, которое мое племя использует для описания термина «Непрерывная доставка». Release », что, в свою очередь, является еще одной концепцией, которая не имеет общего смысла для всех.

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

Опять же, я верю, что ваш университет ошибся. Они принимают «Непрерывное развертывание» за «Непрерывное освобождение».

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

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

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

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


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

В мире устройств, подключенных к IoT, множество функций Scrum, таких как владелец продукта, Интернет, мобильные устройства и QA, работают в гибкой манере цикла Scrum, чтобы доставить продукт конечному покупателю.

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

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

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

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


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

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

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: Я хотел бы отметить, что есть разница между концепцией «непрерывной доставки», как указано в первом принципе Agile Manifesto ( http://agilemanifesto.org/principles.html ) и практикой непрерывной доставки, как представляется, на что ссылается контекст вопроса. Принцип непрерывной доставки заключается в стремлении сократить отходы инвентаризации, как описано в Lean мышление ( http://www.miconleansixsigma.com/8-wastes.html ). Практика непрерывной доставки (CD) гибкими командами появилась за многие годы, прошедшие с момента написания Agile Manifesto в 2001 году. Эта гибкая практика напрямую затрагивает этот принцип, хотя это разные вещи и, очевидно, их легко спутать.


Я думаю, что определение Амазонки является прямым и простым для понимания.

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

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

Пожалуйста, ознакомьтесь с http://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html


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

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


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

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

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

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

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


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

Наслаждайтесь! :-)

# Я обновил правильное изображение ...