По мере усложнения программного обеспечения простые на первый взгляд изменения могут привести к непредвиденным побочным эффектам. Сложность может возрастать, когда над одним и тем же программным обеспечением работают несколько разработчиков из разных команд. Непрерывная интеграция/непрерывное развертывание (CI/CD) - это подход, который решает эту проблему. Вот краткий обзор процесса CI/CD (пример см. в Примеч. 19.4):
Непрерывная интеграция (CI) решает проблему координации и проверки изменений программного обеспечения в процессе разработки автоматизированным способом для обеспечения высокого качества. Для реализации CI существует множество инструментов.
В одной глобальной фармацевтической компании agile-подразделение, разрабатывающее новую функциональность API, выбрало CircleCI в качестве инструмента CI. Жизненный цикл кода описан ниже:
Инженеры, работающие по принципу agile pod, вносили изменения в код, которые затем сохранялись в GitHub (система контроля версий).
CircleCI обнаруживает изменения кода, внесенные в систему контроля версий.
CircleCI проверяет соответствие кода стандартам, запуская Pylint (инструмент для линтинга).
CircleCI проверяет правильность поведения кода, запуская связанные с ним тесты - в данном случае с помощью Pytest.
CircleCI проверяет соответствие кода стандартам качества, выполняя метрики кода - в данном случае с помощью SonarQube.
Документация к коду генерируется автоматически с помощью инструмента - в данном случае с помощью Sphinx (инструмент с открытым исходным кодом, который извлекает документацию из кода и генерирует человекочитаемую документацию для веба).
CircleCI упаковывает пройденный код в модульный строительный блок, который хранится в репозитории пакетов - в данном случае пакет хранится в контейнере (Docker) и хранится в Amazon ECR (хранилище образов Docker, управляемое Amazon). Контейнеры позволяют запускать приложения в любой среде, однако использовать их следует с умом.
Конвейер кода Python - непрерывная интеграция и развертывание - пример
КОД
Python
1
2 CircleCI Обнаружение изменений в коде
3 Pylint Проверка соответствия кода стандартам
4 Pytest Проверьте поведение кода, запустив тест
5 SonarQube Проверка качества кода
6 Sphinx Автогенерация документации
7 Docker Код упаковывается и хранится в репозитории
Amazon ECR
8 Selenium Запуск интеграционных тестов
Инженеры вносят изменения в код
Контроль исходных текстов/сохранение кода
НЕПРЕРЫВНАЯ ИНТЕГРАЦИЯ
НЕПРЕРЫВНОЕ РАЗВЁРТЫВАНИЕ
3 Argo Обнаружение изменений в коде
4 Checkmarx Проверка на наличие уязвимостей
5 Argo Скопируйте образ Docker на производственную платформу Kubernetes
6 Kurbenetes Представьте в виде API для тестирования поведения кода
7 Selenium Убедитесь, что API работает
8 Kurbenetes Активируйте API для пользователей
Затем CircleCI проводит интеграционные тесты, проверяя, работает ли новый модульный блок при интеграции со всем остальным программным обеспечением и любыми другими изменениями, внесенными другими членами команды - в данном случае с помощью Selenium (инструмента автоматизации веб-программ с открытым исходным кодом для автоматического написания тестов).
Поскольку весь этот процесс автоматизирован и выполняется часто (по мере изменения кода), он дает разработчикам быструю обратную связь о качестве кода и уверенность в том, что выпускается высококачественное программное обеспечение.
Непрерывное развертывание - это следующий этап процесса, являющийся естественным продолжением CI. Оно берет программное обеспечение, успешно прошедшее все этапы CI, и доставляет его в производство, устраняя все ручные шаги в этом процессе, так что программное обеспечение автоматически становится доступным для конечных пользователей.
Фармацевтическая компания, о которой шла речь выше, выбрала инструмент Argo CD для развертывания в производстве (кластер Kubernetes). Процесс компании включал в себя следующие шаги (см. рисунок 19.4. Обратите внимание, что следующее перечисление отличается от приведенного на рисунке для наглядности).
Argo CD обнаруживает изменения в GitHub (контроль версий), сделанные с помощью непрерывной интеграции (указывающие на то, что нужно развернуть что-то новое).
Argo CD проверяет пакет на наличие уязвимостей с помощью Checkmarx, который используется для обнаружения векторов атак безопасности в пакете или написанном коде. Это дополнительный шаг, гарантирующий, что то, что ставится в производство, безопасно для работы в производстве.
Затем Argo CD копирует с Amazon ECR образ Docker на производственную платформу Kubernetes. Платформа Kubernetes упрощает управление контейнерами и делает приложения более переносимыми.
Затем Argo CD гарантирует, что у этого нового контейнера есть частный API, который можно использовать для проверки правильности поведения пакета.
Argo CD запрашивает Selenium (инструмент тестирования) для проверки правильности поведения API.