Технические заметки одного Евтуховича

Рассказ о серых трудовых буднях инженера программных систем

Непрерывная поставка ПО

| Комментарии

Термин «Непрерывная поставка ПО» (Continuous Delivery, CD) прочно вошел в обиход в конце 2010 году, после выпуска одноименной книги.

В книге описываются достаточно простые идеи о том, как сделать процесс поставки ПО таким, чтобы его можно было выкатывать после каждого комита. И, хотя прошло уже больше четырех лет, до сих пор такой подход к поставке ПО не стал стандартом. По вполне понятным причинам множество компаний продолжает использовать кустарное либо мануфактурное производство, вместо перехода к конвейеру. Кто-то ведь должен оставаться на задворках прогресса, кого-то ведь должны поглощать победившие конкуренты.

Я думаю, что внедрение конвейера в начале прошлого века на реальных производствах тоже встречало жуткое сопротивление. Ломался привычный ход работы, сложившиеся отношения и иерархии. Необходимо было много чего переделывать и много кого переучивать. В ИТ индустрии, как мне кажется, все то же самое, только процесс мягче и происходит быстрее.

Основная идея CD в том, чтобы построить конвейер (Deployment Pipeline), позволяющий каждому изменению в системе контроля версий попасть в боевое окружения стандартным и полностью автоматизированным способом.

Приблизительно это может выглядеть следующим образом:

  1. Изменения вносятся в систему контроля версий (СКВ).
  2. Запускается система непрерывной интеграции (Continuous Integration, CI), собирается билд (если это компилируемый язык), прогоняются все необходимые тесты.
  3. В случае успешности предыдущего шага, билд выкатывается на окружение тестирования (QA).
  4. После успешного тестирования билд выкатывается на stage окружение (pre-production), которое максимально приближено к боевому окружению.
  5. Если все прошло хорошо, то билд попадает в боевое окружение.

Тут встает в полный рост вопрос, как сделать так, чтобы все окружения, начиная с окружения разработчиков, максимально соответствовали друг другу. Для этого существуют инструменты управления конфигурацией (Configuration management system), о которых мы поговорим еще в будущем отдельно. Самое главное, что конфигурация окружений — это такой же код, и к нему точно также применимы все вышеперечисленные подходы: хранение в СКВ, CI, тестирование.

Так вот, если этот процесс отлажен, все изменения проходят по нему, и, потенциально, каждое изменение может быть выкачено в продакшен, то это и называется процессом непрерывной поставки ПО.

Конечно, идеальным он никогда быть не может: Configuration Drift, невозможность сделать полную копию продакшена, разный профиль нагрузки в бою и разработке, разные данные в БД на разных окружениях и другие факторы не позволяют сделать его безупречным. Но и задача инженера — не изобретать идеальный велосипед, а избежать типичных проблем и автоматизировать типичные рутинные операции.

Процесс непрерывной поставки позволяет удешевить производство качественного ПО, добавляет предсказуемость и прогнозируемость в этот процесс.

PS Не обходится без маленькой доли безумия — компания HP пытается запатентовать термин Continuous Delivery, очередная победа «бизнеса» над здравым смыслом.

Комментарии