Введение в эксплуатацию новых устройств и программ постоянно ускоряется. Традиционные способы каскадного проектирования - по "водопаду" - с предварительным планированием каждого этапа, тестированием готового продукта, его запуском и последующими исправлениями оказываются слишком медленными.

Это стало предпосылкой для появления методик Agile Software Development, то есть гибкой разработки программного обеспечения, когда проект разбивается на короткие циклы и пошагово доделывается до нужного результата и продукта.

Концепция agile-производства легла в основу методики Continuous Integration/ Continuous Delivery - CI/CD, комбинации непрерывной разработки, интеграции и непрерывной поставки.

Часто CD также расшифровывают как Continuously Development и как Continuous Deployment, что верно и соответствует концепции.

Принципы CI/CD

1. Разделение ответственности участников проекта.  

Программисты и дизайнеры создают и тестируют элементы общей структуры, основываясь на техническом задании. Сформированные функции должны быть осуществимыми и работающими. Тестировщики следят за поддержанием качества готовых модулей и сквозными тестами проверяют продукт. Лидеры продукта анализируют результаты и корректируют работу в соответствии с отзывами как заказчиков (внутренняя обратная связь), так и пользователей (внешняя обратная связь).

2. Снижение рисков.  

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

3. Укороченный цикл обратной связи.

Непрерывное тестирование и доставка отлаженных модулей потребителям осуществляется автоматически. Благодаря этому резко сокращается время внедрения нового продукта и получения отзывов о его работе. Сразу же запускается процесс доработок, тестирования и новой доставки. Общее время реализации проекта сокращается.

Сферы применения CI/CD

Накопленный в софтвер-отрасли опыт показывает, что CI/CD эффективна на всех стадиях веб-разработки, электронной коммерции, мобильной разработки и во множестве других сфер программирования и технической эксплуатации.

Для внесения изменений в работающие системы с критически-важными функциями, где перестройка архитектуры может приводить к простоям, бизнес-сбоям, фатальным последствиям от неисправностей, CI/CD неприменима.

Примеры таких сфер – банковский процессинговый центр, авиационное программное обеспечение, медицина и другие жизненно-критические области. Там по-прежнему более приемлемы методы "водопадного" проектирования и разработки - когда продукт доводится до полного соответствия техническому заданию исключительно во внутреннем режиме, без поставок промежуточных версий в эксплуатацию.

Фотография Bill Oxford / Unsplash

Как это работает

Существует несколько платформ для реализации методики CI/CD. Все они требуют использования серверов с хранилищами для промежуточных и окончательных версий кодов, установленными тестовыми программами, непрерывной автоматической проверкой и доставкой изменений адресатам.

Базой для этих процессов может быть собственный сервер организации-разработчика или арендованные у хостинг-подрядчика наборы VPS/VDS.

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

Аренда VPS/VDS виртуальных серверов для CI/CD сокращают расходы на поддержание аппаратуры в рабочем состоянии и обеспечение безопасности. Появляется возможность выбрать конфигурацию, максимально соответствующую будущему использованию программного продукта. Несложно масштабировать мощности при росте потребностей в вычислительных ресурсах и объемах хранилища.

Инструменты CI/CD

1. Jenkins – широко распространённый сервер непрерывной интеграции и разработки (CI). Его часто воспринимают как стандарт данной методики. Написан на Java и умеет автоматически и быстро добавлять код в программное обеспечение. Особенно эффективен Jenkins для веб-приложений.

2. Gitlab – удобный репозиторий, оснащён встроенным инструментом CI/CD. Он осуществляет все необходимые процессы, но относительно сложен для сетапа и требует вычислительных ресурсов (минимум - 4х ядерный процессор и от 4Gb оперативной памяти на хосте).

3. Docker помещает продукт вместе с окружением в своеобразный контейнер, который можно перенести в любую Linux-среду с поддержкой контрольных групп. С 2016 года доступен для использования в среде Windows.

4. Kubernetes осуществляет все возможные процессы CI/CD и поддерживает технологии контейнеризации, в том числе и Docker. Система организует пирамидальную структуру с ведущим и ведомыми компонентами.

5. Azure Pipelines – новый инструмент. Он особенно удобен, если нужно перенести облачное приложение в среду Azure от Microsoft.

Внедрение CI/CD

Всё происходит одновременно и предельно автоматизировано, и это может вызывать затруднения у специалистов, привыкших к традиционным накопительно-водопадным методам управления.

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

Фотография Moritz Kindler / Unsplash

Но оно того стоит, ведь в современном мире нельзя отставать от конкурентов, а технология CI/CD существенно ускоряет процесс проектирования и внедрения.