Непрерывная интеграция с магистралью

Самая эффективная методика, но сложно соблюдать условия применения.

Магистраль должна находиться в стабильном рабочем состоянии.

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

Схема

  1. Программист создаёт новую ветку на основе магистрали. 
  2. Для решения задачи вносит изменения в свою ветку. Рекомендуется при каждой фиксации выполнять автоматические проверки, чтобы убедиться в отсутствии дефектов в ветке.
  3. Интеграция с магистралью выполняется, как только появляется работоспособный коммит, которым можно поделиться.  Не реже раза в день. Желательно, чаще.
  4. Перед переносом в магистраль выполняется тестирование своей ветки. Это не только упростит привязку к магистрали, но даст уверенность, что любые ошибки, возникающие при интеграции с магистралью вызваны исключительно проблемами интеграции, а не ошибками в ветке. Это значительно ускорит и упростит поиск и исправление ошибок.
  5. Выполняется перенос новых коммитов из магистрали в свою ветку.
  6. Проверяется влияние изменений (из магистрали) на работу ветки. 
  7. Переносятся изменения из своей ветки в магистраль. 
  8. Запускается тестирование магистрали.

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

Преимущества работы по данной методике:

  • упрощён выпуск версий в продуктив 
  • сокращено время на поиск и исправление конфликтов
  • быстрая интеграция
  • удобнее рефакторинг кода (переработка кода программы, чтобы он стал более простым и понятным)

Условия:

  • стабильно рабочее состояние магистрали
  • время интеграции должно быть небольшим, иначе разработчики станут избегать слияния
  • необходима автоматическая самотестируемость кода 
  • требуются усилия и средства для скрытия частично выполненной задачи 
  • достаточная квалификация членов команды. Если один член команды будет отставать, то остальные будут регулярно ждать, пока он завершит очередную интеграцию.