В чем разница между этими тремя терминами? Мой университет дает следующие определения:
Непрерывная интеграция в основном означает, что рабочие копии разработчика синхронизируются с общей магистралью несколько раз в день.
Непрерывная поставка описывается как логическая эволюция непрерывной интеграции: всегда иметь возможность запустить продукт в производство!
Непрерывное развертывание описывается как логический следующий шаг после непрерывной доставки: автоматическое развертывание продукта в производстве при каждом прохождении QA!
Они также дают предупреждение: иногда термин «Непрерывное развертывание» также используется, если вы можете непрерывно развертываться в тестовой системе.
Все это оставляет меня в замешательстве. Любое объяснение, которое немного более подробно (или идет с примером), приветствуется!
Ответы:
Непрерывная интеграция
Я согласен с определением вашего университета. Непрерывная интеграция - это стратегия, позволяющая разработчику непрерывно интегрировать код в основную линию, а не часто.
Вы можете утверждать, что это просто стратегия ветвления в вашей системе контроля версий.
Это связано с размером задач, которые вы назначаете разработчику; Если оценивается, что задача занимает 4-5 человеко-дней, то у разработчика не будет побуждения что-либо делать в течение следующих 4-5 дней, потому что он еще ничего не сделал - пока.
Итак, размер имеет значение:
Идеальный размер задачи не превышает дневной работы. Таким образом, разработчик, естественно, будет иметь по крайней мере одну интеграцию в день.
Непрерывная доставка
В рамках Непрерывной Доставки в основном есть три школы :
Непрерывная доставка является естественным продолжением непрерывной интеграции
Эта школа рассматривает серию подписей «Мартин Фаулер» Аддисона-Уэсли и делает предположение, что с тех пор, как выпуск 2007 года назывался «Непрерывная интеграция», а тот, что последовал в 2011 году, назывался «Непрерывная доставка», они, вероятно, представляют собой том 1 + 2. той же концептуальной идеи, которая имеет отношение к непрерывному что-то .
Непрерывная доставка связана с Agile Software Development
Эта школа отталкивается от идеи, что «Непрерывная поставка» - это способность поддерживать принципы гибкого движения, причем не просто как концептуальная идея или письмо о намерениях, но для реальной жизни - в реальной жизни.
Принятие во внимание первого принципа в Agile Manifesto, где термин «непрерывная доставка» фактически используется впервые:
Эта школа утверждает, что «Непрерывная доставка» - это парадигма, охватывающая все, что требуется для автоматической проверки вашего «определения выполненного» .
Эта школа признает, что «Непрерывная доставка» и модное слово или мегатренд «DevOps» являются оборотными сторонами одной медали, в том смысле, что они оба пытаются охватить или заключить в капсулу эту новую парадигму или подход, а не просто технику.
Непрерывная доставка - это синоним непрерывного развертывания.
Третья школа отстаивает, что непрерывное развертывание и непрерывная доставка могут использоваться взаимозаменяемо для обозначения одного и того же.
Когда что-то готово в руках разработчиков, оно немедленно доставляется конечным пользователям, что в большинстве случаев означает, что оно должно быть развернуто в производственной среде. Следовательно, «Развернуть» и «Доставить» означает одно и то же.
В какую школу поступить
Ваш университет явно присоединился к первой школе и утверждает, что мы имеем в виду том 1 + 2 той же серии публикаций. Мое мнение таково, что это неправильное использование термина непрерывная доставка.
Я лично отстаиваю понимание того, что непрерывная доставка связана с реализацией реальной поддержки идей и концепций, заявленных гибким движением. Поэтому я присоединился к школе, которая говорит, что термин охватывает целую парадигму, например, «DevOps».
Школа, которая использует доставку в качестве синонима для развертывания, в основном поддерживается поставщиками инструментов, которые создают консоли развертывания, пытаясь получить немного шумихи от более широкого использования термина « Непрерывная доставка» .
Непрерывное развертывание
Внимание к непрерывному развертыванию в основном относится к доменам, где доступ конечного пользователя к обновлениям программного обеспечения зависит от обновления какого-либо централизованного источника этой информации и где этот централизованный источник не всегда легко обновить, поскольку он монолитный или имеет (слишком) высокую согласованность по своей природе (веб, SOA, базы данных и т. д.).
Для большого количества доменов, которые производят программное обеспечение, где нет централизованного источника информации (устройства, потребительские продукты, клиентские установки и т. Д.) Или где централизованный источник информации легко обновляется (в приложениях хранятся системы управления артефактами, репозитории с открытым исходным кодом и т. Д. ), термин «непрерывное развертывание» почти не афишируется. Они просто развернуты; это не большая вещь - это не боль, которая требует особого внимания.
Тот факт, что Непрерывное развертывание не является чем-то интересным для всех, является также аргументом, что школа, которая утверждает, что «доставка» и «развертывание» являются синонимами, все неправильно поняла. Потому что Continuous Delivery на самом деле имеет смысл для всех, даже если вы используете встроенное программное обеспечение для устройств или выпускаете плагины с открытым исходным кодом для платформы.
Определение вашего университета, что Непрерывное развертывание является естественным следующим шагом Непрерывной доставки, подразумевает, что каждая поставляемая QA-поставка должна немедленно стать доступной для конечных пользователей, ближе к определению, которое мое племя использует для описания термина «Непрерывная доставка». Release », что, в свою очередь, является еще одной концепцией, которая не имеет общего смысла для всех.
Релиз может быть очень стратегическим или политическим, и нет никаких оснований предполагать, что все захотят делать это все время (если только они не являются книжным интернет-магазином, предоставляющим услуги потоковой передачи). Тем не менее, у компаний, которые не выпускают вслепую все время, может быть множество причин, по которым они в любом случае хотят стать хозяевами развертывания, поэтому они тоже делают непрерывное развертывание . Не для выпуска в производство, а для кандидатов в версии для производственной среды.
Опять же, я верю, что ваш университет ошибся. Они принимают «Непрерывное развертывание» за «Непрерывное освобождение».
Непрерывное развертывание - это просто дисциплина непрерывной возможности переносить результат процесса разработки в производственную среду, где функциональное тестирование может выполняться в полном объеме.
Непрерывная история доставки
На картинке все это оживает:
Процесс непрерывной интеграции - это первые два действия на диаграмме перехода состояний. который - в случае успеха - запускает конвейер непрерывной доставки, который реализует определение готового . Развертывание - это всего лишь одно из многих действий, которые должны выполняться постоянно в этом конвейере. В идеале, процесс автоматизирован с момента, когда разработчик фиксирует VCS, до момента, когда конвейер подтвердил, что у нас есть действующий кандидат на выпуск.
источник
Ни вопрос, ни ответы не соответствуют моему простому образу мышления. Я являюсь консультантом и синхронизировал эти определения с рядом команд разработчиков и разработчиков DevOps, но мне интересно, как они соотносятся с отраслью в целом:
В основном я думаю о гибкой практике непрерывной доставки как о континууме:
Непрерывно (все вручную) 0% ----> 100% непрерывная доставка стоимости (все автоматизировано)
Шаги к непрерывной доставке:
Нуль. Ничто не автоматизируется, когда разработчики регистрируют код ... Вам повезло, если они скомпилировали, запустили или выполнили какое-либо тестирование до регистрации.
Непрерывная сборка: автоматическая сборка при каждой регистрации, что является первым шагом, но никак не доказывает функциональную интеграцию нового кода.
Непрерывная интеграция (CI): автоматическая сборка и выполнение как минимум модульных тестов, чтобы доказать интеграцию нового кода с существующим кодом, но предпочтительно интеграционные тесты (сквозные).
Непрерывное развертывание (CD): автоматическое развертывание, когда код передает CI по крайней мере в тестовую среду, предпочтительно в более высокие среды, когда качество подтверждается либо посредством CI, либо путем пометки более низкой среды как PASSED после ручного тестирования. То есть, тестирование может быть ручным в некоторых случаях, но продвижение в следующую среду происходит автоматически.
Непрерывная поставка: автоматическая публикация и выпуск системы в производство. Это компакт-диск в производство и любые другие изменения конфигурации, такие как настройка для 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
источник
Atlassian опубликовал хорошее объяснение непрерывной интеграции, непрерывной доставки и непрерывного развертывания .
В двух словах:
Непрерывная интеграция - это автоматизация для создания и тестирования приложения всякий раз, когда в ветку добавляются новые коммиты.
Непрерывная доставка - это Continuous Integration + Развертывание приложения в производство «нажатием на кнопку» (выпуск для клиентов часто, но по требованию).
Непрерывное развертывание - это непрерывная доставка, но без участия человека (выпуск для клиентов продолжается).
источник
Или больше, чем несколько раз в день. Так часто, как любая конкретная задача выполнена, в основном. Рассмотрим, например, команду разработчиков, работающих над одним бизнес-приложением. Во многих средах может произойти следующее:
Это может привести к проблемам. Плохая организация кода / задачи приводит к ветвлению, ветвление приводит к слиянию, слияние ... приводит к страданию Непрерывная интеграция как практика решает эту проблему, поощряя всех работать из одного общего источника. Отдельные рабочие элементы должны быть достаточно дискретными, чтобы их можно было выполнить за короткий промежуток времени (максимум часов).
По сути, общая идея заключается в том, чтобы объединить небольшое изменение в небольшом объеме работы. Интеграция большого изменения - это непропорционально большой объем работы. Совокупность интеграционных работ меньше, если они выполняются небольшими постоянными шагами. Это позволяет разработчикам тратить больше времени на работу с бизнес-функциями, а не на процесс разработки.
Это следует той же идее дискретных, четко определенных рабочих элементов. Если есть одна основная кодовая база, которая когда-либо корректируется только небольшими приращениями с помощью полных, проверенных, известных рабочих функций, то эта кодовая база всегда стабильна. Автоматизированное тестирование является ключевым моментом, чтобы можно было доказать эту стабильность одним нажатием кнопки.
Чем меньше работы по стабилизации, которую необходимо выполнить (что опять-таки является издержками процесса разработки и должно быть исключено), тем чаще эта кодовая база может быть передана в любую конкретную среду. Во многих компаниях развертывание может быть довольно изнурительным процессом. Даже недельная операция на руках. Это дорого и не приносит никакой коммерческой ценности. Используя правильные определения рабочих элементов, эффективное автоматизированное тестирование и непрерывную интеграцию, команда может автоматизировать доставку кода в любую среду.
Вы редко увидите, как это происходит в бизнес-среде, и это большая радость, когда это происходит. Если кодовая база может быть автоматически протестирована и автоматически развернута в любой заданной среде, то, значит, производство - это среда, подобная любой другой. Таким образом, если команда достигла этого уровня, существует потенциал для значительных выгод для бизнеса, поскольку вы всегда можете развернуть обновления для производства.
Исправления дефектов отправляются клиентам быстрее, новые функции достигают рынка быстрее, новые идеи проверяются на рынке с меньшими приращениями, что позволяет перенаправлять приоритеты и т. Д.
Например, скажем, у компании есть отличная идея для новой функции в программном продукте или услуге. Они провели некоторое исследование, они знают рынок, и они верят, что эта идея приведет к сильной новой линии дохода. Теперь рассмотрим два варианта доставки этой функции:
В первом сценарии, если функция не имеет желаемого рыночного эффекта, тогда много денег тратится на то, что клиенты на самом деле не хотят. Во втором сценарии тот факт, что клиенты не хотят этого, определяется намного, намного раньше, а остальная часть работы лишается приоритетов.
В конечном итоге эти «непрерывные вещи» направлены на устранение накладных расходов процесса разработки. Если выручка компании представляет собой конкретное предложение услуг, то в идеале все расходы должны быть включены в это предложение. Затраты на процесс разработки (слияние кода, повторное тестирование тех же функций после слияния, задачи ручного развертывания и т. Д.) На самом деле не влияют на ценность службы, поэтому эти концепции стремятся устранить эти затраты из процесса.
источник
Один график может заменить много слов:
Наслаждайтесь! :-)
# Я обновил правильное изображение ...
источник
Разница между непрерывной интеграцией, непрерывной доставкой и непрерывным развертыванием
источник
Я думаю, что мы закончили анализ и, возможно, немного усложнили «непрерывный» набор слов. В этом контексте непрерывность означает автоматизацию. Для других слов, добавленных к «непрерывному», используйте английский язык в качестве руководства по переводу, и, пожалуйста, не пытайтесь усложнить ситуацию! В «непрерывной сборке» мы автоматически собираем (пишем / компилируем / ссылаемся / и т. Д.) Наше приложение во что-то исполняемое для конкретной платформы / контейнера / среды выполнения / и т. Д. «Непрерывная интеграция» означает, что ваша новая функциональность тестируется и работает так, как задумано, при взаимодействии с другим объектом. Очевидно, что до того, как произойдет интеграция, должна произойти сборка, и для ее проверки также необходимо провести тщательное тестирование. Итак, в «непрерывной интеграции» каждый использует автоматизацию, чтобы повысить ценность существующего набора функций таким образом, чтобы это не отрицательно нарушало существующую функциональность, а скорее интегрировалось с ней, добавляя воспринимаемую ценность ко всему. Интеграция подразумевает, по своему простому английскому определению, что вещи гармонично сочетаются друг с другом, поэтому при кодовом разговоре мои дополнения компилируются, связываются, тестируются и отлично работают в целом. Вы бы не назвали что-то интегрированным, если бы это не дало конечный продукт, не так ли? В нашем контексте «Непрерывное развертывание» является синонимом «непрерывной доставки», поскольку в конце концов мы предоставили функциональность нашим клиентам. Однако, чрезмерно проанализировав это, я могу утверждать, что развертывание является подмножеством доставки, поскольку развертывание чего-либо не обязательно означает, что мы доставили. Мы развернули код, но потому что у нас нет Мы эффективно не общались с заинтересованными сторонами, но мы не смогли реализовать их с точки зрения бизнеса! Мы развернули войска, но мы не доставили обещанную воду и еду в соседний город. Что если я добавлю термин «непрерывный переход», будет ли он иметь свои достоинства? В конце концов, может быть, он лучше подходит для описания движения кода в средах, поскольку он имеет коннотацию «от / до» в большей степени, чем развертывание или доставка, которая может подразумевать только одно местоположение, навсегда! Это то, что мы получаем, если не применяем здравый смысл. будет ли это иметь свои достоинства? В конце концов, может быть, он лучше подходит для описания движения кода в средах, поскольку он имеет коннотацию «от / до» в большей степени, чем развертывание или доставка, которая может подразумевать только одно местоположение, навсегда! Это то, что мы получаем, если не применяем здравый смысл. будет ли это иметь свои достоинства? В конце концов, может быть, он лучше подходит для описания движения кода в средах, поскольку он имеет коннотацию «от / до» в большей степени, чем развертывание или доставка, которая может подразумевать только одно местоположение, навсегда! Это то, что мы получаем, если не применяем здравый смысл.
В заключение, это простой материал для описания (делать это немного ... сложнее!), Просто используйте здравый смысл, английский язык, и все будет хорошо.
источник
Непрерывная интеграция: практика постоянного объединения работ по разработке с основной ветвью, чтобы код тестировался как можно чаще для выявления проблем на ранних этапах.
Непрерывная доставка: непрерывная доставка кода в среду, как только код готов к отправке. Это может быть постановка или постановка. Идея заключается в том, что продукт доставляется в пользовательскую базу, которая может быть проверена или проверена QA или клиентами.
Модульное тестирование на этапе непрерывной интеграции не может выявить все ошибки и бизнес-логику, в частности, проблемы проектирования, поэтому нам требуется QA или промежуточная среда для тестирования.
Непрерывное развертывание: развертывание или выпуск кода, как только он будет готов. Непрерывное развертывание требует непрерывной интеграции и непрерывной доставки, в противном случае качество кода не будет гарантировано в выпуске.
Непрерывное развертывание ~~ Непрерывная интеграция + Непрерывная доставка
источник
Непрерывная интеграция
Непрерывная доставка
Непрерывное развертывание
CI / CD - это путешествие. Не пункт назначения.
Сноска:
Практика непрерывной интеграции и непрерывной доставки на AWS
источник
Источник: https://thenucleargeeks.com/2020/01/21/continuous-integration-vs-continuous-delivery-vs-continuous-deployment/
Что такое непрерывная интеграция Непрерывная интеграция - это процесс или практика разработки автоматизированной сборки и автоматического тестирования, т.е. разработчик должен многократно фиксировать свой код в общем хранилище, где каждая интеграция проверяется с помощью автоматической сборки и тестирования.
Если сборка не удалась / об успехе, она уведомляется разработчику, а затем он может предпринять соответствующие действия.
Что такое непрерывная доставка Непрерывная доставка - это практика, при которой мы сохраняем наш код развертываемым в любой точке, которая прошла весь тест и имеет всю необходимую конфигурацию для продвижения кода в производство, но еще не развернута.
Что такое непрерывное развертывание С помощью CI мы создали сборку для нашего приложения и готовы приступить к работе. На этом этапе наша сборка готова, и с CD мы можем развернуть наше приложение непосредственно в среде QA, и, если все пойдет хорошо, мы можем развернуть ту же сборку для производства.
Таким образом, непрерывное развертывание на один шаг дальше, чем непрерывная доставка. С этой практикой каждое изменение, которое проходит все стадии производственного процесса, передается вашим клиентам.
Непрерывное развертывание - это комбинация управления конфигурацией и контейнерирования.
Управление конфигурацией: CM - это поддержка конфигурации сервера, которая будет совместима с требованиями приложения.
Контейнерирование . Контейнерность - это набор плат, который будет поддерживать согласованность в среде.
Источник Img: https://www.atlassian.com/
источник
DevOps представляет собой сочетание 3C - х - непрерывной , коммуникации , совместной работы и это приведет к прайм фокуса в различных отраслях промышленности.
В мире устройств, подключенных к IoT, множество функций Scrum, таких как владелец продукта, Интернет, мобильные устройства и QA, работают в гибкой манере цикла Scrum, чтобы доставить продукт конечному покупателю.
Посмотрите, чтобы узнать, как DevOps позволяет подключаться к миру IoT: https://youtu.be/nAfZt2t4HqA
источник
Из того, что я узнал с Алексом Коуэном в курсе « Непрерывная доставка и DevOps» , CI и CD являются частью конвейера продуктов, который состоит из времени, от перехода от наблюдений к выпущенному продукту.
Цель - от наблюдений до дизайна - получить идеи для тестирования высокого качества. Эта часть процесса считается непрерывным дизайном .
Что произойдет после того, как мы перейдем к Коду и далее, он считается возможностью непрерывной доставки , целью которой является быстрое воплощение идей и предоставление заказчику (вы можете прочитать книгу Джеза Хамбла « Непрерывная доставка: надежные выпуски программного обеспечения посредством сборки, тестирования, и Deployment Automation для более подробной информации). Следующий конвейер объясняет, из каких этапов состоят непрерывная интеграция (CI) и непрерывная доставка (CD).
Непрерывная интеграция , как объясняет Маттиас Петтер Йоханссон ,
(вы можете посмотреть следующие два видео для более практического обзора, используя CircleCI - Начало работы с CircleCI - Непрерывная интеграция P2 и Запуск CircleCI по запросу на извлечение ).
Можно указать конвейер CI / CD следующим образом, который идет от нового кода к выпущенному продукту.
Первые три шага связаны с тестами, расширяя границы тестируемого.
Непрерывное развертывание , с другой стороны, должно обрабатывать развертывание автоматически. Таким образом, любой коммит кода, который проходит этап автоматического тестирования, автоматически запускается в производство.
Примечание : это не обязательно, как должны выглядеть ваши конвейеры, но они могут служить ссылкой.
источник
давайте будем коротки:
CI: практика разработки программного обеспечения, когда члены команды интегрируют свою работу по крайней мере ежедневно. Каждая интеграция проверяется с помощью автоматической сборки (включая тесты), чтобы максимально быстро обнаружить ошибку. CD: CD Построен на CI, где вы создаете программное обеспечение таким образом, что программное обеспечение может быть выпущено в производство в любое время.
источник