← CI/CD
11 мин · просто · Урок 2 из 7

Continuous Integration

Что прогоняется на каждый push, fail fast, зелёный main и почему сливать надо часто.

Идея CI в одном предложении

Каждый разработчик вливает свои изменения в общую ветку часто и мелко, а на каждое изменение автоматика проверяет, что ничего не сломалось.

Слово "continuous" здесь о частоте: не раз в неделю большим куском, а много раз в день маленькими. Чем мельче порция, тем проще найти, что именно сломало сборку.

Что обычно гоняет CI

Типичный CI-прогон на каждый push в merge request:

checkout кода
  -> установка зависимостей
  -> линтер / форматтер   (стиль, очевидные ошибки)
  -> сборка / компиляция  (вообще собирается?)
  -> юнит-тесты           (логика не сломана?)
  -> прочие проверки      (типы, security-скан, размер бандла)

Если любой шаг падает, прогон красный и merge request нельзя влить. Это и есть автоматический "контроль качества на входе".

Fail fast

Хороший pipeline падает как можно раньше и дешевле. Сначала быстрые проверки (линтер — секунды), потом дорогие (интеграционные тесты - минуты). Нет смысла гонять 10-минутные тесты, если код даже не компилируется.

Цель — чтобы разработчик узнал о поломке за минуты после push, пока контекст ещё в голове, а не через день на код-ревью.

Зелёный main — это правило

Главная ветка (main/master) должна всегда быть в рабочем, проходящем тесты состоянии. Из неё в любой момент собирается релиз.

Поэтому:

Это та самая защита ветки, про которую был урок в треке Git. CI — её обязательная половина: правило "main всегда зелёный" держится на том, что проверки автоматические и обойти их нельзя.

Почему часто сливать — безопаснее

Контринтуитивно: чем чаще вливаешь, тем меньше риск. Большая ветка, живущая две недели, расходится с main всё сильнее. В момент слияния получаешь гору конфликтов и сюрпризов. Это называется merge hell.

Подход, где все работают близко к main и вливаются по чуть-чуть, называется trunk-based development. Мелкие MR проще ревьюить, быстрее проходят CI и реже конфликтуют.

Что нужно от кода, чтобы CI работал

CI не магия, он лишь запускает то, что ты написал. Чтобы это имело смысл:

Что важно запомнить

CI = вливать часто и мелко + автоматически проверять каждое изменение.

Типовой прогон: зависимости -> линтер -> сборка -> тесты. Падает -> MR не вливается.

Fail fast: дешёвые проверки раньше дорогих, чтобы поломка всплыла за минуты.

main всегда зелёный: push только через MR, влить нельзя при красном CI.

Частые мелкие слияния (trunk-based) безопаснее редких больших: нет merge hell.

В следующем уроке разберём вторую букву: чем Continuous Delivery отличается от Continuous Deployment.

Дрилл · вопросы как на собесе

Проверь себя без подсказок

Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.

01

Что значит 'зелёный main' и как он держится?

CICD-012
02

Что обычно прогоняет CI на каждый push?

CICD-011
03

Что такое Continuous Integration?

CICD-010

Прошли материал до конца? Отметьте урок пройденным.