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

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

Ответы

Ответ 1

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

Процесс лучше всего автоматизировать с использованием сервера сборки, который также может выполнять любые тесты Unit. Затем обратная связь предоставляется разработчикам в случае сбоя сборки/теста, так что любые проблемы могут быть исправлены быстро.

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

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

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

Ответ 2

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

http://blog.assembla.com/assemblablog/tabid/12618/bid/92411/Continuous-Delivery-vs-Continuous-Deployment-vs-Continuous-Integration-Wait-huh.aspx

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

Ответ 3

Непрерывная доставка (CD) - это концепция, которая была впервые описана в книге 2010 года, соавтором которой были Джез Хамбл и Дэвид Фарли, оба из ThoughtWorks.

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

  • CI может выполняться одним разработчиком, где CD требует совместной работы
  • CD не может быть выполнен без CI
  • CD - это линейное путешествие, где CI представляет собой непрерывную обратную связь (сборку), перемещающую CD вперед
  • С CD вы всегда готовы нажать на prod
  • CI позволяет вам проверять ваш код на повторную копию несколько раз, чтобы вы могли обнаружить свои проблемы на

Вот цитата из Мартина Фаулера:

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

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

Что касается DevOps, то весь другой воск. Люди часто думают, что DevOps - это роль или инструмент, но это действительно культура. Вы не "делаете" DevOps. Вот цитата из Майка Кависа, которую мне очень нравится:

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