101cc6141f
Affected files: 00 Inbox/CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins.md
202 lines
13 KiB
Markdown
202 lines
13 KiB
Markdown
---
|
|
status: seed
|
|
type: concept
|
|
tags: []
|
|
created: 2025-12-17
|
|
updated: 2026-06-10
|
|
aliases: []
|
|
---
|
|
|
|
# CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins
|
|
|
|
## Процессы CI/CD
|
|
|
|
**CI/CD (Continuous integration and Continuous delivery)** — широко распространенная devops-практика, подразумевающая непрерывную сборку и доставку цифрового продукта до конечной инфраструктуры.
|
|
|
|
### Continuous integration
|
|
|
|
Методология, при которой изменения в исходный код вносятся последовательно и непрерывно.
|
|
|
|
Исходный код подвергается проверкам, тестируется, упаковывается в артефакт, помещается в хранилище и готовится к отправке на развертывание.
|
|
|
|
### Continuous delivery
|
|
|
|
Практика, являющаяся логическим продолжением непрерывной сборки (интеграции) цифрового продукта.
|
|
|
|
Артефакт, прошедший все этапы непрерывной сборки, немедленно развертывается на конечной инфраструктуре, где в виде цифрового продуктаьвыполняет свои функции.
|
|
|
|
**Цели CI/CD:**
|
|
|
|
- Обеспечить последовательный и непрерывный процесс сборки, проверки, тестирования и развертывания цифровых продуктов.
|
|
- Автоматизировать процедуру сборки и доставки.
|
|
- Минимизировать возможные ошибки и облегчить процесс их исправления.
|
|
- Поддержать современный взгляд на гибкие методологии разработки.
|
|
|
|
**Преимущества CI/CD:**
|
|
|
|
- Максимальная автоматизация процессов.
|
|
- Своевременное обнаружение ошибок.
|
|
- Сокращение цикла получения обратной связи.
|
|
- Разделение сред разработки, тестирования и эксплуатации цифрового продукта.
|
|
- Глубокая наблюдаемость (Observability).
|
|
|
|
**Распространенные этапы CI/CD:**
|
|
|
|
- Создание кода / интеграция функционала.
|
|
- Модульное тестирование.
|
|
- Сборка / компилирование.
|
|
- Доставка артефакта и его развертывание.
|
|
- Дополнительные проверки.
|
|
- Сбор метрик / сбор обратной связи.
|
|
|
|
**Начальный этап:**
|
|
|
|
Этап создания кода (интеграции нового функционала) подразумевает наличие системы контроля версий, где осуществляется коллективная работа над исходным кодом цифрового продукта и ведется разработка функционала (исправление ошибок).
|
|
|
|
В процессах CI/CD это начальный этап сборки и доставки.
|
|
|
|
**Автоматизация:**
|
|
|
|
Модульное тестирование относится к логическим проверкам исходного кода, не подразумевающее запуск приложения на исполнение.
|
|
|
|
В первую очередь необходимо самим разработчикам для уверенности в отсутствии логических ошибок в разрабатываемых участках исходного кода.
|
|
|
|
Процессы CI/CD позволяют автоматизировать запуск таких проверок.
|
|
|
|
**Сборка:**
|
|
|
|
Сборка (компилирование) продукта из исходного кода чаще всего осуществляется с применением стандартизированной упаковки приложения, готового к запуску на конечной инфраструктуре.
|
|
|
|
Сборка часто является заключительным этапом процесса CI, далее собранный и готовый к запуску *артефакт* передается процессу непрерывной доставки (но могут иметь место и дополнительные проверки).
|
|
|
|
**Доставка:**
|
|
|
|
Доставка собранного и проверенного артефакта до конечной инфраструктуры осуществляется в процессе CD.
|
|
|
|
Доставленный и развернутый артефакт является конечным продуктом, функции которого эксплуатируют потребители.
|
|
|
|
**Проверка:**
|
|
|
|
В зависимости от среды, до которой был доставлен артефакт, он может быть подвергнут дополнительным проверкам, прежде чем отправиться в эксплуатацию.
|
|
|
|
Различают несколько различных видов сред цифрового продукта:
|
|
|
|
- Среда разработки (Dev).
|
|
- Среда тестирования (Test, QA, Stage, Integration, Pre-production, Uat,..).
|
|
- Среда эксплуатации (Prod).
|
|
|
|
**После прохождения всех этапов процессы CI/CD не заканчиваются:**
|
|
|
|
- Важно собирать обратную связь о процессе эксплуатации продукта (согласно потребительским метрикам).
|
|
- Собирать статистику (Метрики, Логи, Журналы, Трассировки).
|
|
- Процессы CI/CD не предполагают остановки и возобновляются с каждым новым коммитом и изменением в исходном коде.
|
|
|
|
### Пайплайны
|
|
|
|
Все этапы, составляющие процессы CI/CD, называются пайплайнами (Pipelines).
|
|
|
|
Создание, изменение, поддержка и совершенствование пайплайнов возможны в специализированных инструментах — **сборочных конвейерах CI/CD.**
|
|
|
|
## Часть 3. Знакомство с GitlabCI
|
|
|
|
**GitlabCI (Gitlab CI/CD)** — opensource-инструмент, встроенный в систему управления версиями Gitlab (изначально выпускался как отдельный проект).
|
|
|
|
GitlabCI выполняет функции сборочного конвейера, позволяющего осуществлять все этапы CI/CD.
|
|
|
|
**Преимущества GitlabCI:**
|
|
|
|
- Совместимость с Gitlab.
|
|
- Простота интеграции в рабочие процессы.
|
|
- Развитое комьюнити.
|
|
- Автомасштабирование.
|
|
|
|
GitlabCI относительно новый инструмент, быстро завоевавший популярность в сообществе.
|
|
|
|
Своей известностью GitlabCI обязан в первую очередь нативностью с Gitlab, достаточной функциональностью и простотой в использовании.
|
|
|
|
GitlabCI полностью совместим с системой управления версиями Gitlab, изначально предполагая интеграцию Gitlab в процесс непрерывной сборки (CI).
|
|
|
|
Однако, возможна интеграция и с другими системами управления версиями.
|
|
|
|
**GitlabCI обладает множеством полезных возможностей** **для улучшения процесса автоматизации сборки и доставки,** **интеграция которых в рабочий процесс не составит труда:**
|
|
|
|
- Отслеживание проектов и групп.
|
|
- Тонкая настройка пайплайнов.
|
|
- Мониторинг состояния задач в этапах CI/CD.
|
|
- Анализ результатов выполнения этапов.
|
|
|
|
GitlabCI обладает встроенным механизмом по автоматическому масштабированию сред исполнения рабочих задач (Runners).
|
|
|
|
Выполнение задач по сборке может осуществляться на Runners под управлением ВМ на разных ОС, Docker, Kubernetes.
|
|
|
|
## Часть 4. Знакомство с Jenkins
|
|
|
|
**Jenkins** — Open-source инструмент CI/CD, предназначенный для автоматизации множества задач в цифровых проектах и являющийся сборочным конвейером.
|
|
|
|
**Достоинства и преимущества Jenkins:**
|
|
|
|
- Простота в установке, настройке и эксплуатации.
|
|
- Расширяемость за счет использования Jenkins плагинов.
|
|
- Развитое сообщество и богатая документация.
|
|
|
|
Jenkins легко устанавливать, настраивать и обновлять благодаря простым процедурам установки без лишних деталей и специфичных особенностей.
|
|
|
|
Jenkins обладает обширной и понятной документацией.
|
|
|
|
В Jenkins создана целая экосистема различных плагинов, расширяющая или модифицирующая существующий функционал, в том числе графический интерфейс.
|
|
|
|
Плагинов насчитывается более 1500, практически все из них бесплатны и очень просты в установке.
|
|
|
|
Jenkins обладает самым развитым сообществом по сравнению с другими сборочными конвейерами CI/CD.
|
|
|
|
К комьюнити относятся не только команда разработки самого инструмента, но и разработчики множества плагинов.
|
|
|
|
## Часть 5. GitlabCI vs Jenkins
|
|
|
|
**Сходства GitlabCI и Jenkins:**
|
|
|
|
- Открытый исходный код.
|
|
- Кроссплатформенность.
|
|
- Простота в установке и настройке.
|
|
- Гибкая работа с пайплайнами.
|
|
- Поддержка API.
|
|
- Интегрируемость с другими системами в рамках рабочих процессов.
|
|
- Обширное неравнодушное комьюнити.
|
|
|
|
### Возможности
|
|
|
|
**Уникальные возможности GitlabCI:**
|
|
|
|
- Нативность Gitlab.
|
|
- Не требуется отдельная установка.
|
|
- Собственный мониторинг производительности.
|
|
- Встроенные решения по проверке качества кода.
|
|
|
|
**Уникальные возможности Jenkins:**
|
|
|
|
- Развитая экосистема плагинов.
|
|
- Расширенные возможности по интеграции со множеством систем за счет использования плагинов.
|
|
- Возможность использования языка Groovy для описания пайплайнов.
|
|
- Более обширное комьюнити, лучше документация.
|
|
|
|
### Недостатки
|
|
|
|
**Недостатки GitlabCI:**
|
|
|
|
- Специфичная работа с артефактами.
|
|
- Возможные трудности при описании и работе со сложными пайплайнами.
|
|
- Местами чувствуется недостаточность языков описания пайплайнов.
|
|
|
|
**Недостатки Jenkins:**
|
|
|
|
- Нагромождение плагинов может вызывать сложности в их поддержке и обновлении.
|
|
- Для небольших проектов и небольших команд работа может оказаться сложнее, чем с GitlabCI.
|
|
|
|
GitlabCI и Jenkins замечательные инструменты, обладающие впечатляющими возможностями.
|
|
|
|
Если вы используете Gitlab в своей работе, логичнее использовать GitlabCI для процессов CI/CD.
|
|
|
|
Если вы не привязаны к Gitlab и вас впечатляет экосистема плагинов, выбирайте Jenkins.
|
|
|
|
Оба инструмента прекрасно справляются со своими задачами.
|