При разработке программного обеспечения в стремительно меняющемся мире часто возникает вопрос — как оставаться конкурентноспособным на рынке?
Как проверять свои гипотезы быстрее, чем это делают конкуренты, поставлять новые ценности пользователю быстро и с высоким качеством, минимизировать расходы на ненужную функциональность?
Ответ на эти вопросы лежит в практиках DevOps, одной из которых является непрерывная поставка (Continuous Delivery).
Непрерывная поставка (Continuous Delivery) — это подход к разработке программного обеспечения, при котором все изменения, включая новые функции, изменения конфигурации, исправления ошибок и эксперименты, поставляются пользователям максимально быстро и безопасно.
Что такое непрерывная поставка
Непрерывная поставка — важный инструмент в современном процессе создания ПО. Весь процесс можно представить следующим образом:
- Разработчик отправляет свои изменения в систему контроля версии.
- На сервере сборки начинается процесс сборки поступивших изменений.
- Запускаются юнит-тесты.
- Собранный пакет после успешной интеграции выкладывается на тестовый сервер.
- Заинтересованные лица получают уведомления о выкладке новой версии ПО на тестовую площадку. Начинается вторая фаза тестирования, запускаются интеграционные, ручные, приемочные, UI тесты и тд.
- После успешного прохождения предыдущих шагов мы имеем готовый к публикации пакет новой версии ПО.

Цикл CI/CD
Первые три шага в этом процессе — нам давно знакомая непрерывная интеграция (Continuous Integration), с которой начинается цикл CI/CD. Разработчики регулярно объединяют код в общую ветку, после чего автоматически запускаются сборки и тесты. Далее идет активная фаза тестирования, большая часть из которой полностью автоматизирована. После подтверждения готовности пакета к релизу принимается решение о дате публикации, основанное на бизнес-требованиях.
Очень важно отметить, что на протяжении всего процесса непрерывной поставки мы постоянно получаем обратную связь.
Преимущества Continuous Delivery
Непрерывная поставка позволяет нам снизить риски релизов, делая развертывание программного обеспечения безболезненным, безопасным событием, которое может быть выполнено в любое время.
Автоматизируя большинство операций, таких как развертывание, настройки окружения, тестирование, мы сокращаем время поставки новой функциональности.
Следующим немаловажным преимуществом является повышение качества создаваемого программного обеспечения. Тратя считанные минуты на выполнение всех автоматических тестов, команда может больше времени уделять исследовательскому тестированию, юзабилити-тестированию, тестированию производительности и безопасности.
Как использовать непрерывную поставку в своём проекте
Любые успешные программные продукты или сервисы будут значительно изменяться в течение своего жизненного цикла. Инвестируя в сборку, тестирование, развертывание и автоматизацию окружения, мы добиваемся снижения стоимости создания и доставки инкрементальных изменений программного обеспечения, устраняя многие постоянные затраты, связанные с процессом выпуска ПО.
Непрерывная поставка позволяет доставлять ценность пользователям небольшими, но частыми партиями. Это позволяет нам как можно скорее получать обратную связь от пользователей, проверять большее количество гипотез и поставлять действительно ценное программное обеспечение. Если выпускать новые изменения небольшими партиями, релизы становятся обыденным событием для команды. Это мероприятие больше не вызывает панику и стресс, а наоборот мотивирует, давая возможность сразу видеть результаты своей работы.
В заключение хочу сказать, что все преимущества, которые предоставляет нам непрерывная поставка, благотворно влияют на развитие компании, позволяя больше внимания уделять проблемам пользователя, доставлять новые ценности так часто, как это необходимо, сохраняя при этом высокий уровень качества.
Не успеваете проверить гипотезы и собрать обратную связь до релиза?
Поможем наладить цикл непрерывной интеграции и поставки, чтобы регулярно выпускать обновления, быстро реагировать на изменения и при этом сохранять высокий уровень качества.