Интеграционные проблемы в разработке ПО уже давно стали притчей во языцех. Вася делает модуль В, Сергей делает модуль С, оба модуля протестированы, найденное исправлено, вероятность нахождения ненайденного неприятного минимальна. Казалось бы, все хорошо, но вот незадача: модули эти должны работать не по одиночке, а вместе. Почти всю итерацию Вася и Сергей работают локально, не совмещая написанные модули. При попытке соединения за неделю до поставки модули начинают вести себя неадекватно и время интеграции увеличивается значительно. Поставка переносится на неделю, Вася винит Сергея, Сергей винит Васю. Проблема подкралась "внезапно".
Недавно я где-то увидел хороший принцип: "то, что делать неприятно, надо делать чаще". Он отлично ложится на разработку ПО, в частности, на его интеграцию. Подход, при котором интеграция проекта осуществляется настолько часто, насколько это возможно, называется "непрерывной интеграцией" (Continuous Integration*).
Общие понятия
Для начала определим понятие "построение проекта": это процесс, практически полностью имитирующий процесс, который вы проходите при поставке вашего продукта. Типичный пример построения проекта – это компиляция, интеграция скриптов базы данных, прогонка тестов, выполнение инспекций и развертывание. Для разных проектов могут использоваться разные шаги, но общая цель примерно такова: выполнить как можно более полную интеграцию всех компонентов системы. При непрерывной интеграции построение проекта должно выполняться с наименьшим допустимым интервалом. Этим интервалом чаще всего берут время между двумя соседними коммитами в систему контроля версий, т.е. построение проекта проходит после каждого коммита. Это позволяет найти те ошибки и проблемы, на которые разработчик не обратил внимания при локальном запуске. Чаще всего проявляются ошибки компиляции или сломанные тесты. Что нам дает регулярное построение проекта?- Повышение уверенности – после сотни успешных построений легче быть уверенным в успешности 101-го построения.
- Экономия времени за счет автоматизации повторяемых действий – для успешных регулярных построений проекта обычно требуется автоматизировать все рутинные задачи. Более того, автоматизация рутины позволяет гарантировать одинаковое выполнение необходимых шагов, устраняя риск появления непонятных дефектов при развертывании.
- Развертываемость программного обеспечения – использование подхода непрерывной интеграции позволяет осуществить полное построение проекта с развертыванием, если иметь на входе папку с исходниками и нажать лишь одну кнопку. В случае необходимости поставка пройдет так быстро, как это возможно.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.