В чем разница между непрерывной интеграцией, непрерывной доставкой и DevOps?
Я слышу эти термины вместе и задаюсь вопросом, в чем разница? Как они связаны с непрерывной сборкой и непрерывным развертыванием?
3 ответа
Непрерывная интеграция / непрерывная сборка - это все, что заставляет разработчиков вводить код в репозиторий исходного кода мало и часто (и получать последнюю версию из репозитория, поэтому любые дальнейшие изменения основаны на последних изменениях других разработчиков). Это сокращает время, затрачиваемое на разрешение слияния, поскольку в этом случае слияние проще.
Процесс лучше всего автоматизировать с помощью сервера сборки, который также может запускать любые модульные тесты. В случае сбоя при сборке / тестировании разработчикам предоставляется обратная связь, что позволяет быстро устранить любые проблемы.
Непрерывное развертывание включает в себя автоматическое развертывание артефактов сборки из процесса сборки в тестовой и производственной средах. Чтобы снизить риск, связанный с этим, люди часто используют функциональные переключатели, чтобы отделить выпуск (контролируемым образом) от развертывания.
Непрерывная доставка связана не столько с технологиями, сколько с подходом организаций к поставке программного обеспечения (хотя в нем активно используется автоматизация).
DevOps - это гораздо более обширная область, в которой, как правило, делается упор на устранение барьеров между разработчиками и рабочими группами и обеспечение их совместной работы таким образом, чтобы они извлекали пользу из комбинированных навыков. В компании из этого выйдет большая автоматизация обеспечения среды, развертывания сборки, мониторинга (и автоматического реагирования на проблемы и масштабируемость), а в некоторых случаях и программно-определяемые сети. В некоторых организациях была создана специальная команда (ы) DevOps.
Непрерывная доставка (CD) - это концепция, впервые описанная в книге 2010 года, в соавторстве с Джезом Хамблом и Дэвидом Фарли, оба из ThoughtWorks.
Непрерывная интеграция и непрерывная доставка часто путают друг с другом, но есть некоторые ключевые различия:
- CI может быть сделан одним разработчиком, где CD требует совместной работы команды
- CD не может быть сделан без CI
- CD - это линейное путешествие, где CI - это непрерывный цикл обратной связи (построения), продвигающий CD вперед
- С CD вы всегда готовы подтолкнуть к прод
- CI позволяет вам проверять свой код в репо несколько раз, чтобы вы могли обнаружить ваши проблемы на ранней стадии
Вот цитата из Мартина Фаулера:
"Непрерывная интеграция - это практика разработки программного обеспечения, при которой члены команды часто интегрируют свою работу, обычно каждый человек интегрируется, по крайней мере, ежедневно, что приводит к нескольким интеграциям в день. Каждая интеграция проверяется автоматизированной сборкой (включая тестирование) для выявления ошибок интеграции как как можно быстрее. Многие команды находят, что этот подход приводит к значительному уменьшению проблем интеграции и позволяет команде быстрее разрабатывать связное программное обеспечение ".
Основное различие между непрерывной доставкой и непрерывным развертыванием заключается в автоматизации. Вы автоматизируете развертывание вещей. Это хорошо работает, если вы продвигаетесь в производство несколько раз в день или по ряду других причин.
Что касается DevOps, это совсем другой шарик воска. Люди часто думают, что DevOps - это роль или инструмент, но на самом деле это культура. Вы не "делаете" DevOps. Вот цитата из Майка Кэвиса, которая мне очень нравится:
"DevOps - это культурный сдвиг или движение, которое поощряет отличную коммуникацию и сотрудничество (иначе говоря, командную работу), чтобы способствовать более быстрому созданию высококачественного программного обеспечения и большей надежности".
Вероятно, есть некоторая двусмысленность в том, как непрерывные ххх фразы используются разными людьми, но я думаю, что этот пост в блоге суммирует это довольно хорошо.
DevOps - это скорее всеобъемлющая идея, чем конкретная практика, немного похожая на Agile, а модульное тестирование - это практика.