Jenkins CI/CD: Автоматизация сборки и развертывания

Jenkins — это инструмент с открытым исходным кодом для автоматизации сборки, тестирования и развертывания программного обеспечения, обеспечивающий полноценный CI/CD процесс.

От Hudson к Jenkins: история

Первоначально инструмент назывался Hudson. После поглощения Sun компанией Oracle возникли проблемы с торговой маркой. Проект был форкнут, получив название Jenkins.

Что такое CI/CD?

CI/CD подразумевает автоматизацию процесса: после загрузки кода в репозиторий он автоматически собирается, тестируется и развертывается на сервере с последующим отчетом о результатах.

Как работает Jenkins?

Jenkins работает следующим образом:

  1. Мониторинг репозитория: Jenkins постоянно проверяет репозиторий на наличие изменений.
  2. Сборка проекта: При обнаружении изменений, Jenkins запускает сборку. При ошибках разработчик получает уведомление.
  3. Тестирование: После успешной сборки код развертывается на тестовом сервере и запускаются автотесты. Результаты сообщаются разработчикам.
  4. Развертывание: При успешном прохождении тестов происходит развертывание на стейдж или продакшн.

Количество этапов может быть любым.

Архитектура Jenkins

Jenkins имеет распределенную архитектуру:

  • Мастер (Контроллер): Главный сервер, отвечающий за планирование работ, проверку репозитория, выбор агента, мониторинг и отчетность.
  • Агенты: Подчиненные сервера, выполняющие задания Мастера. Они могут работать на разных операционных системах, что позволяет оптимизировать сборку и тестирование. Использование агентов повышает производительность за счет балансировки нагрузки.

Настройка Jenkins

Настройка Jenkins возможна двумя способами:

  • Графический интерфейс: Создаются Job — наборы задач, выполняющиеся последовательно. В настройках Job указывается репозиторий, параметры сборки, команды, этапы выполнения, деплой и многое другое.
  • Jenkinsfile: Создается отдельный файл Jenkinsfile с описанием пайплайна и размещается в репозитории. Jenkins автоматически его подтягивает.

Jenkinsfile: декларативный подход

Jenkinsfile использует декларативный подход, описывая что нужно получить, а не как. Основные блоки:

  • pipeline: главный блок.
  • agent: указывает агент для выполнения (например, any, или конкретный лейбл, или контейнер Docker/Kubernetes).
  • stages: блок, разделяющий работу на этапы (например, build, test, deploy).
  • steps: скрипты, выполняющиеся на каждом этапе.
  • post: блок, выполняющийся после завершения пайплайна (например, always, success, failure).
  • when: условия выполнения блоков.
  • environment: переменные окружения.
  • parameters: параметры, выбираемые при запуске пайплайна (строка, число, булево, выбор из списка).

Jenkinsfile написан на Groovy. Доступен также scripted стиль.

Плагины Jenkins

Jenkins имеет обширную библиотеку плагинов, расширяющих его функциональность: интеграции с системами управления кодом, Jira, Kubernetes и другими сервисами; кастомизация интерфейса; улучшенная работа с пайплайнами; кастомизация сборок и тестирования; мониторинг и отчеты.

Альтернативы Jenkins

Существуют альтернативные CI/CD инструменты, такие как GitLab CI, TeamCity, CircleCI, Bamboo, GitHub Actions. Однако Jenkins остается одним из самых популярных.

CI и CD в Jenkins

Отнесение функционала Jenkins к CI или CD — вопрос контекста.

Что будем искать? Например,программа