Обсудить проект
О компании

Как мы работаем

Процессы разработки программного обеспечения

Continuous Integration / Continuous Delivery

В современной разработке программного обеспечения (ПО) получили распространение методы непрерывной интеграции и доставки (Continuous Integration & Continuous Delivery или CI/CD), позволяющие увеличить скорость сборки и поставки и, одновременно, повысить качество готовых программных решений и продуктов.

CI/CD характеризуются постоянным (частым) повторением этапов процесса разработки:

  • отслеживание изменений в репозитории с исходным кодом,
  • сборки проекта,
  • различные виды автоматических тестов (unit-тесты, статический анализ кода, интеграционные тесты),
  • установки полученных артефактов на различные стенды (сервера).

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

Continuous Integration
Continuous Integration

CI/CD позволяет сократить time to market – время с момента поступления запроса на реализацию тех или иных функций программного продукта до его запуска в производственную эксплуатацию.

Continuous Delivery
Continuous Delivery


Обеспечение качества

Принятый ранее в разработке ПО способ тестирования был децентрализованным: проекты имели раздельные фазы разработки и тестирования, команда контроля качества (Quality Assurance – QA) выполняла проверку ПО в рамках отдельного этапа.

В случае CI/CD происходит непрерывное тестирование: тесты выполняются на всех этапах. После каждого изменения исходного кода при помощи инструментов CI/CD и тестовых фреймворков выполняются следующие виды тестов:

  • юнит-тесты,
  • статическая инспекция исходного кода,
  • развертывание тестовых стендов и автоматизированное интеграционное тестирование,
  • автоматизированное нагрузочное тестирование.

Например, когда разработчик изменяет код в центральном репозитории (git push), на CI-сервере выполняются автоматизированные юнит-тесты. Если тесты не были пройдены, сборка отклоняется и разработчик получает уведомление. На следующем этапе выполняется статическая инспекция кода с использованием соответствующих специализированных инструментов. Если сборка проходит тесты, она разворачивается в среде для интеграционного тестирования, где подвергается всесторонним функциональным и нагрузочным тестам. Тесты выполняются параллельно. Если все тесты пройдены, релиз отправляется в производственную среду.


Участники проекта и их роль в обеспечение процессов CI/CD и проверки качества

Разработчики

Модульные тесты, снижающие риск неверного функционирования отдельных компонентов приложения.

Тестировщики (QA)

Подготовка тестов и тестирование общей функциональности приложения.

Бизнес-аналитики

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

Инженеры инфраструктуры (DevOps)

Развёртывание приложения, миграция данных и масштабирование с целью снижения риска недоступности продукта. Автоматизация процессов развертывания инфраструктуры проекта (в рамках CI/CD) и подход IaC позволяют готовить окружения (DEV/QA/PROD) «одной кнопкой».

Members_Roles
Members_Roles


Применяемые инструменты

Наиболее часто применяемыми инструментами CI/CD являются
(* — инструменты, отображённые на иллюстрациях)

Maven* Gradle

системы сборки

Ansible*

система управления конфигурацией инфраструктуры.

Git*

система контроля версий

Nexus*

централизованное хранилище артефактов

GitLab CI*
Bamboo Jenkins*

системы непрерывной интеграции, развертывания и доставки (CI/CD)

GitLab*

централизованное хранилище исходного кода