Несмотря на общую тенденцию для автоматизации процессов развития, все еще есть некоторые компании, где тестирование и развертывание вообще не автоматизированы. Отсутствие автоматизированных процессов влияет на скорость изменения изменений и повышает влияние человеческого фактора, что отрицательно влияет на всю компанию в целом, а не только отдел развития.
В этом посте я постараюсь объяснить разницу между следующими процессами: непрерывная интеграция (CI), непрерывная доставка (CD) и непрерывное развертывание (CD). Большинство людей не разделяют последние два термина, но мы обсудим их отдельно, чтобы получить общее понимание.
Непрерывная интеграция (CI)
Процесс непрерывной интеграции автоматизирует проверки интеграции изменений разработчиков, объединенные в остальную часть кода.
Этот процесс может включать в себя анализ статического кода для выявления уязвимостей и несоответствий с общими практиками развития, наращивание приложений и автоматизированное тестирование с динамическим сканированием уязвимостей.
Автоматизация процессов CI позволяет ускорить разработку, устраняя ручную ручную проверку интеграции с остальной частью кода и снизить рабочую нагрузку на отдел QA (обеспечения качества) из-за быстрой идентификации проблем интеграции с остальной частью приложения. Кроме того, разработчик не сможет сэкономить время, отправив изменения для тестирования без какой-либо проверки.
Непрерывная доставка (CD)
Этот этап используется для доставки модифицированной версии приложения к производству.
Например, процесс доставки изображений докера просто загружает изображение в реестр образа Docker, а затем загрузка его из хоста. В системах с повышенными требованиями безопасности также может быть ситуация, когда докеры хосты не имеют доступа к любым реестрам, а в этом случае Докер Сохранить и Docker Load Команды могут быть использованы для доставки документов докера.
В системах, которые не используют Docker, доставка может быть выполнена через SCM, APT/Yum Repositories, SSH, S3-совместимое хранилище для виртуальных виртуальных видов (например, с помощью Packer) и многими другими методами, но их поле приложения в значительной степени зависит от поля возникающие требования и удобство поддержки.
В приведенном выше примере с Docker изменения будут поставляться с новым изображением через загрузку в реестр Image Docker.
Автоматизация процессов компакт-дисков позволяет ускорить доставку, устранить влияние человеческого фактора, а также сделать доставку более доступной для остальной части команды.
Непрерывное развертывание (CD)
Процесс используется для развертывания новой версии приложения к среде производства или тестирования. Обычно развертывание не изолирована как отдельная стадия и включается в процесс доставки. Это зависит от указанных требований и используемых инструментов, но опция реализации процесса довольно очевидна, как правило.
Доступны много решений SaaS, и покрытие всех них потребует другого поста. Давайте посмотрим на основные решения, которые легко интегрированы в большинстве случаев:
- Gitlab CI — отличный вариант для команд, которые используют SAAS или On-Premise Gitlab экземпляра. Использует YAML для описания процессов CI/CD.
Действия GitHub — это хорошо, но относительно новый вариант для тех, которые используют github. Также использует YAML для описания процессов CI/CD.
Jenkins — это проект с длительной историей, это позволяет использовать Groovy для описания процессов CI/CD (что является преимуществом и недостатком одновременно по многим причинам) и вашим собственным DSL в JenkinsFile.
Давайте представим возможный процесс в вымышленной ИТ-компании и возможные требования, которые сделаны заинтересованными сторонами. Возьмите небольшой ИТ-отдел с разработкой, тестированием и операционными командами. Рабочий процесс организован с использованием GIT-потока, а развертывание выполняется на хостах докера. Давайте опишем основные требования сторон в таблице.
После сбора требований мы можем набросать, как процессы CI/CD будут выполнены в команде:
Процесс интеграции не должен быть общим во всех случаях. Для каждой ситуации гораздо удобнее описать различные сценарии. Давайте опишем возможные ситуации в качестве примера:
- При обновлении запроса на тягу/слияние , проверка статического кода выполняется для соответствия стандартам кодирования компании, статический анализ кода для возможных ошибок и уязвимостей, автоматизированного блока и функционального тестирования с использованием заглушек вместо внешних служб.
При необходимости изображение будет построено для дальнейшей интеграции с остальными услугами компании и внешних.
Если у нас есть изменения в главной отрасли Процесс аналогичен приведенному выше примеру. Но есть исключение, что теперь изображение для интеграции всегда построено: для дальнейшего развертывания на подставке для общих E2E и приемочного тестирования с остальными компонентами.
При установке тега Изображение с применением построено для производства и после развертывания дыма.
Почему мы не можем построить общий процесс CI?
Чтобы сказать вам правду, это не имеет никакого смысла. Если вы создаете изображение для тестирования интеграции после ручного подтверждения для филиала Release, то мы, без сомнения, забудьте запустить сборку вручную, и отдел QA проверит устаревшую версию приложения. Это пустая трата времени для проведения соответствия стандартам кодирования и единиц/функционального тестирования на версию тегов, так как все изменения уже находятся в отсоединении.
Более автоматические задачи существуют, тем более бесполезная работа будет выполнена в общем процессе.
В нашем случае доставка загружает изображение докера с приложением в реестр. Из реестра изображения будут загружены на определенный хост докера во время процесса развертывания. Реестр может быть разделен или отдельно: для среды разработки и тестирования и производственной среды. Это зависит от требований безопасности в компании.
В нашем случае развертывание может быть выполнено в производственную среду путем перенаправления всех новых HTTP-запросов к новому экземпляру приложения (максимальное время запроса ограничено в пределах причина выше для обеспечения развертывания без простоя).
Стоит сделать внимание на облачный хостинг, если вы управляете небольшим проектом и не нужно создавать собственную инфраструктуру. Это позволяет автоматизировать разработку проекта, создавая процесс CI/CD.
Например, Платформа Hostman будет нести ответственность за доставку изменений. Образ докера будет встроен в выбранной ветви от новой версии кода и будет автоматически развернут без простоя. В нашем примере автоматизация закончилась бы на этапе слияния изменений разработчика в отрывную ветку.
Я надеюсь, что этот пост поможет вам прояснить и понимать различия между CI и CD, а также увидеть, насколько важно автоматизировать эти процессы.
Суммируйте его, реализация трубопровода CI/CD является постоянным процессом. Он постоянно меняется в соответствии с новыми требованиями и потребностями компании. Очевидно, что процесс CI/CD требует дополнительных инструментов и дополнительного времени. Однако мы можем снизить затраты и время с использованием готовых решений и услуг.
Решение за вами! Я считаю, что эти процессы автоматизации должны быть интегрированы в каждую компанию, которая специализируется на разработке приложений, продуктов, платформ и т. Д.
Оригинал: «https://dev.to/alex_boykov/what-s-the-difference-between-ci-and-cd-2je0»