Непрерывная поставка ПО
Термин «Непрерывная поставка ПО» (Continuous Delivery, CD) прочно вошел в обиход в конце 2010 году, после выпуска одноименной книги.
В книге описываются достаточно простые идеи о том, как сделать процесс поставки ПО таким, чтобы его можно было выкатывать после каждого комита. И, хотя прошло уже больше четырех лет, до сих пор такой подход к поставке ПО не стал стандартом. По вполне понятным причинам множество компаний продолжает использовать кустарное либо мануфактурное производство, вместо перехода к конвейеру. Кто-то ведь должен оставаться на задворках прогресса, кого-то ведь должны поглощать победившие конкуренты.
Я думаю, что внедрение конвейера в начале прошлого века на реальных производствах тоже встречало жуткое сопротивление. Ломался привычный ход работы, сложившиеся отношения и иерархии. Необходимо было много чего переделывать и много кого переучивать. В ИТ индустрии, как мне кажется, все то же самое, только процесс мягче и происходит быстрее.
Основная идея CD в том, чтобы построить конвейер (Deployment Pipeline), позволяющий каждому изменению в системе контроля версий попасть в боевое окружения стандартным и полностью автоматизированным способом.
Приблизительно это может выглядеть следующим образом:
- Изменения вносятся в систему контроля версий (СКВ).
- Запускается система непрерывной интеграции (Continuous Integration, CI), собирается билд (если это компилируемый язык), прогоняются все необходимые тесты.
- В случае успешности предыдущего шага, билд выкатывается на окружение тестирования (QA).
- После успешного тестирования билд выкатывается на stage окружение (pre-production), которое максимально приближено к боевому окружению.
- Если все прошло хорошо, то билд попадает в боевое окружение.
Тут встает в полный рост вопрос, как сделать так, чтобы все окружения, начиная с окружения разработчиков, максимально соответствовали друг другу. Для этого существуют инструменты управления конфигурацией (Configuration management system), о которых мы поговорим еще в будущем отдельно. Самое главное, что конфигурация окружений — это такой же код, и к нему точно также применимы все вышеперечисленные подходы: хранение в СКВ, CI, тестирование.
Так вот, если этот процесс отлажен, все изменения проходят по нему, и, потенциально, каждое изменение может быть выкачено в продакшен, то это и называется процессом непрерывной поставки ПО.
Конечно, идеальным он никогда быть не может: Configuration Drift, невозможность сделать полную копию продакшена, разный профиль нагрузки в бою и разработке, разные данные в БД на разных окружениях и другие факторы не позволяют сделать его безупречным. Но и задача инженера — не изобретать идеальный велосипед, а избежать типичных проблем и автоматизировать типичные рутинные операции.
Процесс непрерывной поставки позволяет удешевить производство качественного ПО, добавляет предсказуемость и прогнозируемость в этот процесс.
PS Не обходится без маленькой доли безумия — компания HP пытается запатентовать термин Continuous Delivery, очередная победа «бизнеса» над здравым смыслом.