Вступление
Контейнеры привели к огромным изменениям в DevOps, позволив командам отправлять код быстрее, чем когда-либо прежде. Однако нам еще предстоит пройти через процесс сборки, упаковки и развертывания этих контейнеров. Вот почему мы используем контейнерные трубопроводы.
Тем не менее, существует много разных вариантов, когда речь идет о контейнерных трубопроводах. Как мы узнаем, какой использовать? В этой статье мы сравним шесть вариантов и расскажем о конфигурации, преимуществах, ограничениях и ценах каждого из них.
Что такое контейнерные трубопроводы?
Сначала поговорим о том, что такое контейнерный конвейер. Конвейеры помогают автоматизировать отдельные этапы процесса разработки программного обеспечения, особенно непрерывную интеграцию и непрерывную доставку (CI / CD). Контейнерные конвейеры автоматизируют каждый из этапов процесса развертывания контейнера, от создания исходного образа до развертывания и производства. Как правило, весь контейнерный конвейер состоит из трех этапов:
- Интеграция: изменения проверяются в системе контроля версий, запуская процесс сборки и модульные тесты.
- Приемочное тестирование: контейнер развертывается в тестовой среде и проверяется на функциональность.
- Развертывание: окончательный, полностью протестированный образ развертывается в рабочей среде.
Контейнерные конвейерные инструменты обычно предлагают как минимум два из трех, но они могут различаться.
Теперь давайте посмотрим на несколько вариантов.
Шесть вариантов контейнерных трубопроводов
1. Героку
Heroku — это законченный контейнерный трубопровод, использующий Docker . Вы можете создавать, тестировать, проверять и развертывать контейнеры на одной платформе без необходимости предоставления оборудования или использования различных поставщиков услуг.
конфигурация
Приложения Heroku настраиваются с помощью манифеста heroku.yml , который определяет шаги, необходимые для сборки и развертывания контейнера. Манифест для приложения с пользовательским Dockerfile может выглядеть так:
Dockerfile
1
build:
2
docker:
3
web: Dockerfile
Чтобы развернуть этот контейнер с помощью Git , просто запустите:
$ heroku stack:set container
$ git add heroku.yml
$ git commit -m "Add heroku.yml"
$ git push heroku master
Heroku также поддерживает конвейеры , которые позволяют развертывать контейнер в нескольких различных средах для отражения этапов непрерывного рабочего процесса доставки. Например, вы могли бы использовать конвейеры для тестирования изменений в промежуточной среде перед развертыванием в рабочей среде.
Преимущества и ограничения
Heroku чрезвычайно прост в использовании, для всего конвейера требуется всего один файл YAML. Он полностью управляем, предоставляет несколько сред для тестирования и развертывания изменений и даже позволяет откатывать изменения в случае неудачного развертывания.
Однако не все функции Heroku поддерживают развертывание Docker. Например, вы не можете использовать Heroku CI для запуска набора тестов вашего приложения, что означает либо запуск набора тестов при построении образа, либо использование многоступенчатой сборки . Вы также не можете использовать продвижение по конвейеру для продвижения контейнера с одной стадии конвейера на другую. Вместо этого вы должны повторно развернуть контейнер на целевой стадии.
ценообразование
Heroku предлагает бесплатный план с 1000 бесплатных часов работы в месяц для одного веб-динамо и одного рабочего динамо. Платные планы начинаются с 7 долларов США за дин / месяц и предоставляют дополнительные функции, такие как динамометры большей емкости и улучшенная масштабируемость. Для получения дополнительной информации см. Страницу цен Heroku .
Мой дубль
Heroku — это очень простое и экономичное решение для контейнерных трубопроводов. Это дает вам полный контроль над процессом CI / CD, обеспечивая полностью управляемую среду. С бесплатным уровнем и бесплатной стандартной поддержкой стоит попробовать.
2. Azure DevOps
Azure DevOps — это универсальная служба Microsoft для управления проектами, управления исходным кодом (SCM) и CI / CD. Он позволяет вам контролировать практически каждый этап жизненного цикла DevOps, предлагая при этом множество расширенных функций, связанных с контейнерами , включая частные реестры контейнеров и интеграцию с Azure Kubernetes Service (AKS). Azure Pipelines предоставляет сервис CI / CD платформы.
конфигурация
Всем DevOps Azure можно управлять с помощью веб-интерфейса пользователя, но вы также можете настроить конвейеры Azure с помощью манифеста на основе YAML, зарегистрированного в исходном коде вашего приложения. Веб-интерфейс позволяет управлять средами развертывания, выпусками версий, артефактами и многим другим.
Преимущества и ограничения
Если ваша команда уже использует Azure, то DevOps Azure является естественным расширением вашего существующего рабочего процесса. Он поддерживает как управляемые, так и локальные установки, а также поддерживает ряд целей развертывания Azure, включая службу приложений Azure, Kubernetes и функции Azure.
Однако интеграция с другими службами (включая службы Azure) не является простой. Для настройки интеграции в Azure DevOps требуется копировать и вставлять значения, даже из таких служб, как реестр контейнеров Azure, что делает его менее сложным и более сложным в настройке.
ценообразование
Azure Pipelines предлагает бесплатный уровень с одной бесплатной параллельной работой CI / CD и 1800 минут в месяц. Стоимость дополнительных заданий составляет 40 долларов, а артефакты хостинга (например, изображения) — 2 доллара за ГБ в месяц. Дополнительные услуги, такие как Azure Boards, предоставляются за дополнительную ежемесячную плату. Чтобы узнать больше, посетите страницу ценообразования Azure DevOps Services .
Мой дубль
Azure DevOps отлично подходит для групп, которым требуется комплексное решение для управления DevOps или которые уже используют Azure. Это значительно упрощает жизненный цикл разработки, централизуя его в одном месте. Тем не менее, это может быть трудно настроить, и это может быть слишком сложным для команд, которым просто нужен базовый конвейер контейнера.
3. GitLab CI / CD
GitLab начал свою жизнь как SCM с открытым исходным кодом, но быстро превратился в законченное решение для управления DevOps. Как и Azure DevOps, он предоставляет такие функции, как управление проектами, частные реестры контейнеров и оркестрованные среды сборки (включая Kubernetes).
конфигурация
GitLab CI / CD работает на GitLab Runner , который выполняет каждый шаг в вашем конвейере CI / CD в автономной среде. Конфигурация выполняется через манифест gitlab-ci.yml , который поддерживает некоторые расширенные конфигурации, включая условную логику и импорт других манифестов.
Кроме того, вы можете автоматизировать весь конвейер без настройки, используя Auto DevOps . GitLab автоматически определяет, как создать ваше приложение, основываясь на его исходном коде (в данном случае Dockerfile), используя пакеты сборки Heroku (через Herokuish ). Auto DevOps может автоматически запускать модульные тесты, выполнять анализ качества кода и сканировать изображения на наличие проблем безопасности.
Для развертывания GitLab использует инструмент dpl , который поддерживает широкий спектр поставщиков, включая облачные платформы и кластеры Kubernetes.
Преимущества и ограничения
GitLab предлагает чрезвычайно гибкий конвейер, который вы можете настроить самостоятельно или полностью автоматизировать с помощью встроенных инструментов. Конфигурация YAML обеспечивает больший диапазон структур и этапов проекта, таких как создание зависимостей проекта и объединение нескольких конвейеров из разных проектов. Поскольку GitLab использует существующие инструменты с открытым исходным кодом, такие как Herokuish и dpl, он поддерживает широкий спектр типов проектов, языков и целей развертывания.
Хотя GitLab может развертывать Runners и артефакты в существующих средах, он не может самостоятельно предоставлять или поддерживать эти среды (за исключением Google Kubernetes Engine и Amazon Elastic Kubernetes Service). Также отсутствует графический инструмент настройки конвейера, который может сделать управление конвейером менее интуитивным, чем с такими инструментами, как Azure Pipelines.
ценообразование
GitLab использует модель открытого ядра: предлагает базовую версию с открытым исходным кодом и платную корпоративную версию с дополнительными функциями. Для платных планов цены делятся на уровни в зависимости от количества пользователей, количества минут, потраченных на работу конвейеров CI в месяц, и доступа к определенным функциям. Все планы включают в себя неограниченное количество репозиториев кода, инструменты планирования проекта и 2000 бесплатных конвейерных минут в месяц. Платные планы варьируются от 4 долларов на пользователя / месяц до 99 долларов на пользователя / месяц.
Мой дубль
GitLab — невероятно универсальный и мощный инструмент CI / CD, который обладает чрезвычайно полезными функциями. Версия с открытым исходным кодом достаточно многофункциональна, чтобы конкурировать со многими коммерческими вариантами, а также позволяет вам самостоятельно размещаться. Однако для этого необходимо поддерживать отдельную среду развертывания.
4. AWS Эластичный бобовый стебель
Elastic Beanstalk — это не просто конвейер, а инструмент управления ресурсами AWS. Он может автоматически предоставлять, балансировать нагрузку, масштабировать и отслеживать ресурсы, такие как контейнеры ECS, сегменты S3 и экземпляры EC2. Это позволяет вам создавать полностью настраиваемый конвейер в AWS в зависимости от ваших конкретных требований.
конфигурация
Конфигурация Beanstalk описывает, как развернуть контейнер и среду, в которой он развернут. Это определено в файле Dockerrun.aws.json . Beanstalk представляет уникальные концепции , такие как:
- Приложение: логическая коллекция компонентов Beanstalk, таких как среды и версии.
- Версия приложения: готовая к развертыванию версия вашего исходного кода.
- Среда: набор ресурсов AWS, необходимых для запуска версии приложения.
Преимущества и ограничения
Beanstalk — чрезвычайно мощный инструмент не только для Docker, но и для AWS. Он обеспечивает автоматическое масштабирование, непрерывное обновление, мониторинг и управление выпусками. Это также позволяет вам получать доступ и управлять ресурсами напрямую.
Однако Beanstalk более сложен, чем обычные конвейеры. Вам необходимо предварительно собрать и разместить образы Docker в репозитории изображений, если только вы не используете одну контейнерную среду, а версии контейнера тесно связаны со средами. Вы можете запускать обновления только через интерфейс Beanstalk; поэтому в случае сбоя контейнера вам нужно обратиться к нему вручную с помощью консоли Beanstalk.
ценообразование
Beanstalk сам по себе бесплатный, но компоненты AWS, которые он предоставляет, оценены по их нормальным ценам. Например, если вы конфигурируете свою среду с узлом ECS и балансировщиком нагрузки ELB, вы будете платить за узел и балансировщик нагрузки, как если бы вы их обычно настраивали.
Мой дубль
Благодаря широкому спектру доступных сервисов AWS, Beanstalk предоставляет отличный способ управлять всеми из них. Он может быть чрезвычайно мощным при использовании в качестве инструмента оркестровки, но может быть слишком сложным для использования в качестве конвейерного контейнера.
5. Google Cloud Build
Cloud Build — это относительно базовая служба CI контейнеров, построенная на Google Cloud Platform (GCP). Он может создавать образы непосредственно из исходного кода или Dockerfile и развертывать их непосредственно в GKE, Cloud Run и других службах GCP.
конфигурация
Cloud Build настраивается с помощью файла cloudbuild.yaml (или JSON). Вы можете определить процесс создания изображений, а также где хранить полученное изображение. Например, создать и отправить образ Docker в Реестр контейнеров Google так же просто, как выполнить следующие команды:
name: gcr.io/cloud-builders/docker
args: ['build', '-t', 'gcr.io/$PROJECT_ID/myimage', '.']
images: ['gcr.io/$PROJECT_ID/myimage']
Cloud Build поддерживает триггеры , которые автоматически запускают сборки при изменениях вашего исходного кода.
Преимущества и ограничения
Cloud Build аккуратно интегрируется с другими сервисами GCP , включая GKE, App Engine и Cloud Run. Вы можете напрямую контролировать размер и емкость ваших машин сборки, а также кэшировать слои изображений для более быстрой сборки. Вы также можете запускать локальные сборки для проверки или отладки вашей сборки, прежде чем переходить в Cloud Run.
Поскольку Cloud Build построен на основе GCP, он поддерживает только ограниченное количество целей развертывания. Развертывание контейнеров на других платформах возможно, но требует дополнительных шагов. Кроме того, как и в GitLab, Cloud Build не имеет инструмента настройки визуального конвейера.
ценообразование
Ценообразование зависит от размера ваших машин сборки и времени сборки. Стандартный экземпляр n1-standard-1 стоит 0,003 доллара за минуту сборки, до 0,064 доллара — для экземпляра n1-highcpu-32. Вы также получаете 120 бесплатных минут сборки в день на экземпляре n1-standard-1.
Мой дубль
Cloud Build относительно упрощен, но это тоже одна из его сильных сторон. Это быстро, легко учиться, довольно недорого и хорошо интегрируется с другими сервисами GCP. Если у вас уже есть среда развертывания или вы уже используете GCP, я рекомендую попробовать ее.
6. Дженкинс Х
Jenkins является одним из самых популярных доступных инструментов CI / CD, и Jenkins X расширяет его, добавляя комплексную интеграцию Kubernetes. Jenkins X не только развертывается в Kubernetes, но также может предоставлять и управлять кластерами Kubernetes для вас.
конфигурация
Конвейеры Jenkins X построены на Tekton Pipelines , что помогает в работе конвейеров CI / CD в Kubernetes. Вы можете настроить свой конвейер, используя файл jenkins-x.yml (по сравнению с традиционным Jenkinsfile). Jenkins X также предоставляет пакеты сборки , которые могут помочь упаковать исходный код в образы, которые затем могут быть развернуты в Kubernetes.
Преимущества и ограничения
Jenkins X использует два популярных существующих проекта — Jenkins и Kubernetes — для создания масштабируемой платформы CI / CD. Он может автоматизировать весь конвейер CI / CD и поддерживает среды предварительного просмотра и продвижения конвейера. Поскольку он включает в себя Jenkins, у него есть доступ ко всему сообществу разработчиков Jenkins.
However, Jenkins X requires Kubernetes and is very opinionated about how the cluster is configured. The command-line tool automates much of this process, but it’s an important consideration.
Pricing
Jenkins X is open source.
My Take
For teams using Jenkins, Jenkins X will feel like a natural progression. It has some strict limitations and requirements, but for teams using Kubernetes, having a tool that natively integrates with your infrastructure can be a benefit.
Conclusion
Let’s look at a quick comparison:
Product | Platform | Configuration | Key Features | Pricing |
Heroku | PaaS | YAML |
|
|
Azure DevOps | PaaS or self-hosted | YAML or web |
|
|
GitLab CI/CD | PaaS or self-hosted | YAML |
|
|
AWS Elastic Beanstalk | PaaS | JSON |
|
|
Google Cloud Build | PaaS | YAML or JSON |
|
|
Jenkins X | Self-hosted | YAML |
|
|
For teams wishing to simply deploy and host Docker containers in a stable environment, Heroku is hard to beat. It offers a fast and configurable platform, supports a wide range of integrations, and has a massive marketplace of third-party add-ons. Elastic Beanstalk is a close second for its ability to orchestrate AWS resources, and is the recommended choice for teams with more complex requirements.
For container CI, GitLab is arguably the most comprehensive option due to its sheer number of features, Auto DevOps capability, and open core model. Google Cloud Build leverages the speed and capacity of the Google Cloud Platform for fast builds, and Jenkins X benefits from being part of the Jenkins project. Most of these services are either open source or offer free trials, so we recommend trying them and seeing which works best for your workflow.