Процессы разработки программного обеспечения
Continuous Integration / Continuous Delivery
В современной разработке программного обеспечения (ПО) получили распространение методы непрерывной интеграции и доставки (Continuous Integration & Continuous Delivery или CI/CD), позволяющие увеличить скорость сборки и поставки и, одновременно, повысить качество готовых программных решений и продуктов.
CI/CD характеризуются постоянным (частым) повторением этапов процесса разработки:
- отслеживание изменений в репозитории с исходным кодом,
- сборки проекта,
- различные виды автоматических тестов (unit-тесты, статический анализ кода, интеграционные тесты),
- установки полученных артефактов на различные стенды (сервера).
Последовательность процессов CI/CD можно представить в виде конвейера, каждый этап которого служит своего рода шлюзом для контроля качества.Инструменты, на базе которых реализуются CI/CD, поддерживают выполнение регулярной автоматизированной сборки проекта для оперативной проверки кода (выявления дефектов) и решения задач интеграции.Непрерывная интеграция позволяет сделать работу более предсказуемой за счет раннего и непрерывного обнаружения и устранения ошибок и противоречий с требованиями спецификации на разработку.
CI/CD позволяет сократить time to market – время с момента поступления запроса на реализацию тех или иных функций программного продукта до его запуска в производственную эксплуатацию.
Обеспечение качества
Принятый ранее в разработке ПО способ тестирования был децентрализованным: проекты имели раздельные фазы разработки и тестирования, команда контроля качества (Quality Assurance – QA) выполняла проверку ПО в рамках отдельного этапа.
В случае CI/CD происходит непрерывное тестирование: тесты выполняются на всех этапах. После каждого изменения исходного кода при помощи инструментов CI/CD и тестовых фреймворков выполняются следующие виды тестов:
- юнит-тесты,
- статическая инспекция исходного кода,
- развертывание тестовых стендов и автоматизированное интеграционное тестирование,
- автоматизированное нагрузочное тестирование.
Например, когда разработчик изменяет код в центральном репозитории (git push), на CI-сервере выполняются автоматизированные юнит-тесты. Если тесты не были пройдены, сборка отклоняется и разработчик получает уведомление. На следующем этапе выполняется статическая инспекция кода с использованием соответствующих специализированных инструментов. Если сборка проходит тесты, она разворачивается в среде для интеграционного тестирования, где подвергается всесторонним функциональным и нагрузочным тестам. Тесты выполняются параллельно. Если все тесты пройдены, релиз отправляется в производственную среду.
Участники проекта и их роль в обеспечение процессов CI/CD и проверки качества
Разработчики
Модульные тесты, снижающие риск неверного функционирования отдельных компонентов приложения.
Тестировщики (QA)
Подготовка тестов и тестирование общей функциональности приложения.
Бизнес-аналитики
контроль удобства использования ПО. Приемочные тесты: снижение риска создания функций, работающих не так, как ожидают пользователи.
Инженеры инфраструктуры (DevOps)
Развёртывание приложения, миграция данных и масштабирование с целью снижения риска недоступности продукта. Автоматизация процессов развертывания инфраструктуры проекта (в рамках CI/CD) и подход IaC позволяют готовить окружения (DEV/QA/PROD) «одной кнопкой».
Применяемые инструменты
Наиболее часто применяемыми инструментами CI/CD являются
(* — инструменты, отображённые на иллюстрациях)
Maven* Gradle
системы сборки
Ansible*
система управления конфигурацией инфраструктуры.
Git*
система контроля версий
Nexus*
централизованное хранилище артефактов
GitLab CI*
Bamboo Jenkins*
системы непрерывной интеграции, развертывания и доставки (CI/CD)
GitLab*
централизованное хранилище исходного кода