В чем разница между непрерывной интеграцией, непрерывной доставкой и 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 - это сдвиг в культуре или движение, которое поощряет отличную коммуникацию и сотрудничество (например, совместную работу), чтобы быстрее создавать более качественное программное обеспечение с большей надежностью".