Что понимается в современной разработке под Continuous Inegration?

Объясните, пожалуйста, что в современной разработке понимается под Continuous Integration? Может ли быть CI без CD (или CD без CI)? Какое отношение CI имеет к использованию в процессе разработки git (ветки для каждой задачи/фичи, актуализация веток)? И обязательно ли CI подразумевает командную/совместную разработку?


Ответы (1 шт):

Автор решения: KoVadim

Continuous Integration - это то, что программисты постоянно что то делают, коммитят по много раз в день (вот он и git появился. С svn на больших проекта коммит может быть "долгим" (у меня в практике было пол часа), а мердж или сложная интеграция может потребовать заморозки изменений.), на серверах сборки это постоянно собирается, проганяется через тесты и тому подобное. Это дает то, что код у всех программистов приблизительно один и тот же, никто с своей веткой не уходит слишком далеко. А также, для менеджмента постоянно видно движение задач. Если кто то сделает багу, обычно тесты присекают достаточно быстро.

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

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

Может ли быть CI без CD

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

(или CD без CI)?

если никто не коммитит, то код всегда готов к деплою. так что да.

И обязательно ли CI подразумевает командную/совместную разработку?

если у программиста раздвоение личности, то он может и самостоятельно использовать CI/CD, что бы эффективно работать. Но обычно программист одиночка, если он взял большой проект, как то и сам справляется, без CI. А вот CD очень хорошо может помочь.

Какое отношение CI имеет к использованию в процессе разработки git (ветки для каждой задачи/фичи, актуализация веток)?

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

→ Ссылка