Современные системы оркестрации в CI/CD


Современные системы оркестрации в CI/CD

С приходом современных систем оркестрации в CI/CD парадигме произошел сдвиг в сторону разделения процессов сборки (build pipelines) и доставки (deployment pipelines).

Если раньше все рассматривалось как единое целое, т.е. мы сначала создавали пайплайны сборки и доставки в рамках единого инструмента — напр. Bamboo, Jenkins, GitLab, то сейчас такие сущности рассматриваются отдельно. Так, для сборки сервиса или приложения, отдельным инструментом создается артефакт (упакованный сервис) для запуска на выбранной платформе оркестрации, такой как Nomad, Kubernetes (K8s) или OperShift. И это является универсальным способом упаковки для всех платформ, то есть создаётся докер-образ (docker image).

В настоящий момент 80% рынка заняты Kubernetes и стоит в первую очередь ориентироваться на него, т.к. все уже готово из коробки (Ingress и ALB/NLB маппинг, управление секретами / secrets management, и т.д.).

Интересно, что для сборки имиджа можно использовать любую даже легаси платформу (напр., Bamboo или Jenkins). Задача — создать артефакт, то есть собрать ваш проект и упаковать в докер-образ.

Такие новые платформы оркестрации требуют новую современную Git-ориентированную парадигму развертывания для корректной работы. Этот подход пропагандирует неизменяемый и декларативный подход процесса. Чтобы доставить то или иного приложение упакованное в докер-образ нам достаточно указать, что платформа оркестрации должна контролировать состояние доставки в системе Git. Таким образом мы описываем состояние к которому мы хотим прийти в платформе оркестрации непосредственно в Git. Кстати, наиболее популярное сейчас решение это ArgoCD.

Стоит отметить, что такой подход пришелся не всем по вкусу, т.к. с одной стороны это изменение парадигмы, а с другой — усложнение работы.

Многие поставщики решений выпустили гибридные варианты (к примеру Jenkins X), которые используют старые методы и умеют работать с новыми системами оркестрации. Однако, такие гибридные системы давольно трудоемки в развертывании и поддержке, и ресурсоемкие в использовании памяти, дискового пространства и процессора, однако позволяют работать с K8s старым привычным способом.

Так что советуем присмотреться к новый парадигме Git-ориентированного развертывания и собирать проект отдельно (используя платформу, позволяющую собрать докер-образ, например, GitLab), а потом уже доставлять его в кластер K8s используя ArgoCD.